Aufrufkonventionen Flashcards

Lernen der Aufrufkonventionen aus der x86 Programmierung

1
Q

Aufrufkonventionen

Liste die Schritte der __cdecl alias Standard C Aufruf auf

A
  1. Es wird ein Parameter von rechts nach links auf den Stack gelegt
  2. Aufrufen der Funktion, wobei die Rücksprungadresse auf den Stack liegt und die Funktion übernimmt
  3. Sichern des BP
  4. Lokale Variablen anlegen
  5. Berechnungen durchführen
  6. Ergebnis der Berechnung nach EAX schreiben
  7. Lokale Variablen abräumen
  8. Alten BP wiederherstellen
  9. Rücksprung aus der Funktion und ab hier übernimmt der Aufrufer
  10. Parameter vom Stack abräumen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Aufrufkonventionen

Liste die Schritte von __stdcall auf

A
  1. Parameter werden von rechts nach links auf den Stack gelegt
  2. Aufrufen der Funktion, wobei die Rücksprungadresse auf den Stack liegt und die Funktion übernimmt
  3. Sichern des BP
  4. Lokale Variablen anlegen
  5. Berechnungen durchführen
  6. Ergebnis der Funktion in EAX schreiben
  7. Lokale Variablen abräumen
  8. Alten BP wiederherstellen
  9. Rücksprungadresse vom Stack holen
  10. Parameter vom Stack abräumen (!)
  11. Rücksprung aus der Funktion und ab hier übernimmt der Aufrufer
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Aufrufkonventionen

Liste alle Schritte der Pascal Calling Convention auf

A
  1. Die Parameter werden von links nach rechts auf den Stack gelegt
  2. Aufrufen der Funktion, wobei die Rücksprungadresse auf den Stack liegt und die Funktion übernimmt
  3. Sichern des BP
  4. Lokale Variablen anlegen
  5. Berechnungen durchführen
  6. Ergebnis der Funktion in EAX schreiben
  7. Lokale Variablen abräumen
  8. Alten BP wiederherstellen
  9. Rücksprungadresse vom Stack holen
  10. Parameter vom Stack abräumen
  11. Rücksprung aus der Funktion und ab hier übernimmt der Aufrufer
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Aufrufkonventionen

Bei __cdecl gibt es als Variable Parameterlisten. Was muss der Aufrufer mit den Parametern machen?

A

Er muss die Parameter wegräumen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Aufrufkonventionen

Bei __stdcall und Pascal Calling Convention räumt die Funktion ihre Parameter weg. Es gibt fixe Parameterlisten. Warum gibt es keine variablen Parameterlisten?

A

Weil nur der Caller die Anzahl der Parameter kennt und die Funktion die Parameter wegräumt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Aufrufkonventionen

Warum ist der Code geringfügig kurz?

A

Weil der Aufrufer die Parameter nicht mehr selbst wegräumt

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Aufrufkonventionen

Welche Aufrufkonventionen ähnelt __fastcall?

A

__cdecl

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Aufrufkonventionen

Wo befinden sich die Parameter?

A
  • Erster Parameter in EAX
  • Zweiter Parameter in EDX
  • Weitere Parameter auf den Stack
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Aufrufkonventionen

Warum sind Registerzugriffe besser als Stackzugriffe?

A

Da Registerzugriffe schneller sind und Stackzugriffe auch Hauptspeicherzugriffe sind, die wiederum langsam sind

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Aufrufkonventionen

Viele Funktionen haben nur 2 Parameter. Warum spart das Code und Zeit?

A

Da niemand Parameter vom Stack wegräumen muss

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Aufrufkonventionen

Bei ThisCall wird ein Objekt folgenderweise beschrieben:

  • obj -> foobar(100, 200)

Muss die Adresse des Objekts auch übermittelt werden?

A

Ja, die Adresse befindet sich in der Klammer und muss übermittelt werden

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Aufrufkonventionen

Was wird bei Microsoft Visual C++ als erstes auf dem Stack übergeben?

A

this wird als erster Parameter auf dem Stack übergeben

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Aufrufkonventionen

Was wird bei GNU C++ im Register ECX übergeben?

A

this wird im Register ECX übergeben

How well did you know this?
1
Not at all
2
3
4
5
Perfectly