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

x86_64 Linux进程的用户空间虚拟内存布局是什么?,linux,linux-kernel,Linux,Linux Kernel,我想知道在x86_64上,Linux内核如何将用户空间部分(如堆栈、堆和全局变量)映射到0x7fffffffff下面 内核是否希望每个部分都有一个固定的起始地址?还是在某种程度上取决于链接器的决定?每个部分的大小是多少?Linux(以及大多数其他现代操作系统)正在做一件被称为的事情。这允许操作系统将堆栈、堆和库移动到任意位置,以防止某些类型的攻击 唯一需要链接器支持的部分是文本部分-您需要构建以随机化此部分的开头 关于节的大小,文本节显然取决于二进制大小,初始化和未初始化数据节取决于特定程序。最

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

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

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

唯一需要链接器支持的部分是文本部分-您需要构建以随机化此部分的开头


关于节的大小,文本节显然取决于二进制大小,初始化和未初始化数据节取决于特定程序。最大堆栈大小由内核控制,堆大小由程序中断决定(有关图形说明,请参阅),可以通过调用
brk(2)

来更改堆大小。谢谢。禁用ASLR后,我发现堆/堆栈被分配到固定地址。