【发布时间】:2011-01-12 08:22:56
【问题描述】:
执行时,程序将从虚拟地址 0x80482c0 开始运行。这个地址并不指向我们的main() 过程,而是指向一个由链接器创建的名为_start 的过程。
到目前为止,我的 Google 研究只是让我得出一些(模糊的)历史推测,如下所示:
民间传说 0x08048000 曾经是 STACK_TOP(即堆栈从 0x08048000 附近向下增长到 0)在 *NIX 到 i386 的端口上,这是由加利福尼亚州圣克鲁斯的一个团体颁布的。当时 128MB 的 RAM 很昂贵,而 4GB 的 RAM 是不可想象的。
任何人都可以确认/否认这一点吗?
【问题讨论】:
-
如果
0x08048000曾经是STACK_TOP,那是非常很久以前了。后者是TASK_SIZE一直到2.0.40。 -
x86-64 Linux 确实选择了低地址 (Why is address 0x400000 chosen as a start of text segment in x86_64 ABI?):避免 wiki.debian.org/mmap_min_addr,并选择靠近低 1GiB 开头的 2MiB 页面组的开头。 Why is address 0x400000 chosen as a start of text segment in x86_64 ABI? 还解释了 i386 选择 0x080xxxxx 的一些动机。
标签: point elf virtual-address-space