为什么elf的入口点是0x8048320。
来自This问题是,它是操作系统内核用来映射进程的虚拟地址。但是From This ,进程映射的虚拟地址(在x86处理器中)是0xc0000000
(下3GB用于用户空间,上1GB用于内核空间)。现在这个 0x8048320 起始地址背后的理论是什么。难道不应该是0c0000000h
吗??
问候,
最佳答案
入口点不是可执行文件映射的开始处。它是程序启动时将运行的第一条指令的地址。因此,它通常位于 .text
部分的中间。
如果您使用GCC或兼容的编译器,它将是libc
中函数_start
的地址。该函数最终将调用您的 main()
。
从您的示例中,0x8048320
基地址可能是0x8000000
,_start
的偏移量将是0x48320
。
但是在我的机器上:
$ readelf -h /usr/bin/ls | grep Entry
Entry point address: 0x404030
所有这些虚拟地址通常取决于编译器和/或链接器。
关于linux - elf 可执行文件头的入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44582082/