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?
0
A
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
Verwandte Themen
- 1. Warum erscheint der GOT-Eingabe-Offset falsch?
- 2. Warum beginnt der String "\ u0022" mit dieser Zeichenfolge "\ u204D"
- 3. Was ist der erste Parameter für Firebase.Auth.GoogleAuthProvider.GetCredential?
- 4. Warum bindet der erste Funktionsaufruf an die erste Funktion?
- 5. Android-Aktivität beginnt mit dem Wischen/Abbrechen der Benachrichtigung.
- 6. Mit der Funktion mit dem Parameter in Laravel
- 7. Warum Datei in mmap Start-Offset() muss der Seitengröße
- 8. Finden erste Element aus der Liste in Java 8
- 9. "der Stapel beginnt mit der gleichen Adresse für jedes Programm"
- 10. Lua Schlüsselname beginnt mit der Ziffer in der Tabelle Anweisung
- 11. Warum wird meine erste Abschnittsüberschrift in der Tabelle nicht angezeigt?
- 12. Warum funktioniert der Parameter nicht?
- 13. NSDate - Offset der Zeitzone
- 14. Offset-Wert vor der Gruppierung
- 15. Wenn Zelle beginnt mit __xtract erste 3 Zeichen. Wenn es beginnt mit __ nur 2
- 16. In RandomAccessFile warum ist 0 die erste Position und 8 der vierte?
- 17. Offset-Elemente bei der Animation mit jQuery
- 18. Wie beginnt man mit der Programmierung der "Dining Philosophers" -Simulation?
- 19. Bash: Echo-String, der mit "-" beginnt
- 20. Java Klassenname, der mit Java beginnt
- 21. Erste Route-Parameter in Service
- 22. Warum ist der erste Anruf so lang?
- 23. gebene Objekt nicht als der erste Parameter der Funktion in JavaScript behandelt
- 24. Erste Gleitkomma-Ausnahme: 8
- 25. Align Valuebox in der Schachtel mit in Shiny Offset
- 26. Unity Offset-Zyklus beginnt immer von Anfang an?
- 27. Warum meine IP-Adresse mit 192 beginnt.?
- 28. Wie beginnt man mit der Zahleneingabe rechts neben der Textbox?
- 29. Nur der erste Filter, der auf dem Logger überprüft wird
- 30. Warum beginnt Sophia nicht?
Thank Sie. Ich habe mich auf den falschen Teil konzentriert (lese über Aufrufkonventionen, vergaß aber grundlegende Sache) – Inline