:@oregon ah adesso capisco parecchie cose sei un docente universitario!
perchè scusa cosa succede nel seguente caso:
call procedura ; normalmente la call si calcola l'indirizzo successivo ad essa salva l'indirizzo calcolato nello stack ed effettua una jmp all'indizizzo richiesto (e non a quello calcolato per intenderci!).
.....
....
;all' interno della proc
proc:
....
....
pop eax
ret ;
normalmente la ret (senza parametri effettua) prima effettua una pop dell'indirizzo, calcolato dalla call, che sta nello stack e poi esegue la jmp all'indirizzo preso dallo stack.
invece quando la ret ha parametri esempio ret 4 "scarta" i primi 4 byte dello stack utilizzando i registri esp e ebp e poi si comporta come una ret normale.
adesso se l' indirizzo viene preso prima tramite la pop eax in uno stack protetto si avrà un errore di violazione di stack mentre in uno stack non protetto verrà effettuato una jmp ad un indirizzo non conosciuto.
e questo quello che io intendevo per confusione!
lo stesso casino succede se metto la push al posto della pop con l'unica differenza che in uno stack protetto non avrei l'errore di violazione di stack ma potrei avere un altro errore.
fino a windows xp le cose funzionavano in questo modo almeno per call ret.
se poi dopo hanno cambiato il meccanismo di call e di ret questa e un altra storia!
ma non credo l'abbiano fatto!
comunque umilmente se le cose non stanno così (vicenda call - ret) illuminami su come stanno.
e poi ci sono una valanga di libri che spiegano questo meccanismo bisognerà correggerli tutti.
buona giornata e buon lavoro.