x64傳參約定

2021-07-25 13:30:16 字數 589 閱讀 8596

和學長討論x64函式傳參的問題, 用哪幾個暫存器傳前4個參,記不清了,做個試驗.

//// x64傳參約定

// x64傳參是fastcall呼叫約定

// x64傳參時, 引數<=4個時,引數從右往左用暫存器傳參

// x64傳參時, 引數》4個時,引數從右往左前4個引數用暫存器傳參, 剩下引數用棧傳參(最右面的引數先入棧)

// 但是我想不起來用哪4個暫存器傳參了, 做個試驗.

#include "stdafx.h"

#include

#include

void fntest(int iparam1, int iparam2, int iparam3, int iparam4, int iparam5, int iparam6);

int _tmain(int argc, _tchar* argv)

// 這函式太簡單了, 編譯成release版, 內聯了.

// 用debug版看吧

void fntest(int iparam1, int iparam2, int iparam3, int iparam4, int iparam5, int iparam6)

windows程式設計 x64呼叫約定

windows32位程式包括stdcall,thiscall,fastcall,cdecl,clrcall,vectorcall,nakedcall等呼叫方式,x64位程式預設使用新的fastcall呼叫方式。這種呼叫方式得益於x64平台暫存器數量的增加。空間大於8位元組的引數用參照傳遞,不能把乙個...

x64內聯彙編

建立 asm,寫入測試彙編 code asmadd proc mov rax,rcx add rax,rdx retasmadd endp end整形引數順序 rcx,rdx,r8,r9,rsp 浮點引數順序 xmm1,xmm2,xmm3.混合引數順序 第乙個引數整形 rcx,第二個引數浮點 xmm...

X64呼叫規範

1.由於位址長度為64位,因此call指令把rsp 堆疊指標 暫存器的值減去8.2.第一批傳遞子程式的四個引數依次存放於暫存器rcx rdx r8 r9。因此,如果只傳遞乙個引數就會放到rcx暫存器中。如果還有第二引數就會將其放入rdx暫存器中,其他引數從右至左入棧。3.長度不足64位的引數不進行零...