2010-06-03 161 views
28

拆卸以及Ubuntu x86系统我忍不住对一个ELF二进制注意到代码(的.text)部分从虚拟地址0x8048000开始,所有较低的内存地址似乎是不用的。为什么linux二进制文件的虚拟内存地址从0x8048000开始?

这似乎是相当浪费和所有谷歌变成了要么是folklore involving STACK_TOP或反对空指针引用保护。后一种情况看起来可以通过使用单个页面来修复,而不是留下128MB空白。

所以我的问题是这样的 - 有一个明确的答案,为什么布局已得到修复,这些价值还是仅仅是一个任意的选择?

+0

我不知道实际的答案;但也许这篇文章可能会帮助或至少提供一个有趣的阅读! http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html – 2010-06-03 13:36:45

+0

的可能重复[为什么形式0x80xxxxx的ELF执行入口点的虚拟地址,而不是零为0x0?(HTTP://计算器的.com /问题/ 2187484 /为什么-是最ELF-执行-入口点的虚拟地址的最外形0x80xxxxx和-n)的 – 2015-05-29 18:46:42

回答

24

Linkers and loaders书:

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