为什么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/