为什么Linux二进制文件的虚拟内存地址从0x8048000开始?
-
24-10-2019 - |
题
在Ubuntu X86系统上拆卸精灵二进制文件,我不禁注意到代码(.TEXT)部分从虚拟地址0x8048000开始,并且所有较低的内存地址似乎都没有使用。
这似乎很浪费,而Google的出现都是 涉及stack_top的民间传说 或防止零销量的防止。后一种情况看起来可以通过使用单页而不是留下128MB差距来修复。
因此,我的问题是 - 是否有明确的答案,说明为什么布局已修复到这些值中,还是只是一个任意选择?
解决方案
来自 接头和装载机 书:
在386个系统上,文本基础地址为0x08048000,它允许在文本下方有一个相当大的堆栈,同时仍停留在地址上方0x08000000,允许大多数程序使用单个第二级页面表。 (回想一下,在386,每个第二级表映射0x00400000地址。)
不隶属于 StackOverflow