内存段的访问权限

时间:2014-02-26 02:15:45

标签: memory

众所周知,内存布局有以下四个部分

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

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

1 个答案:

答案 0 :(得分: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附近的地址中是堆栈地址。

在程序的数据段之后,哪个堆栈增长不利,堆从地址上升。

然后你可以发现堆的权限和堆栈都是读/写权限。

聚苯乙烯。我不太清楚为什么会有这么多 Anonymous segment ,因为我已经很长时间没有详细介绍linux了。但是在我的x86简单操作系统中,堆在具有对齐和填充的数据段之后启动。

相关问题