/ proc / $ pid / maps显示x86_64 linux上没有rwx权限的页面

/proc/$pid/maps显示x86_64 linux上没有rwx权限的页面。 我注意到,当我读取/proc/$pid/maps在64位linux我有内存页面没有权限,但在一个32位的Linux,他们不在那里。

我试图监视我的过程的内存使用情况,但林困惑。 为什么有没有rwx特权的页面。 他们正在消耗我的记忆!

这是一个64位的Linux输出的“顶”

 % cat /proc/21367/maps 3154200000-315420d000 r-xp 00000000 fd:00 4835776 /lib64/libproc-3.2.7.so <br/> 315420d000-315440d000 **---p** 0000d000 fd:00 4835776 /lib64/libproc-3.2.7.so <br/> 315440d000-315440e000 rw-p 0000d000 fd:00 4835776 /lib64/libproc-3.2.7.so 

请指教。

这些映射用于共享库:

一般来说,对于每个共享库加载,我们将有四个映射:

 3b7cc00000-3b7cd86000 r-xp 00000000 fd:00 661350 /lib64/libc-2.12.so 3b7cd86000-3b7cf86000 ---p 00186000 fd:00 661350 /lib64/libc-2.12.so 3b7cf86000-3b7cf8a000 r--p 00186000 fd:00 661350 /lib64/libc-2.12.so 3b7cf8a000-3b7cf8b000 rw-p 0018a000 fd:00 661350 /lib64/libc-2.12.so 

第一个是具有可执行权限的代码段,第二个是PROT_NONE(无权限)映射,最后两个是数据段(只读部分和读写)。

PROT_NONE映射是为了保持库可高效共享而创建的,并标记防护页,以便可以捕获缓冲区溢出。

请记住,这些映射仅使用虚拟地址空间的一部分,但实际上并不占用系统内存。

在这里你可以找到一个完整的解释:

http://www.greenend.org.uk/rjk/tech/dataseg.html