【发布时间】:2013-10-15 11:12:01
【问题描述】:
我可以识别 /proc/$PID/maps 文件中的文本、ds 和 bss 段(通过猜测或借助特定段的访问说明符)。但是堆和堆栈段是依次给出的。有没有办法识别哪个段属于栈,哪个属于堆?
-----本例中如何识别堆和栈的分界 ----------
0a8a0000-0ab2e000 rw-p 0a8a0000 00:00 0 [堆]
【问题讨论】:
-
堆栈段是唯一标记为
[stack]。几乎按照定义,每个其他可写段都是堆。否则,请给我们您对 heap 的准确定义 -
“Segment”是 20 年前相关的术语。任何现代系统都比文献给出的简单的“代码/数据/堆/堆栈段”描述复杂得多。在线程应用程序中,您将拥有与线程一样多的堆栈,堆不必是连续的,您将拥有大量与代码、只读数据和辅助数据以及来自共享库的 PLT 和 GOT 混合的数据,内存映射文件、内核维护的特殊代码映射、保护页等