【问题标题】:What do the "---p" permissions in /proc/self/maps mean?/proc/self/maps 中的“---p”权限是什么意思?
【发布时间】:2011-04-21 13:32:03
【问题描述】:

我理解 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 [堆] 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 [堆栈] 7fff649ff000-7fff64a00000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 我认为是这样的,因为如果一个程序在哪里修改它正在使用的 libc 副本,那么修改后的 libc 将被重新映射到该进程的内存空间中,因此它将继续保持不变其他进程。
【解决方案2】:

这也是我想知道的细节。它直到最近几年的某个时候才出现,但我不确定是 GNU binutils 还是 glibc 动态链接器 (ld-linux.so.2) 对这种变化负责。

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

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

附:抱歉,这不是一个真正的答案。我知道这只是可能有助于找到答案的随机点点滴滴,但评论太长了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 2011-01-24
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    相关资源
    最近更新 更多