为什么程序头段虚拟地址是0x40004000?

时间:2014-02-17 15:23:11

标签: linux memory header virtual elf

我正在研究有关ELF格式的一些内容(在x64 Linux平台上),在程序头中,第一个段(PT_PHDR)具有此虚拟地址0x40004000(对齐为8个字节)。我不明白,我找不到一个解释的地方。在互联网上的一些其他示例中,它是0x08048034,我不知道这是因为操作系统还是处理器架构。是否存在列出并简要说明这些固定值的地方,如参考书或手册或其他内容?感谢

1 个答案:

答案 0 :(得分:0)

  

在x64 Linux平台上

该平台不存在。你的意思是Linux x86_64平台。

  

(PT_PHDR)具有此虚拟地址0x40004000

这是一个非常奇怪的地址。你确定它不是0x400040吗?

  

我不明白,我找不到解释的地方。在互联网上的一些其他示例中,它是0x08048034,我不知道这是因为操作系统还是处理器架构。

对于Linux x86_64,可执行文件链接的默认地址为0x400000Elf64_Ehdr的大小(位于每个ELF二进制文件的开头)为{{1} },为您提供默认 64地址PT_PHDR

对于0x400040,可执行文件的默认地址为Linux i*860x08048000的大小为Elf32_Ehdr,为您提供默认 { {1}}地址52

这些地址中的任何一个都可以通过例如使用链接器PT_PHDR标志。