我知道处理器的 mmu 使用寄存器cr3将线性地址转换为物理地址,前提cr3是正确设置为页目录的物理地址。但是在内核分配了页表之后,它如何找到表的物理地址并设置cr3为它呢?
编辑:我说的是 linux 内核。
我有一个elf二进制文件,它具有以下dynsym符号表作为输出readelf:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 (2)
2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
3: 0000000000400440 0 FUNC GLOBAL DEFAULT UND printf@GLIBC_2.2.5 (2)
4: 0000000000400460 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (2)
Run Code Online (Sandbox Code Playgroud)
该value栏是什么意思?由于此表有400440for printf,这是否意味着动态链接器必须映射printf到该地址?如果是,这个值是如何决定的?是随机的吗?
编辑:另外,这是带有gcc的linux x86-64