40 lines
2.0 KiB
Markdown
40 lines
2.0 KiB
Markdown
|
# Übung 2 Aufgabe 3
|
||
|
|
||
|
1.
|
||
|
|
||
|
| 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 |
|
||
|
|
||
|
2.
|
||
|
|
||
|
```
|
||
|
int32_t f(int32_t a, int32_t b) {
|
||
|
return (a+b)-2;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
3.
|
||
|
|
||
|
4.
|
||
|
Sowohl Caller, also auch Callee räumen den Stack auf. Darüber hinaus
|