Ominide 8018 punti

Gestione dello stack


Quando avviene una chiamata a funzione accade:
- il caller posiziona gli argomenti da passare alla funzione chiamata calee sullo stack o in determinati registri della CPU
- il caller salva l’indirizzo di ritorno sullo stack
- il caller passa il controllo al callee
- il callee salva le variabili locali sullo stack
- il callee salva il contenuto di alcuni registri nello stack, da ripristinare al termine della chiamata
- il callee esegue le istruzioni
Al termine dell’esecuzione:
- il callee posiziona il valore di ritorno nei registri del processore o altri spazi di memoria
- il callee ripristina lo stato dei registri salvati sullo stack
- gli argomenti vengono rimossi dallo stack e viene aggiornato lo stack pointer
- il controllo passa al caller
Gli argomenti sono passati da destra a sinistra:
- perciò il primo argomento è in cima allo stack
- permette di gestire le funzioni variadiche
Il caller ripristina lo stack dopo la chiamata:
- la dimensione dell’eseguibile aumenta, dato che il ripristino dello stack avviene per ogni chiamata a funzione
- si possono gestire le chiamate a funzioni variadiche, per questo tipo di funzioni solo il caller e a conoscenza del numero di argomenti da passare mentre il callee potrebbe non esserlo
Problemi nella gestione dello stack:
- stack overflow: la dimensione della memoria condivisa da heap e stack e fissata al momento dell’avvio del programma, se viene richiesta troppa memoria nello stack, c’e uno stack overflow, che solitamente causa il crash di u programma (es.
funzioni ricorsive profonde, variabili ingombranti)
- Stack buffer overflow: il programma scrive dati sul record di attivazione al di fuori dello spazio riservato ad essi. Succede solitamente per distrazioni del programmatore e dall’uso delle funzioni di libreria che non eseguono i controlli di sicurezza sulle dimensioni dei dati, queste falle vengono sfruttare per attacchi informatici (vengono sovrascritti indirizzi di ritorno nel record di attivazione per
eseguire il codice malevolo).
Hai bisogno di aiuto in Informatica?
Trova il tuo insegnante su Skuola.net | Ripetizioni
Potrebbe Interessarti
×
Registrati via email