在/proc/self/maps中,"---p"权限代表什么意思?

14
我理解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]

1
请在此处查看答案:https://dev59.com/AmQn5IYBdhLWcg3w1qIc - Enyby
3个回答

5
根据man page,它意味着私有(写时复制)。不过如果不能读/写/执行其中任何内容,这种映射的用处就不明确了。
可能它是libc私有的,允许它修改访问权限,而无需担心用户程序会弄乱它。

我认为这是这样的,因为如果一个程序修改了它正在使用的libc副本,那么修改后的libc将在该进程的内存空间中重新映射,以便它在其他进程中继续保持未修改状态。 - Dio

0

这也是我一直想了解的具体细节。它在过去几年中才出现,但我不确定是GNU binutils还是glibc动态链接器(ld-linux.so.2)负责这种变化。

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

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

P.S. 对不起,这不是真正的答案。我知道这只是一些零散的信息,可能有助于找到答案,但对于评论来说太长了。


0

私有映射(MAP_PRIVATE):对映射内容的修改不会被其他进程看到。

对于文件映射,这些修改不会传递到底层文件。但是,映射内容的更改仍然对每个进程私有。

内核通过使用写时复制技术来实现这一点。这意味着每当进程尝试修改页面内容时,内核首先为该进程创建一个新的、单独的页面副本(并调整进程的页面表)。

因此,MAP_PRIVATE映射有时被称为私有写时复制映射。(来源:《Linux编程接口》书籍)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接