55 lines
1.3 KiB
Markdown
55 lines
1.3 KiB
Markdown
|
# 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
|
||
|
```
|