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



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

内核是否希望每个section都有固定的起始地址?还是在某种程度上取决于链接者的决定?每个部分的大小是多少?

Linux(和大多数其他现代操作系统)正在做一些称为地址空间布局随机化的事情。这允许操作系统将堆栈、堆和库移动到任意位置,以防止某些类型的攻击。

唯一需要链接器支持的部分是文本部分-您需要在这里构建输入链接描述,以便随机化该部分的开始。

关于节的大小,文本节显然取决于二进制的大小,而初始化和未初始化的数据节则取决于具体的程序。最大堆栈大小由内核控制,堆大小由程序断点决定(参见这里的输入链接描述获取图形描述),可以通过调用brk (2)来更改。

最新更新