What do the “---p” permissions in /proc/self/maps mean?
我了解rwxps位的含义。 r-xp用于.text。 rw-p用于.data / .bss / heap / stack。
例如,请参见
的此输出
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动态链接器(
起初,我认为这是动态链接程序创建的一种保护区域,以防止对库数据段的无限制访问,但是将其设置得如此之大毫无意义。这可能是while库文件的完整映射,因此动态链接器可以使它在将来的某个时间(也许在
在任何情况下,这都是一件令人讨厌的事情,特别是在32位计算机上,其中虚拟地址空间是宝贵的资源。它还膨胀了内核页表,增加了进程使用的内核空间资源。
P.S。抱歉,这不是真正的答案。我知道只是零散的片段可能有助于得出答案,但是评论太久了。