Microsoft x64 calling convention
Quote:
|
Stack aligned on 16 bytes. 32 bytes shadow space on stack.
|
Therefore code given here is all non-standards compliant with arbitrary calling convention (compiler will have return address of 8 bytes so an extra 8 indeed is needed but if called from assembler directly, etc assumption may not hold). If not calling back into C code which has been externed for use by the asm code (like puts is for sure), this should obviously not be necessary - neither alignment or shadow space.
PHP Code:
SUB RSP, 32 ; Allocate space on the stack 32 for shadow space
AND RSP, -16 ; Align on 16 bytes
…
LEAVE
That pattern is needed for both F1 and F2 and its straightforward.