1.3 KiB
1.3 KiB
Aufgabe 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
-
- 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
-
- 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
-
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