[so2] [Tema1] [Windows] Întrebare interceptor generic
Florin-Alexandru Stancu
niflostancu at gmail.com
Fri Mar 15 22:12:22 EET 2013
Salut,
Încerc să înţeleg cum funcţionază (sper că funcţionează) codul pentru
interceptorul din schiţa din enunţul temei (la Windows):
_asm mov old_stack, ebp
> _asm add old_stack, 8
> _asm sub esp, param_size
> _asm mov new_stack, esp
>
> RtlCopyMemory(new_stack, old_stack, param_size);
>
Aici asignăm valoarea registrului ebp în variabila old_stack... presupun că
ne-o dă dispatcherul în registrul acela, nu?
Dar de ce mai adunăm 8 bytes la adresa lui după?
Şi, mai departe, văd că alocăm memorie pe stivă pentru o nouă stivă de
parametrii şi îi copiem acolo. Perfect.
Presupun că facem lucrul ăsta pentru ca funcţia veche, f, să aibă imediat
pe stivă parametrii. Asta înseamnă că ne bazăm pe compilator să ne pună
variabila new_stack fix la marginea stivei, nu?
Şi... cine curăţă stiva după aceea? Din nou, presupunere, funcţia apelată?
Dar asta nu înseamnă că şi funcţia noastră trebuie să cureţe stiva pentru
parametrii primiţi? Şi nu facem asta...
Deci ce se întâmplă, mai exact, cu stiva la ieşire?
Mulţumesc,
Florin.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so2/attachments/20130315/569f01e7/attachment.html>
More information about the so2
mailing list