【发布时间】:2012-04-03 02:47:02
【问题描述】:
我在linux下通过pmap看到进程映像:
08048000 0 4 0 r-x-- [my program]
08049000 0 4 4 rw--- [my program]
上面三个段分别是代码段、rodata段和数据段,都是对齐到PAGESIZE(4K)的,但是当我输入命令objdump -h时,ELF头显示如下:
read-only code segment
Load off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
filesz 0x00000448 memsz 0x00000448 flags r-x
read/write data segment
Load off 0x00000448 vaddr 0x08049448 paddr 0x08049448 align 2**12
filesz 0x000000e8 memsz 0x00000104 flag rw-
在ELF头中说,代码段和数据段分别从虚拟地址的0x08048000,0x049448开始寻址,这与内存中的进程映像不同。我知道代码/数据段应该分配给不同的PAGESIZE,这可以给他们不同的保护权限。但是,如果真正的虚拟与elf二进制不同,程序如何执行?
【问题讨论】:
标签: memory-management process operating-system kernel elf