为什么linux二进制文件的虚拟内存地址从0x8048000开始?

时间:2010-06-03 13:35:04

标签: linux x86 elf memory-layout

在Ubuntu x86系统上反汇编ELF二进制文件我忍不住注意到代码(.text)部分从虚拟地址0x8048000开始,所有较低的内存地址似乎都未被使用。

这似乎相当浪费,所有Google出现的都是folklore involving STACK_TOP或防止空指针解除引用。后一种情况看起来可以通过使用单个页面来修复,而不是留下128MB的间隙。

所以我的问题是 - 对于为什么布局已经固定到这些值或者它只是一个随意的选择,是否有明确的答案?

1 个答案:

答案 0 :(得分:25)

来自Linkers and loaders书:

  

在386系统上,文本基地址为0x08048000,它允许在文本下面保持相当大的堆栈,同时仍然保持在地址0x08000000之上,允许大多数程序使用单个二级页表。 (回想一下,在386上,每个二级表都映射了0x00400000个地址。)