/ proc / self / maps中的“--- p”权限是什么意思?

时间:2010-10-05 22:40:06

标签: linux memory permissions shared-libraries memory-mapping

我理解rwxps位的含义。 r-xp用于.text。 rw -p用于.data / .bss / heap / stack。只有---p个页面的用途是什么?

例如,请参阅cat /proc/self/maps

的输出
00400000-0040b000 r-xp 00000000 08:03 827490                             /bin/cat
0060b000-0060c000 rw-p 0000b000 08:03 827490                             /bin/cat
0060c000-0062d000 rw-p 00000000 00:00 0                                  [heap]
3819a00000-3819a1e000 r-xp 00000000 08:03 532487                         /lib64  ld-2.11.2.so
3819c1d000-3819c1e000 r--p 0001d000 08:03 532487                         /lib64/ld-2.11.2.so
3819c1e000-3819c1f000 rw-p 0001e000 08:03 532487                         /lib64/ld-2.11.2.so
3819c1f000-3819c20000 rw-p 00000000 00:00 0 
3819e00000-3819f70000 r-xp 00000000 08:03 532490                         /lib64/libc-2.11.2.so
3819f70000-381a16f000 ---p 00170000 08:03 532490                         /lib64/libc-2.11.2.so
381a16f000-381a173000 r--p 0016f000 08:03 532490                         /lib64/libc-2.11.2.so
381a173000-381a174000 rw-p 00173000 08:03 532490                         /lib64/libc-2.11.2.so
381a174000-381a179000 rw-p 00000000 00:00 0 
7fb859c49000-7fb85fa7a000 r--p 00000000 08:03 192261                     /usr/lib/locale/locale-archive
7fb85fa7a000-7fb85fa7d000 rw-p 00000000 00:00 0 
7fb85fa95000-7fb85fa96000 rw-p 00000000 00:00 0
7fff64894000-7fff648a9000 rw-p 00000000 00:00 0                          [stack]
7fff649ff000-7fff64a00000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

2 个答案:

答案 0 :(得分:1)

根据man page,它表示私有(写入时复制)。不过,不知道这种映射的用处是什么,而不能读取/写入/执行其中的任何内容。

可能它是私有的libc,允许它修改权限以访问它,而无需用户程序意外地将其删除。

答案 1 :(得分:0)

这也是我对这些细节的疑惑。直到最近几年的某个时间才出现,但我不确定GNU binutils或glibc动态链接器(ld-linux.so.2)是否负责更改。

起初我认为它是由动态链接器创建的一种保护区域,以防止对库的数据段的越界访问,但它没有任何意义,因为它如此之大。它可能是while库文件的完整映射,因此动态链接器可以在将来的某个时间(可能在dlopendlsym调用期间)再次读取它,以访问不存在的ELF元数据通常需要映射。

无论如何,它都是令人讨厌的膨胀,特别是在虚拟地址空间是宝贵资源的32位机器上。它还使内核页表膨胀,增加了进程使用的内核空间资源。

P.S。对不起,这不是一个真正的答案。我知道这只是随机的点点滴滴,可能有助于找到答案,但是评论的时间太长了。