关于linux:/ proc / self / maps中的” — p”权限是什么意思?

What do the “---p” permissions in /proc/self/maps mean?

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

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

的此输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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]


根据手册页,它表示私有(写时复制)。但是,如果不能够读取/写入/执行其中的任何内容,则不知道这种映射的用途是什么。

可能它是libc的私有文件,允许它修改访问它的权限,而不会被用户程序意外地弄坏它。


这也是我也想知道的细节。它直到最近几年才出现,但是我不确定是由GNU binutils还是glibc动态链接器(ld-linux.so.2)来负责更改。

起初,我认为这是动态链接程序创建的一种保护区域,以防止对库数据段的无限制访问,但是将其设置得如此之大毫无意义。这可能是while库文件的完整映射,因此动态链接器可以使它在将来的某个时间(也许在dlopendlsym调用期间)再次可读,以访问通常不需要的ELF元数据要映射。

在任何情况下,这都是一件令人讨厌的事情,特别是在32位计算机上,其中虚拟地址空间是宝贵的资源。它还膨胀了内核页表,增加了进程使用的内核空间资源。

P.S。抱歉,这不是真正的答案。我知道只是零散的片段可能有助于得出答案,但是评论太久了。