2016-05-19 34 views
2

我正在使用32位x86 Ubuntu桌面。我查看了/ proc/[pid]/mmaps,發現堆棧基址總是變化(例如,在以下情況下爲0xbfe76000)。所以我猜測內核(或ELF加載器)必須在每次進程開始時隨機化堆棧位置。Linux ASLR如何將堆棧位置隨機化

我想知道什麼/哪裏是確切的代碼(在內核或ELF加載器)的堆棧基地址隨機化。原因我想分配(例如,通過mmap)0xC0000000之下幾頁,我只是不確定是否有任何可能的堆棧可能位於,比方說,0xbffff000。謝謝!

... ... 
b7762000-b7763000 rw-p 00020000 fc:00 1188263 /lib/i386-linux-gnu/ld-2.19.so 
bfe55000-bfe76000 rw-p 00000000 00:00 0   [stack] 

回答

0

不是一個直接的答案(而ASLR機器在不同的內核版本中略有進化)。最近的4.6內核有幾個出現aslr的字符串。

但是關於你的問題,你可以簡單地通過/proc/self/maps查詢內核來找到堆棧段,然後使用MAP_FIXED標誌到mmap來映射這些段以外的東西。

+0

謝謝,但這並不能完全解決我的問題。原因我想分配所有用戶空間內存區域的內存。所以最好的方法是弄清楚堆棧頁面是如何分配的(我猜ASLR爲堆棧基地址保留一個範圍,希望這個範圍不包括最頂層的用戶空間地址) – xiaogw