notes/school/os-sec/uebung/02/02_3.md

40 lines
2.0 KiB
Markdown
Raw Normal View History

2018-11-12 14:40:59 +01:00
# Ü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