/proc/$pid/maps 在 x86_64 linux 上显示没有 rwx 权限的页面
Posted
技术标签:
【中文标题】/proc/$pid/maps 在 x86_64 linux 上显示没有 rwx 权限的页面【英文标题】:/proc/$pid/maps shows pages with no rwx permissions on x86_64 linux 【发布时间】:2013-05-07 15:42:52 【问题描述】:/proc/$pid/maps
显示在x86_64
Linux 上没有rwx
权限的页面。
我注意到,当我在 64 位 Linux 上阅读 /proc/$pid/maps
时,我有没有权限的内存页面,但在 32 位 Linux 中,它们不存在。
我正在尝试监控我的进程的内存使用情况,但我很困惑。为什么有些页面没有rwx
权限。他们正在消耗我的记忆!
这是一个 64 位 Linux 的“top”输出的 sn-p
% 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
请指教。
【问题讨论】:
【参考方案1】:这些映射用于共享库:
通常对于每个加载的共享库,我们将有四个映射:
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
【讨论】:
以上是关于/proc/$pid/maps 在 x86_64 linux 上显示没有 rwx 权限的页面的主要内容,如果未能解决你的问题,请参考以下文章
了解 Linux /proc/pid/maps 或 /proc/self/maps