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)
.
来改变。
我想知道 Linux 内核如何映射 x86_64.
上 0x7fffffffffff 以下的用户空间部分(如堆栈、堆和全局变量)内核是否更喜欢每个部分的固定起始地址?或者它在某种程度上取决于链接器的决定?每个部分的大小是多少?
Linux(以及大多数其他现代操作系统)正在做一些叫做 Address space layout randomization 的事情。这允许操作系统将堆栈、堆和库移动到任意位置以防止某些 类 攻击。
唯一需要链接器支持的部分是文本部分 - 您需要构建 enter link description here 以便随机化该部分的开头。
关于section的大小,text section显然取决于二进制大小,而初始化和未初始化的data section则取决于具体的程序。最大堆栈大小由内核控制,堆大小由程序中断决定(图形说明见enter link description here),可以通过调用brk (2)
.