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.