Aufrufkonventionen Flashcards
Lernen der Aufrufkonventionen aus der x86 Programmierung
Aufrufkonventionen
Liste die Schritte der __cdecl alias Standard C Aufruf auf
- Es wird ein Parameter von rechts nach links auf den Stack gelegt
- Aufrufen der Funktion, wobei die Rücksprungadresse auf den Stack liegt und die Funktion übernimmt
- Sichern des BP
- Lokale Variablen anlegen
- Berechnungen durchführen
- Ergebnis der Berechnung nach EAX schreiben
- Lokale Variablen abräumen
- Alten BP wiederherstellen
- Rücksprung aus der Funktion und ab hier übernimmt der Aufrufer
- Parameter vom Stack abräumen
Aufrufkonventionen
Liste die Schritte von __stdcall auf
- Parameter werden von rechts nach links auf den Stack gelegt
- Aufrufen der Funktion, wobei die Rücksprungadresse auf den Stack liegt und die Funktion übernimmt
- Sichern des BP
- Lokale Variablen anlegen
- Berechnungen durchführen
- Ergebnis der Funktion in EAX schreiben
- Lokale Variablen abräumen
- Alten BP wiederherstellen
- Rücksprungadresse vom Stack holen
- Parameter vom Stack abräumen (!)
- Rücksprung aus der Funktion und ab hier übernimmt der Aufrufer
Aufrufkonventionen
Liste alle Schritte der Pascal Calling Convention auf
- Die Parameter werden von links nach rechts auf den Stack gelegt
- Aufrufen der Funktion, wobei die Rücksprungadresse auf den Stack liegt und die Funktion übernimmt
- Sichern des BP
- Lokale Variablen anlegen
- Berechnungen durchführen
- Ergebnis der Funktion in EAX schreiben
- Lokale Variablen abräumen
- Alten BP wiederherstellen
- Rücksprungadresse vom Stack holen
- Parameter vom Stack abräumen
- Rücksprung aus der Funktion und ab hier übernimmt der Aufrufer
Aufrufkonventionen
Bei __cdecl gibt es als Variable Parameterlisten. Was muss der Aufrufer mit den Parametern machen?
Er muss die Parameter wegräumen
Aufrufkonventionen
Bei __stdcall und Pascal Calling Convention räumt die Funktion ihre Parameter weg. Es gibt fixe Parameterlisten. Warum gibt es keine variablen Parameterlisten?
Weil nur der Caller die Anzahl der Parameter kennt und die Funktion die Parameter wegräumt
Aufrufkonventionen
Warum ist der Code geringfügig kurz?
Weil der Aufrufer die Parameter nicht mehr selbst wegräumt
Aufrufkonventionen
Welche Aufrufkonventionen ähnelt __fastcall?
__cdecl
Aufrufkonventionen
Wo befinden sich die Parameter?
- Erster Parameter in EAX
- Zweiter Parameter in EDX
- Weitere Parameter auf den Stack
Aufrufkonventionen
Warum sind Registerzugriffe besser als Stackzugriffe?
Da Registerzugriffe schneller sind und Stackzugriffe auch Hauptspeicherzugriffe sind, die wiederum langsam sind
Aufrufkonventionen
Viele Funktionen haben nur 2 Parameter. Warum spart das Code und Zeit?
Da niemand Parameter vom Stack wegräumen muss
Aufrufkonventionen
Bei ThisCall wird ein Objekt folgenderweise beschrieben:
- obj -> foobar(100, 200)
Muss die Adresse des Objekts auch übermittelt werden?
Ja, die Adresse befindet sich in der Klammer und muss übermittelt werden
Aufrufkonventionen
Was wird bei Microsoft Visual C++ als erstes auf dem Stack übergeben?
this wird als erster Parameter auf dem Stack übergeben
Aufrufkonventionen
Was wird bei GNU C++ im Register ECX übergeben?
this wird im Register ECX übergeben