我可以在/ proc/$ PID/maps文件中(通過猜測或藉助特定段的訪問說明符)識別文本,ds和bss段。但堆和堆棧段是順序的。有沒有辦法確定哪個段屬於堆棧,哪些屬於堆?
-----如何確定堆間的分界並且在該示例堆疊---------- 0a8a0000-0ab2e000 RW-P 0a8a0000 00:00 0 [堆]
< b648e000 -b648f000 --- p b648e000 00:00 0
< b648f000-b6496000 RW-p b648f000 00:00 0
< b6496000-b6497000 --- p b6496000 00:00 0
< b6497000-b649e000 RW-p b6497000 00:00 0
< b649e000-b649f000 --- p b649e000 00:00 0
< b649f000-b64a6000 RW-P b649f000 00:00 0
< b64a6000-b64a7000 --- p b64a6000 00:00 0
< b64a7000-b64ae000 RW-P b64a7000 00:00 0
< b64ae000-b64af000 --- p b64ae000 00: 00 0
< b64af000-b657a000 RW-p b64af000 00:00 0
< b657a000-b657b000 --- p b657a000 00:00 0
< b657b000-b65a5000 RW-p b657b000 00:00 0
< b65a5000- b65a6000 --- p b65a5000 00:00 0
< b65a6000-b67ca000 rw-p b65a6000 00:00 0
< b67ca000-b67cb000 --- p b67ca000 00:00 0
< b67cb000-b69ff000 RW-P b67cb000 00:00 0
< b69ff000-b6a00000 --- p b69ff000 00:00 0
< b6a00000-b6bff000 RW-p b6a00000 00:00 0
< b6bff000-b6c00000 --- p b6bff000 00:00 0
< b6c00000-b6dff000 RW-p b6c00000 00:00 0
< b6dff000-b6e00000 --- p b6dff000 00: 00 0
< b6e00000-b6fff000 rw-p b6e00000 00:00 0
< b6fff000-b7000000 --- p b6fff000 00:00 0
< b7000000-b70fd000 RW-P b7000000 00:00 0
< b70fd000-b70fe000 --- p b70fd000 00:00 0
< b70fe000-b72fd000 RW -p b70fe000 00:00 0
< b72fd000-b72fe000 --- p b72fd000 00:00 0
< b72fe000-b7548000 RW-p b72fe000 00:00 0
< b7548000-b7549000 --- p b7548000 00:00 0
< b7549000-b7f37000 rw-p b7549000 00:00 0
< b7f4b000-b7f4c000 --- p b7f4b000 00:00 0
< b7f4c000-b7f51000 RW-P b7f4c000 00:00 0
< bfbae000-bfbc3000 RW-P bffea000 00:00 0 [堆]
堆棧段是唯一標記的[[stack]]。每個其他可寫段都是堆,幾乎是按照定義。否則,請給我們您*堆的確切定義* –
「段」是20年前相關的術語。任何現代系統都比文獻給出的簡單的「代碼/數據/堆/棧段」描述複雜得多。在線程應用程序中,您將擁有與線程一樣多的堆棧,堆不必是連續的,您將擁有大量數據與代碼和只讀數據以及共享庫中的輔助數據和PLT和GOT混合在一起,內存映射文件,由內核維護的特殊代碼映射,守衛頁面等。 – Art
[Understanding Linux /proc/id/maps](http://stackoverflow.com/questions/1401359/understanding-linux-proc- id-maps) – gavv