在 Ubuntu x86 系统上反汇编 ELF 二进制文件我不禁注意到代码(.text)部分从虚拟地址 0x8048000 开始,并且所有较低的内存地址似乎都未使用。
这似乎相当浪费,所有谷歌出现的要么是涉及 STACK_TOP 的民间传说,要么是针对空指针取消引用的保护。后一种情况看起来可以通过使用单个页面而不是留下 128MB 的间隙来修复。
所以我的问题是——对于为什么布局被固定为这些值或者它只是一个任意的选择,有一个明确的答案吗?
在 Ubuntu x86 系统上反汇编 ELF 二进制文件我不禁注意到代码(.text)部分从虚拟地址 0x8048000 开始,并且所有较低的内存地址似乎都未使用。
这似乎相当浪费,所有谷歌出现的要么是涉及 STACK_TOP 的民间传说,要么是针对空指针取消引用的保护。后一种情况看起来可以通过使用单个页面而不是留下 128MB 的间隙来修复。
所以我的问题是——对于为什么布局被固定为这些值或者它只是一个任意的选择,有一个明确的答案吗?
从链接器和加载器书中:
在 386 系统上,文本基地址为 0x08048000,这允许文本下方有一个相当大的堆栈,同时仍保持在地址 0x08000000 上方,从而允许大多数程序使用单个二级页表。(回想一下,在 386 上,每个二级表映射 0x00400000 个地址。)