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

What is the user space virtual memory layout for x86_64 Linux process?

我想知道 Linux 内核如何映射 x86_64.

上 0x7fffffffffff 以下的用户空间部分(如堆栈、堆和全局变量)

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

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

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

关于section的大小,text section显然取决于二进制大小,而初始化和未初始化的data section则取决于具体的程序。最大堆栈大小由内核控制,堆大小由程序中断决定(图形说明见enter link description here),可以通过调用brk (2).

来改变。