【问题标题】:Why program header segment virtual address is 0x40004000?为什么程序头段虚拟地址是0x40004000?
【发布时间】:2014-02-17 15:23:11
【问题描述】:
我正在研究一些关于 ELF 格式的东西(在 x64 Linux 平台上),在程序头中,第一段(PT_PHDR)有这个虚拟地址0x40004000(对齐为 8 个字节)。我不明白,我找不到解释的地方。在互联网上的其他一些示例中,它是0x08048034,我不知道这是因为操作系统还是处理器架构。是否有列出这些固定值并简要说明的地方,例如参考书或手册之类的?谢谢
【问题讨论】:
标签:
linux
memory
header
virtual
elf
【解决方案1】:
在 x64 Linux 平台上
那个平台不存在。你的意思是Linux x86_64平台。
(PT_PHDR) 有这个虚拟地址 0x40004000
这是一个很奇怪的地址。你确定不是0x400040?
我不明白,也找不到解释的地方。在互联网上的其他一些示例中,它是 0x08048034,我不知道这是因为操作系统还是处理器架构。
对于Linux x86_64,可执行文件链接的默认地址是0x400000,Elf64_Ehdr(在每个ELF二进制文件的开头)的大小是64,给你默认值 PT_PHDR0x400040的地址。
对于Linux i*86,可执行文件的默认地址是0x08048000,Elf32_Ehdr 的大小是52,给您默认PT_PHDR 地址0x08048034。
这些地址中的任何一个都可以通过例如使用链接器-Ttext=0xNNNN 标志。