Condividono la stessa memoria fisica, tuttavia il frame dello stack contiene gli indirizzi di ritorno.
Gli indirizzi di ritorno memorizzano l'indirizzo del codice nella funzione / procedura / metodo di chiamata, in modo che la funzione / procedura / metodo chiamata sappia dove tornare quando viene eseguita. Meccanicamente, l'istruzione "return" invia istruzioni al processore per caricare l'indirizzo di ritorno dallo stack frame, quindi scaricare lo stack frame e passare a quell'indirizzo di ritorno caricato. (L'operazione di chiamata fa effettivamente l'inverso: cattura l'indirizzo corrente come indirizzo di ritorno e lo inserisce nello stack insieme a un nuovo frame.)
Un problema di sicurezza problematico è il dirottamento del contatore del programma del processore, che indica quali istruzioni verranno eseguite successivamente!
Se si sovrascrive l'indirizzo di ritorno nello stack frame, è possibile rendere il ramo di codice "return" a una posizione di propria scelta invece di dove dovrebbe andare (torna al chiamante).