C++函數調用約定有4種:
1._cdecl C標準調用約定,也是默認調用約定
2._stdcall Windows下的標準調用約定
3._fastcall 快速調用約定
4._thiscall 類成員方法的調用約定
_cdecl調用約定生成的函數符號:?函數名@@YAHHH@Z
YA代表_cdecl函數約定,YG代表_stdcall函數約定,YI代表_fastcall函數約定。
函數調用約定後的第一個參數代表函數返回值類型,第二個參數代表第一個形參類型,第三個參數代表第二個形參類型。其中H代表int,_N代表bool,N代表double。
最後的@Z代表有形參。
函數調用約定約定了什麼?
1.函數符號的生成;
2.實參的入棧順序(以上四種調用約定均是從右向左入棧);
3.形參的開闢和清理方式
_cdecl 調用方開闢內存,調用方清理
_stdcall 調用方開闢內存,被調用方清理
_fastcall 最多使用2個寄存器帶入實參,第3個參數起,調用方開闢內存,被調用方清理
函數返回值的返回方式
1.返回值如果>0個字節並且<=4個字節則由eax寄存器帶回;
2.返回值如果>4個字節並且<=8個字節則由2個寄存器eax、edx帶回;
3.返回值如果>8個字節則由臨時量帶回。
寄存器:eax、ebx、ecx、edx
ebp:棧底指針寄存器
esp:棧頂指針寄存器
PC:下一行指令寄存器