【发布时间】:2022-01-14 23:18:07
【问题描述】:
Linux内核是否分配了一个大范围,并让堆和堆栈在这个范围的开始/结束地址处反向增长,这样如果你知道其中一个的地址你就知道另一个,或者是两个区域独立?
【问题讨论】:
Linux内核是否分配了一个大范围,并让堆和堆栈在这个范围的开始/结束地址处反向增长,这样如果你知道其中一个的地址你就知道另一个,或者是两个区域独立?
【问题讨论】:
不,出于安全原因,它不会。 如果它们以任何方式相关,这将是一个严重的安全漏洞。
另一方面,libc 负责使用 mmap() 分配这两个区域,而不是内核……或者至少不直接分配。每个区域都有自己的 mmap() 调用(包括库),内核为每次调用提供部分随机地址。
您可以在/proc/$pid/maps 中看到为特定程序分配的不同区域,$pid 作为进程 ID。
【讨论】: