2017-03-13 4 views
0

Ich versuche, das Verständnis der Assembler-Sprache zu entwickeln. Ich verstehe, dass, wenn Funktion Stapelrahmen erstellt, es aktuellen EBP drückt, als Kopien Stapelzeiger Wert auf die EBP. Auf den ersten (und einzigen) Funktionsparameter wird von EBP + 8 zugegriffen. Aber warum 8? Nächster Wert nach Push EBP ist logisch Offset 4. Ich habe viele Webseiten gelesen, aber es scheint, dass ich diesen Teil nicht verstehe.Warum beginnt der erste Parameter in der x86-Baugruppe mit dem Offset 8?

Antwort

2

Das "fehlende" DWORD ist die Rücksendeadresse. Der Call-Stack wie folgt aussieht:

ebp  : saved ebp 
ebp + 4 : return address 
ebp + 8 : pushed parameter 

Und dann, wenn die Funktion lokale Variablen verwendet, da Stapelspeicher ist (in der Regel) für die nach dem Stapelrahmen reserviert, sie sind verwiesen als ebp - xx:

ebp - 8 : second local 
ebp - 4 : first local 
ebp  : saved ebp 
ebp + 4 : return address 
ebp + 8 : pushed parameter 
+0

Thank Sie. Ich habe mich auf den falschen Teil konzentriert (lese über Aufrufkonventionen, vergaß aber grundlegende Sache) – Inline

Verwandte Themen