dar*_*dar 5 linux process memory elf virtual-memory
我在某处读到(至少从 Linux v. 2.6 开始)所有用户空间代码都放置在虚拟内存地址空间中的加载地址 0x8048000 处。
我自己的观察证实了这一点。我做了一个
cat /proc/......../maps
Run Code Online (Sandbox Code Playgroud)
对于多个进程,进程'程序的第一部分text
总是从'0x8048000'开始。
此外,C 库启动代码和所有其他运行时好东西似乎都映射在此默认值之后。
这构成了近 128 M 的地址空间,考虑到 0xC0000000 - 0x8048000 仍然是用户空间内容的几乎 3G 地址空间,这并不多。
所以我的问题是为什么?
我们正在处理虚拟地址,与其他程序的干扰或重叠是由 VM 工作方式的定义排除的。
0x00000000 到 0x8048000 范围内是否有一些固定/默认映射?
除了默认起始地址落在页面边界这一事实之外,选择这个数字而不是任何其他值的理由是什么?