【问题标题】: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,可执行文件链接的默认地址是0x400000Elf64_Ehdr(在每个ELF二进制文件的开头)的大小是64,给你默认值 PT_PHDR0x400040的地址。

    对于Linux i*86,可执行文件的默认地址是0x08048000Elf32_Ehdr 的大小是52,给您默认PT_PHDR 地址0x08048034

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

    【讨论】:

      猜你喜欢
      • 2020-11-28
      • 2015-11-29
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多