x86_64 Linux进程的用户空间虚拟内存布局是什么?

时间:2015-09-18 06:24:04

标签: linux linux-kernel

我想知道Linux内核如何在x86_64上的0x7fffffffffff下面映射用户空间部分(如堆栈,堆和全局变量)。

内核是否更喜欢每个部分的固定起始地址?或者它在某种程度上取决于链接器的决定?每个部分的大小是多少?

1 个答案:

答案 0 :(得分:2)

Linux(以及大多数其他现代操作系统)正在做一些名为Address space layout randomization的事情。这允许操作系统将堆栈,堆和库移动到任意位置,以防止某些类型的攻击。<​​/ p>

需要链接器支持的唯一部分是文本部分 - 您需要构建enter link description here以便随机化本节的开头。

关于部分的大小,文本部分显然取决于二进制大小,以及特定程序的已初始化和未初始化数据部分。最大堆栈大小由内核控制,堆大小由程序中断确定(有关图形描述,请参阅enter link description here),可以通过调用brk (2)来更改堆栈大小。