linux - elf 可执行文件头的入口点

标签 linux memory-mapping virtual-address-space

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

相关文章:

c# - Windows 64 位地址空间

linux - 使用 % 或 UP/DOWN 在 linux 脚本中显示事件的 ip 地址

python - 使用 python 的 doc、docx 或 rtf 文件中的页数

c - Mmap 不使用给定的地址

c++ - 将 QFile 内容复制到另一个 QFile,最佳方法是什么?

c - 将地址空间除以 8

c++ - gcc -/usr/bin/ld 错误 : cannot find <library> in/usr/local/lib though ldconfig list it, 并将路径添加到 ld.so.conf

linux - 如何在 linux 和其他测试上生成文件 i/o 缓冲区?

c - 用 `memory_order_seq_cst` 排序原子

operating-system - 多级页表——分层分页