Přihlášení

SecIT na Facebooku

SecIT.sk na Facebooku

Odpovědět na komentář

Instrukce RET

Zdravím,

Instrukce RET funguje tak, že vybere data na vrcholu zásobníku (za standardní situace na x86 to je 32 bitů), interpretuje je jako adresu a skočí na ni. Takže návratová adresa v době, kdy se vykonává instrukce RET je přímo na vrcholu zásobníku.

Framepointer (na x86 registr EBP) se ukládá na začátku podprogramu. Slouží k tomu, aby se snadno dalo přistupovat k hodnotám parametrů a lokálních proměnných (na rozdíl od registru ESP se totiž při vykonávání normálního podprogramu "nehýbe"). Situace je přitom taková, že:

  • [EBP] obsahuje předchozí hodnotu framepointeru
  • [EBP+4] obsahuje návratovou adresu (bude tam skákat instrukce RET)
  • [EBP+8] obsahuje hodnotu prvního parametru, použije-li se volací konvence STDCALL
  • [EBP-x] obsahuje hodnoty lokálních proměnných

Asi ale také záleží, jak moc velké optimalizace překladač při generování strojového kódu provádí. Může třeba dojít k názoru, že lokálních proměnných je tak málo, že se nevyplatí je ukládat na zásobník...

Takže máte pravdu, že návratová adresa neleží na vrcholu zásobníkového rámce. Leží na vrcholu zásobníku v okamžiku, kdy se vykonává instrukce RET. Tehdy už zásobníkový rámec pro daný podprogram (který je právě ukončován) neexistuje.

Odpovědět

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.
  • Řádky a odstavce se zalomí automaticky.

Více informací o možnostech formátování

CAPTCHA
Opíšte prosím znaky z obrázka, potvrdíte tak, že sa nejedná o spam. Nula sa medzi znakmi nevyskytuje.
Image CAPTCHA
Napište znaky zobrazené na obrázku. Ignorujte mezery, ale dbejte na správné napsání malých a velkých písmen, či jiných znaků.

Odkazy

SecIT.sk fórum

IRC kanál: #secit
IRC server: irc.secit.sk
Porty (SSL): 6696, 9998
Porty (bez SSL): 6667, 6670

Freeweb by WebSupport.sk

© SecIT.sk - info(at)secit.sk - Všetky práva vyhradené. Žiaden obsah umiestnený na našom portáli a fóre sa nesmie kopírovať!