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