Rücksprungadresse bei call

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Rücksprungadresse bei call
kann mir jemand sagen was bei einem Call die Rücksprungadresse ist

Beispiel:

Z1 pushl var
Z2 call myFunction
Z3 add $4, %esp

ist die Rücksprungadresse die beim call “myFunction” auf den Stack gepushed wird in dem Beispiel oben Z2 oder Z3?


Z3.


Z3, denn:
Die ret-Instruktion in der aufgerufenen Funktion beinhaltet wenn du so willst ein implizites “pop %eip”, nimmt also den oberen Wert vom Stack und legt ihn in das EIP-Register (Instruction Pointer). Es muss dann also die Adresse der anschließend auszufuehrenden Instruktion in dem Register landen, deswegen wird in deinem Beispiel Z3 auf den Stack gelegt.
Laesst sich uebrigens auch schoen beispielsweise mit gdb rausfinden.


[quote=br0gr4mm3r]
legt ihn in das ESP-Register (Instruction Pointer).[/quote]

nicht esp - das ist der Stack-Pointer. EIP.


Hast natuerlich Recht, war ein Fluechtigkeitsfehler.

Hier hat es ja noch gestimmt :wink:


alles klar, vielen Dank.