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

最佳答案

入口点不是可执行文件映射的开始。它是程序启动时将运行的第一条指令的地址。因此,它通常位于.text部分的中间。
如果使用GCC或兼容的编译器,它将是_start中函数libc的地址。这是最终调用main()的函数。
在您的示例中,0x8048320基址可能是0x8000000,而_start的偏移量将是0x48320
但在我的机器里:

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

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

关于linux - elf可执行 header 的入口点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44582082/

10-11 14:54