Memory 内存段的访问权限

Memory 内存段的访问权限,memory,Memory,众所周知,内存布局有四个部分,如下所示 Heap Data Segment Read/Write permission code segment Read/Execute permission Stack 我想知道堆和堆栈段的访问权限。我已经编写了简单的x86操作系统来加载elf映像。 其中四段的大致布局如下: Code segment Data segment Heap Stack 您可以通过以下方式在linux中获得布局: sudo pmap <pid>

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

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

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

我已经编写了简单的x86操作系统来加载elf映像。 其中四段的大致布局如下:

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 ]
sudo-pmap
0000000000 400000 384K r-x--/usr/local/bin/tmux
0000000000 660000 8K rw---/usr/local/bin/tmux
0000000000 662000 108K rw---[anon]
000000000 1242000 132K rw---[anon]
000000000 1263000 2868K rw---[anon]
00000037ba400000 128K r-x--/lib64/ld-2.12.so
...
00007FFF4110084K rw---[堆栈]
00007FFF45C000 4K r-x--[anon]
ffffffffff600000 4K r-x--[anon]
第一段用于可执行图像。其次是只读数据。然后是堆。linux中由malloc分配的堆称为匿名段。在接近0000800000000的地址中是堆栈地址

其中堆栈向下增长,堆从程序数据段后的地址向上增长

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

另外,我不太清楚为什么会有这么多的匿名段,因为我已经很久没有详细介绍linux了。但在我的x86简单操作系统中,堆在数据段之后开始,并进行对齐和填充