2015-07-20 27 views
1

我試圖廣發行功能,與它的調用堆棧,調用一個落入地址a4734000-a4e93000,所以我檢查在/ proc //地圖文件,發現有:如何在proc地圖中找不到映射文件?

a4734000-a4e93000 r-xp 00000000 00:00 0 
a4ee0000-a527c000 r-xp 00000000 00:00 0 

這不對我來說是有意義的,因爲通常它會顯示映射爲可執行地址的目標二進制文件。有誰知道這是某種詭計?非常感謝。

回答

1

權限字段r-xp包含p,所以這些映射是私有的。路徑字段爲空,因此這些映射是匿名的。

因此,這些是私人匿名映射,使用MAP_ANONMAP_PRIVATE標誌創建。他們可能被malloc(3)創建:

當分配的內存比MMAP_THRESHOLD字節的塊,glibc的malloc()函數的實現使用mmap分配內存作爲私人匿名映射(2)。

又見this問題documentation

+0

感謝@ g-v,很好的回答。 但我仍然不明白爲什麼malloc創建的內存將有權限「X」? –

+1

請參閱http://pubs.opengroup.org/onlinepubs/009695399/functions/mmap.html和http://man7.org/linux/man-pages/man2/mprotect.2.html。 POSIX:「一個實現可能允許訪問除prot指定的訪問以外」。 Linux:「PROT_EXEC是否具有與PROT_READ不同的作用取決於處理器體系結構,內核版本和進程狀態」。換句話說,它是硬件的限制(它可能不支持單獨的頁面的PROT_EXEC標誌)或軟件。 – gavv

相關問題