2.0 KiB
2.0 KiB
Übung 2 Aufgabe 3
Instruction | Kommentar |
---|---|
push eax |
speichere wert aus eax auf dem stack |
push ecx |
2. Parameter wird auf Stack gepusht |
push edx |
1. Parameter wird auf Stack gepusht |
call CAFEBABEh |
Subrotine an Adresse 0xCAFEBABE wird aufgerufen |
add esp, 12 |
Zuvor gepushte parameter werden aufgeräumt |
Instruction | Kommentar |
---|---|
push ebp |
Wert von ebp wird auf Stack gespeichert |
mov ebp, esp |
ebp Zeigt auf aktuellen stack pointer |
sub esp, 4 |
lokalen stackframe von 4 bytes reservieren |
mov ecx, [ebp+8] |
schreibe parameter 1 nach ecx |
add ecx, [ebp+12] |
addiere parameter 2 auf ecx (param1+param2) |
mov [ebp-4], ecx |
schreibe wert aus eax in lokalen stackframe; int x = (param1+param2) |
dec dword ptr[ebp-4] |
subtrahiere 1 von wert in lokalem stackframe; x-- |
dec dword ptr[ebp-4] |
subtrahiere 1 von wert in lokalem stackframe; x-- |
mov eax, [ebp-4] |
schreibe wert aus lokalem stackframe nach eax; return x |
mov esp, ebp |
stelle alten stackpointer wieder her |
pop ebp |
stelle alten basepointer wieder her |
ret 8 |
springe zurück zum aufrufenden punkt und räume den stack auf |
int32_t f(int32_t a, int32_t b) {
return (a+b)-2;
}
Sowohl Caller, also auch Callee räumen den Stack auf. Darüber hinaus