x64 Windows **棄用 __stdcall、__cdecl 等多種慣例**,統一使用 **Microsoft x64 呼叫慣例**:
RCX, RDX, R8, R9。XMM0~XMM3。RAX,浮點 XMM0。RBX, RBP, RDI, RSI, R12~R15 被呼叫者保存。; Int_3.asm
PUBLIC Int_3
.CODE
Int_3 PROC
; RCX = a, RDX = b, R8 = c, R9 = d (前四個參數)
; 若需第 5 參數,從 [RSP+40h] 取得 (影子空間 32 bytes + 返回地址 8 bytes)
mov eax, 12345h
ret
Int_3 ENDP
END
__stdcall,直接使用暫存器參數。PROC a:DWORD, b:DWORD 語法**,需手動對應暫存器。extern "C" 並編寫封裝函式轉換參數。extern "C" void Int_3(unsigned long a, long b, long c, long d); // 4 參數
// 呼叫端自動依 x64 慣例放入 RCX, RDX, R8, R9
掌握 x64 單一呼叫慣例,組合語言直接操作暫存器即可,無需堆疊模擬。