elf可执行标头

时间:2017-06-16 06:18:02

标签: linux memory-mapping virtual-address-space

为什么elf的入口点是0x8048320.来自This问题,它是操作系统内核用来映射进程的虚假地址。但是From This,进程映射的虚拟地址(在x86处理器中)是0xc0000000(用户空间低3GB,内核空间高1GB)。现在看看这个0x8048320起点地址背后的理论。不应该假设是0c0000000h ??

此致

1 个答案:

答案 0 :(得分:1)

入口点不是可执行文件映射的开头。它是程序启动时将运行的第一条指令的地址。因此,它通常位于.text部分的中间。

如果您使用GCC或兼容的编译器,它将是_start中函数libc的地址。这是最终会调用main()

的函数

在您的示例中,0x8048320 基地址可能为0x8000000_start的偏移量为0x48320

然而,在我的机器中:

$ readelf -h /usr/bin/ls | grep Entry
Entry point address:               0x404030

所有这些虚拟地址通常取决于编译器和/或链接器。