Perché lo stack address è uguale per tutto il tempo in cui non si usa ASLR? [chiuso]

0

In una risposta a Come funzionano ASLR e DEP? Polinomiale dice:

In a non-ASLR and non-DEP process, the stack address is the same every time we run the process. We know exactly where it is in memory.

Non capisco come potrebbe essere. La RAM non è allocata dinamicamente in fase di esecuzione? Che dire quando il programma (X) si chiude e arriva un altro processo (Y)? Potrebbe il sistema operativo non fornire (Y) quella RAM nella stessa posizione?

    
posta james6125 13.05.2017 - 06:47
fonte

1 risposta

1

Gli indirizzi che stai vedendo attraverso il tuo strumento di debug sono indirizzi di memoria logica. Ogni volta che viene generato un programma, la CPU assegna determinati byte di memoria al programma. Sull'hardware, questo può essere allocato in un singolo blocco o potrebbe essere disseminato in parti in tutto il luogo. Tuttavia, per semplificare il fatto che il programma faccia riferimento a posizioni di memoria, la CPU mappa questi indirizzi hardware o di memoria fisica all'indirizzo logico.

Un programma che interagisce all'interno di questo spazio indirizzo non vede altri programmi. Solo la CPU sa quale indirizzo fisico recuperare quando il programma fa riferimento ad un indirizzo di memoria logico all'interno del codice.

Quindi, due programmi diversi possono fare riferimento alla stessa posizione di memoria logica, ad esempio 0x7c900000. Ma la CPU sa dove indirizzare questa istruzione sulla RAM fisica. Ciò rende la vita più semplice per il programmatore quando la gestione della memoria è gestita dalla CPU.

Informazioni su ASLR (randomizzazione del layout spazio degli indirizzi):

L'ASLR è stato introdotto perché era abbastanza facile raggiungere il punto esatto in memoria durante l'esecuzione del programma per trovare le variabili vulnerabili del buffer overflow. Questo ha reso facile la scrittura. ASLR ha randomizzato il posizionamento di variabili rendendo difficile per gli hacker sfruttare le vulnerabilità del buffer overflow.

Quindi, senza ASLR, le variabili nel programma e le istruzioni verranno caricate nello stesso identico (logico) percorso ogni volta che viene eseguito.

    
risposta data 13.05.2017 - 08:25
fonte

Leggi altre domande sui tag