# 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 ```