2010-10-05 11 views
7

Capisco il significato dei bit rwxps. r-xp è per .text. rw-p è per .data/.bss/heap/stack. Qual è l'uso di solo ---p pagine?Cosa significano le autorizzazioni "--- p" in/proc/self/maps?

Per esempio si veda questa uscita di 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

Vedere la risposta qui: http://stackoverflow.com/questions/16524895/proc-pid-maps-shows-pages-with-no-rwx-permissions-on-x86-64-linux – Enyby

risposta

1

Secondo il man page, significa privata (copia su scrittura). Non ho idea di quale sia l'utilità di una tale mappatura senza poter leggere/scrivere/eseguire nulla in essa.

Forse è privato a libc, permettendo così di modificare i permessi per accedervi senza un programma utente pasticciare accidentalmente in su.

+0

Penso che sia così perché se un programma in cui modificare la copia di libc che stava usando, allora la libc modificata verrebbe re-mappata nello spazio di memoria di quel processo, in modo che continuasse a non essere modificata per altri processi. – Dio

0

Questa è una cosa che ho chiesto circa le specifiche di troppo. Non sembrava fino a qualche tempo negli ultimi anni, ma sono incerto se binutils GNU o il linker dinamico glibc (ld-linux.so.2) è responsabile per il cambiamento.

All'inizio pensavo che fosse una sorta di regione di guardia creata dal linker dinamico per proteggere dall'accesso di fuori campo al segmento di dati di una biblioteca, ma non ha senso che sia così grande. E 'possibile che si tratta di una mappa completa del file della libreria, mentre in modo che il linker dinamico può rendere di nuovo leggibili a un certo momento nel futuro (magari durante dlopen o dlsym chiamate) per accedere ai metadati ELF che normalmente non ha bisogno di essere mappati.

In ogni caso, è brutto gonfiare, specialmente su macchine a 32 bit in cui lo spazio di indirizzamento virtuale è una risorsa preziosa. Inoltre alleggerisce le tabelle delle pagine del kernel, aumentando le risorse di kernelspace utilizzate da un processo.

P.S. Spiacente, questa non è davvero una risposta. So che sono solo frammenti casuali che potrebbero aiutare a portare a una risposta, ma era troppo lungo per un commento.