我正在研究有关 ELF 格式的一些内容(在 x64 Linux 平台上),并且在程序头中,第一段 (PT_PHDR) 具有此虚拟地址 0x40004000
(对齐方式为 8 字节)。我不明白,也找不到解释的地方。在互联网上的一些其他示例中,它是0x08048034
,我不知道这是否是由于操作系统或处理器架构的原因。是否有一个地方列出并简要解释这些固定值,例如引用书或手册之类的?谢谢
最佳答案
on a x64 Linux platform
该平台不存在。你的意思是Linux x86_64
平台。
(PT_PHDR) has this virtual address 0x40004000
这是一个非常奇怪的地址。你确定不是0x400040
?
I don't understand and I don't find a place where that is explained. In some other examples on the Internet it is 0x08048034 and I don't know if this is because of the OS or the processor architecture.
对于Linux x86_64
,可执行文件链接的默认地址是 0x400000
,大小为Elf64_Ehdr
(位于每个 ELF 二进制文件的开头)是 64
,给你默认 PT_PHDR
地址0x400040
.
对于Linux i*86
,可执行文件的默认地址是 0x08048000
,大小为Elf32_Ehdr
是 52
,为您提供默认 PT_PHDR
地址0x08048034
.
这些地址中的任何一个都可以通过以下方式更改:使用链接器-Ttext=0xNNNN
标志。
关于linux - 为什么程序头段虚拟地址是0x40004000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21832852/