2010-01-12 9 views
5

Sto osservando il modello di memoria Linux IA-32 di un processo e ho una semplice domanda. Cosa contengono le aree grigie nell'immagine? Sono inclusi solo per mostrare l'inizio e la fine della memoria? Quindi, il testo inizia da 0x0 e lo stack inizia da 0xFFFFFFFF?Modello di memoria IA-32 Linux

Riaperto: Salve, in un corso del sistema operativo che sto frequentando questa domanda diventa di nuovo rilevante. Nello specifico, ho bisogno di sapere cosa contengono le aree grigie. Sulla base delle risposte finora, posso vedere che contiene il codice del kernel nella parte superiore e una pagina di dereferenziamento del puntatore nullo in basso. Ma qual è il codice del kernel? Non presumo che sia l'intero sistema operativo stesso, ma potrebbe essere schedulatore incorporato, chiamate alla libreria del kernel o?

Con i migliori saluti, Lasse Espeholt

alt text http://img403.imageshack.us/img403/3156/capturecj.png

risposta

9

Penso che questo sia più preciso: alt text

+0

Ahh sembra avere un senso;) Ma secondo quel grafico solo i ram con ~ 1 GB con cui lavorare. (0xC0000000 - 0x80480000) ma potrebbe aumentare nella memoria virtuale del kernel? –

+1

È 0x08048000, non 0x80480000. Quindi è un po 'meno di 3 GB. – wj32

+0

Ah male, grazie :) –

5

penso che le zone grigie rappresentano semplicemente regioni di dimensioni non definita. Il testo del programma certamente non inizierebbe da 0x0, perché la maggior parte dei sistemi operativi li usa come pagine non valide, quindi è possibile catturare facilmente le dereferenze nulle. Anche gli stack di thread non andrebbero fino a 0xffffffff perché di solito il quarto superiore (o metà) ha la memoria del kernel mappata al suo interno.

+0

il riferimento null ha molto senso;) grazie. –

2

notare che l'area zero pagina nella parte inferiore dello spazio di indirizzi non è in realtà vietato l'uso di domanda ai sensi distribuzioni linux comuni. Il kernel usava fare questo, poi finiva col coltivare quella decisione sul modulo LSM (ad esempio SELinux, AppArmor). E non hanno applicato la stessa regola, quindi è risultato possibile che i processi mappassero la memoria a 0x0. Questo faceva parte della vulnerabilità dietro i recenti exploit "kernel pointer pointer dereference".

+0

'/ proc/sys/vm/mmap_min_addr' è impostato su zero diverso dal kernel vanilla, quindi questo è importante solo se si dispone di una distribuzione che lo modifica o utilizza LSM. Non so quanto sia comune; Debian no, Ubuntu no (a meno che Wine non sia installato), Gentoo no, ... e sono tutte le distribuzioni che uso. – ephemient

+0

Fedora e Red Hat spediscono SELinux abilitato di default. Novell/SuSE distribuisce AppArmor, così come Ubuntu nelle versioni recenti. L'LSM è più la regola che l'eccezione nel mondo moderno e, come accade, ciò ha comportato una regressione nella protezione della pagina nulla. –

3

Nessuno sembra aver menzionato che non tutta la memoria nello spazio disponibile è necessariamente mappata (e non lo è quasi mai).

Problemi correlati