2014-02-26 151 views
0

大家都知道,内存布局有四个细分如下访问权限

Heap 
Data Segment  Read/Write permission 
code segment  Read/Execute permission 
Stack 

我想知道堆和堆栈段的访问权限。

回答

1

我写了简单的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简单操作系统中,堆在数据段之后使用对齐和填充开始。