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简单操作系统中,堆在数据段之后开始,并进行对齐和填充