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

55 lines
1.3 KiB
Markdown
Raw Normal View History

2018-11-12 14:40:59 +01:00
# Aufgabe 1
1)
* Fragment 1: fastcall, da die parameter durch die register eax, edx und ecx übergeben werden, return value in eax
* Fragment 2: cdecl, da die parameter in right-to-left order auf dem stack liegen, return value in eax, kein stack
cleanup
* Fragment 3: stdcall, parameter in right-to-left order auf dem stack, return value in eax, callee cleanup
2)
* Fragment 1: EAX = a, edx = b, ecx = c
Annahme: Angabe der Parameterreihenfolge _nach_ dem call, also im neuen stackframe
* Fragment 2: ebp+0x8 = a, ebp+0x0c = b, ebp+0x10 = c
* Fragment 3: ebp+0x8 = a, ebp+0x0c = b, ebp+0x10 = c
Annahme: Angabe der Parameterreihenfolge _vor_ dem call, also im alten stackframe
* Fragment 2: esp = a, esp+0x4 = b, esp+0x8 = c
* Fragment 3: esp = a, esp+0x4 = b, esp+0x8 = c
3)
* Fragment 1: Caller cleanup bzw da nur 3 Parameter verwendet werden, kein stack cleanup nötig, da alle parameter
über register übergeben werden
* Fragment 2: Caller cleanup
* Fragment 3: Callee cleanup
4)
Fragment 1:
```
MOV eax, 3
MOV edx, 2
MOV ecx, 1
CALL f
```
Fragement 2:
```
PUSH 1
PUSH 2
PUSH 3
CALL f
ADD ESP, 12
```
Fragment 3:
```
PUSH 1
PUSH 2
PUSH 3
CALL f
```