Что означают разрешения "--- p" в / proc / self / maps? - PullRequest
8 голосов
/ 06 октября 2010

Я понимаю значение битов 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
<strong>3819f70000-381a16f000 ---p 00170000 08:03 532490                         /lib64/libc-2.11.2.so</strong>
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 ]

1 голос
/ 06 октября 2010

Согласно справочной странице , это означает частную (копия при записи).Не знаю, в чем польза такого отображения, если у него нет возможности читать / писать / выполнять что-либо в нем.

Возможно, он является приватным для libc, что позволяет ему изменять разрешения для доступа к нему без случайной ошибки его пользовательской программы.

0 голосов
/ 14 июня 2011

Это то, что я тоже задавался вопросом о специфике.Оно появилось лишь в последние несколько лет, но я не уверен, что за изменение ответственны GNU binutils или динамический компоновщик glibc (ld-linux.so.2).

Сначала я подумал, что этосвоего рода защитная область, созданная динамическим компоновщиком для защиты от неограниченного доступа к сегменту данных библиотеки, но нет смысла быть таким большим.Вполне возможно, что это полная карта файла while, так что динамический компоновщик может сделать его снова читаемым в будущем (возможно, при вызовах dlopen или dlsym) для доступа к метаданным ELF, которые обычно не нужныбыть сопоставленным.

В любом случае, это мерзость, особенно на 32-битных машинах, где виртуальное адресное пространство является ценным ресурсом.Это также увеличивает объем страниц страниц ядра, увеличивая ресурсы пространства ядра, используемые процессом.

PS Извините, это не совсем ответ.Я знаю, что это просто случайные фрагменты, которые могут помочь привести к ответу, но это было слишком долго для комментария.

...