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

标签 linux memory header virtual elf

我正在研究有关 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_Ehdr52 ,为您提供默认 PT_PHDR地址0x08048034 .

这些地址中的任何一个都可以通过以下方式更改:使用链接器-Ttext=0xNNNN标志。

关于linux - 为什么程序头段虚拟地址是0x40004000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21832852/

相关文章:

java - 如何停止 ksh?

php - Symfony 中的操作系统独立供应商路径

c - <string.h> 和 <strings.h> 的区别

javascript - 在页面模板上加载脚本

linux - 撤消 chown 和 chmod

c - 如何向套接字发送信号?

javascript - html元素内存存储容量值

php - 如何修复内存耗尽的postgresql

c++ - C++中容器的内存分配

xcode - 在 xcode 中创建框架时保留目录结构