在Ubuntu x86系统上反汇编ELF二进制文件我忍不住注意到代码(.text)部分从虚拟地址0x8048000开始,所有较低的内存地址似乎都未被使用。
这似乎相当浪费,所有Google出现的都是folklore involving STACK_TOP或防止空指针解除引用。后一种情况看起来可以通过使用单个页面来修复,而不是留下128MB的间隙。
所以我的问题是 - 对于为什么布局已经固定到这些值或者它只是一个随意的选择,是否有明确的答案?
答案 0 :(得分:25)
在386系统上,文本基地址为0x08048000,它允许在文本下面保持相当大的堆栈,同时仍然保持在地址0x08000000之上,允许大多数程序使用单个二级页表。 (回想一下,在386上,每个二级表都映射了0x00400000个地址。)