为什么 Linux 二进制文件的虚拟内存地址从 0x8048000 开始?
在 Ubuntu x86 系统上反汇编 ELF 二进制文件时,我不禁注意到代码(.text)部分从虚拟地址 0x8048000 开始,并且所有较低的内存地址似乎都未使用。
这似乎相当浪费,所有 Google 出现的都是 涉及 STACK_TOP 或防止空指针取消引用的民间传说。后一种情况看起来可以通过使用单个页面来修复,而不是留下 128MB 的间隙。
所以我的问题是 - 对于为什么布局被固定为这些值是否有明确的答案,或者它只是一个任意的选择?
Disassembling an ELF binary on a Ubuntu x86 system I couldn't help but notice that the code(.text) section starts from the virtual address 0x8048000 and all lower memory addresses seem to be unused.
This seems to be rather wasteful and all Google turns up is either folklore involving STACK_TOP or protection against null-pointer dereferences. The latter case looks like it can be fixed by using a single page instead of leaving a 128MB gap.
So my question is this - is there a definitive answer to why the layout has been fixed to these values or is it just an arbitrary choice?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
来自链接器和加载器一书:
From the Linkers and loaders book: