簡體   English   中英

在/ proc / self / maps輸出中分段以堆積

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM