linux - ¿Qué significan los permisos "--- p" en/proc/self/maps?
memory permissions (2)
De acuerdo con la página del manual , significa privado (copiar al escribir). Sin embargo, no hay idea de la utilidad de tal mapeo sin poder leer / escribir / ejecutar nada en él.
Posiblemente sea privado a libc, permitiéndole modificar los permisos para acceder a él sin que un programa de usuario lo vacíe accidentalmente.
Entiendo el significado de los bits rwxps. r-xp es para .text. rw-p es para .data / .bss / heap / stack. ¿Para qué sirven las páginas ---p
?
Por ejemplo, vea esta salida de 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]
Esto es algo que me he preguntado sobre los detalles de también. No apareció hasta algún momento en los últimos años, pero no estoy seguro de si GNU binutils o el enlazador dinámico glibc ( ld-linux.so.2
) es responsable del cambio.
Al principio pensé que era una especie de región de guardia creada por el vinculador dinámico para proteger contra el acceso fuera de límites al segmento de datos de una biblioteca, pero no tiene sentido que sea tan grande. Es posible que sea un mapa completo del archivo de biblioteca while para que el enlazador dinámico pueda hacerlo legible de nuevo en algún momento en el futuro (quizás durante llamadas dlopen
o dlsym
) para acceder a los metadatos ELF que normalmente no necesitan ser mapeados.
En cualquier caso, es desagradable, especialmente en máquinas de 32 bits donde el espacio de direcciones virtuales es un recurso precioso. También hincha las tablas de la página del kernel, lo que aumenta los recursos del kernel utilizados por un proceso.
PD: Lo siento, esta no es realmente una respuesta. Sé que solo son fragmentos al azar que podrían ayudar a dar una respuesta, pero fue demasiado tiempo para hacer un comentario.