Compago

...free knowledge

 
  • Increase font size
  • Default font size
  • Decrease font size
Home Manuali Programmazione Structured Excepition Handling ovvero SEH

Structured Excepition Handling ovvero SEH

E-mail Stampa PDF
Indice Articolo
Structured Excepition Handling ovvero SEH
SEH frames
SEH in una applicazione multithread
Exploit tramite SEH
Eliminare la terminazione della applicazione
Tutte le pagine

In quest'articolo cercheremo di spiegare cosa è l'SEH, come funziona e come è stato usato per creare degli exploit.

Un'eccezione è un evento che si verifica durante l'esecuzione di un programma, e richiede l'esecuzione di codice al di fuori del normale flusso di controllo.

Ci sono due tipi di eccezioni: le eccezioni hardware e quelle software.
Le eccezioni hardware sono create dalla CPU e possono derivare dall'esecuzione di alcune sequenze di istruzioni, come la divisione per zero o un tentativo di accedere a un indirizzo non valido di memoria.
Le eccezioni software invece sono quelle create esplicitamente dalle applicazioni o del sistema operativo. Ad esempio quando l'applicazione è in grado di rilevare un valore non valido per un parametro.

Gestione delle eccezioni strutturata è un meccanismo per la gestione delle eccezioni hardware e software. Pertanto, il codice potrà gestire le eccezioni hardware e software in modo identico. Gestione delle eccezioni strutturata permette di avere il controllo completo sulla gestione delle eccezioni, fornisce il supporto per debugger, ed è utilizzabile in tutti i linguaggi di programmazione.
La gestione delle eccezioni Vectored è una estensione per la gestione delle eccezioni strutturata.

Il sistema supporta anche la gestione della terminazione, che consente di garantire che, qualora venga eseguito una determinata parte di codice, verrà eseguito un blocco di codice di terminazione. Quest'ultimo blocco di terminazione viene eseguito indipendentemente da come il flusso di controllo lascia il codice iniziale. Ad esempio, un gestore di terminazione può garantire la pulizia di alcune variabili venga eseguita indipendentemente dal fatto che nella parte precedente di codice sia stata sollevata una eccezione o meno.

Ora vi chiederete ma dove vengono conservate le informazioni che gestiscono queste eccezioni? Beh nella maggior parte dei casi si trovano nello stack, nelle così dette SEH frames,  e trovandosi lì è possibile sovrascriverle, magari utilizzando un buffer overflow.



Ultimo aggiornamento ( Sabato 19 Giugno 2010 19:23 )  

Articoli correlati