Stack overflow: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Alez (discussione | contributi)
m +stile
Riga 1:
{{S|informatica}}
Uno '''stack overflow''' consiste (solitamente) nella sovrascrittura della locazione di memoria interna allo [[stack]] contenente l''''indirizzo di ritorno''' oppure la copia del precedente '''frame pointer''' (vedi ''[[call stack]]''). In modo tale, è possibile forzare il sistema a redirigere il flusso di esecuzione - nel momento del ritorno alla funzione chiamante - ad una locazione di memoria dove ha inizio del codice arbitrario.
 
I moderni [[sistema operativo|sistemi operativi]] e compilatori sono dotati di vari meccanismi di protezione e randomizzazione dello stack, e di riorganizzazione fisica delle variabili sensibili (per evitare la sovrascrittura di puntatori).
 
=== Esempio di programma vulnerabile in Linux/x86 (senza protezioni) ===
Riga 28:
Inoltre, nell'esempio di cui sopra:
* in <code>0xbffff7c8</code> abbiamo il valore <code>0xbffff7c8</code>, corrispondente all'istruzione assembly <code>enter 0xfff7,0xbf</code>, ripetuta fino all'indirizzo <code>0xbffff7dc</code>
* in <code>0xbffff7e0</code> (la locazione della prima istruzione successiva a quella in <code>0xbffff7dc</code>) incontriamo casualmente un riferimento ad un indirizzo non valido, con conseguente [[Segmentationsegmentation fault]].
 
 
{{Portale|Sicurezza informatica}}