0
大家都知道,內存佈局有四個細分如下訪問權限
Heap
Data Segment Read/Write permission
code segment Read/Execute permission
Stack
我想知道堆和堆棧段的訪問權限。
大家都知道,內存佈局有四個細分如下訪問權限
Heap
Data Segment Read/Write permission
code segment Read/Execute permission
Stack
我想知道堆和堆棧段的訪問權限。
我寫了簡單的x86操作系統來加載精靈圖像。 這四個片段的大致佈局是:
Code segment
Data segment
Heap
Stack
您可以通過在Linux得到的佈局:
sudo pmap <pid>
0000000000400000 384K r-x-- /usr/local/bin/tmux
0000000000660000 8K rw--- /usr/local/bin/tmux
0000000000662000 108K rw--- [ anon ]
0000000001242000 132K rw--- [ anon ]
0000000001263000 2868K rw--- [ anon ]
00000037ba400000 128K r-x-- /lib64/ld-2.12.so
...
00007fff4f411000 84K rw--- [ stack ]
00007fff4f55c000 4K r-x-- [ anon ]
ffffffffff600000 4K r-x-- [ anon ]
第一段是可執行映像。其次是隻讀數據。然後去堆。由malloc分配的Linux中的堆被稱爲匿名段。在00008000附近的地址00000000是堆棧地址。
哪個堆棧向下發展,堆棧從程序數據段之後的地址向上發展。
然後你可以發現堆的權限和堆棧都是讀/寫權限。
Ps。我不太清楚爲什麼有這麼多的匿名段,因爲我很長一段時間沒有去linux的細節。但在我的x86簡單操作系統中,堆在數據段之後使用對齊和填充開始。