一尘不染

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

linux

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

这似乎是相当浪费的,并且Google出现的所有信息要么是涉及STACK_TOP的民间传说,要么是针对空指针取消引用的保护。后一种情况看起来可以通过使用单个页面而不留128MB的间隙来解决。

所以我的问题是-对于为什么将布局固定为这些值,还是有明确的答案吗?


阅读 686

收藏
2020-06-02

共1个答案

一尘不染

链接器和装载器书中:

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

2020-06-02