![](/img/trans.png)
[英]How to identify STACK and HEAP segments in /proc/$PID/maps file?
[英]Segments up to heap in /proc/self/maps output
我的程序在執行的某個時刻逐行讀取自己的/ proc / self / maps,直到(包括)堆為止。 該程序的路徑是“ / home / t4”。 這是輸出:
00400000-00403000 r-xp 00000000 68:06 21629911 /home/t4
00602000-00603000 r--p 00002000 68:06 21629911 /home/t4
00603000-00604000 rw-p 00003000 68:06 21629911 /home/t4
00604000-00608000 rw-p 00000000 00:00 0
01905000-01926000 rw-p 00000000 00:00 0 [heap]
我只期望四個部分:代碼,常量,靜態變量,堆; 但是這里有五個 顯然第一個必須是代碼,最后一個是堆。 也許第二個是常數-但是另外兩個是什么? 謝謝!
初始化的靜態變量后跟未初始化的靜態變量(.BSS)-不需要存儲在二進制文件中。
第一個是可執行部分本身(由於x位),第二個可能是.rodata
(缺少w位),第三個是其他所有內容( .bss
和.data
)。 第四個是使用MAP_ANONYMOUS
mmap
調用的結果。 注意,使用mmap
(2)而不是sbrk
(2)可以很好地實現malloc
(3)。 [heap]
對象是經典的sbrk-heap(僅此),並且不覆蓋使用mmap獲得的私有可寫區域。 傳統堆棧將被列為[stack]
,但是子線程堆棧可以使用任何內存區域來存儲其堆棧,通常是通過malloc分配的,因此您也不會看到多個[stack]
。
混亂完成了嗎? :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.