Frame pointer, epb, und die Rückkehr-Adresse
Das folgende Bild ist aus der wikipedia Eintrag auf call-stack und gibt es etwas, dass ich nicht ganz versteh:
Dachte ich, dass der frame-pointer gespeichert, die im ebp-register initialisiert wird, die als solche im Prolog*:
push ebp ; Preserve current frame pointer
mov ebp, esp ; Create new frame pointer pointing to current stack top
sub esp, 20 ; allocate 20 bytes worth of locals on stack.
Wenn dem so ist, dann sollte man nicht die frame-pointer in das Bild zeigen, um nach der Rückkehr-Adresse, und vor der sollte es sein, die bisherigen frame pointer-Adresse und vor, dass die return-Adresse? Was bin ich?
Dank!
*Entnommen aus: Was ist eigentlich der base-pointer und stack-pointer? , Was tun Sie?
InformationsquelleAutor SpeksETC | 2010-12-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, du hast Recht, frame pointer zeigt auf eine Adresse, wo Sie gespeichert bisherigen frame pointer, vor der Rückkehr-Adresse. Das richtige Bild wäre
Letzte Element wird am Anfang des Stacks
InformationsquelleAutor Abyx
Wenn die Funktion aufgerufen wird. Die Adresse zurück geschoben wird, ist auf stack und stack-pointer zeigt jetzt auf die Adresse zurück.
Dies ist, was passiert in der Funktion:
Ist das Ergebnis:
EBP zeigt auf den vorherigen Wert von EBP.
ESP zeigt weitere 20 bytes von ESP. Diese 20 bytes werden für die lokale vars.
InformationsquelleAutor Madhur Ahuja