Per evitare attacchi di overflow del buffer dello stack che sovrascrivono l'indirizzo di ritorno, perché non salvare una copia dell'indirizzo di ritorno all'inizio di una funzione, e quindi ricaricarla alla fine?
push ebp
mov ebp, esp
sub esp, 0x70 # some number
mov eax, [ ebp + 4 ]
mov [ esp ], eax // save return address to TOP of stack
quindi alla fine
mov ecx, [ esp ]
mov [ ebp + 4], ecx // restore your copy, doesn't matter if they overwrote it
add esp, 0x70
pop ebp
retn