C/C++ 函數符號生成規則
函數符號是編譯器在編譯期間創建的一個字符串 用來指明函數的定義或原型,C/C++函數在內部使用不同的名字修飾方式.
假設一個函數的聲明如下 目標是一臺32位機器
int function(int a,int b)
C編譯器函數名修飾規則
_cdecl調用約定(C標準調用約定)
僅僅在輸出函數名前加一個下劃線前綴
_function
_stdcall約定調用(windows標準調用約定)
編譯器和鏈接器會在輸出的函數名前加一個下劃線前綴,函數名後面加上一個@和其參數的字節數
_function@8
fastcall調用約定(快速調用約定)
在輸出函數名前加一個@後面也加一個@符號和其參數的字節數
@function@8
C++編譯器函數名修飾規則
對於_cdecl方式 參數表的開始標識是@@YA
對於_stdcall方式 參數表的開始標識是@@YG
對於_fastcall方式 參數表的開始標識是@@YI
_cdecl調用約定
? + 函數名 + 參數表的開始標誌@@YA + 函數返回類型代號 + 參數類型代號 + 結束標誌 @Z/Z(無參數)
?function@@YAHHH@Z
_stdcall調用約定
? + 函數名 + 參數列表的開始標誌@@YG + 函數的返回值類型代號 + 參數類型代號 + 結束標誌 @Z/Z(無參數)
?function@@YGHHH@Z
fastcall調用約定
? + 函數名 + 參數列表的開始標誌@@YI + 函數的返回值類型代號 + 參數類型代號 + 結束標誌 @Z/Z(無參數)
?function@@YIHHH@Z
_thiscall調用約定(類成員方法的約定)
? + 函數名 + @字符引導的類名 + 參數表的開始標誌 + 函數的返回類型代號 + 結束標誌@Z/Z
參數表
類型代號
X void
D char
E unsigned char
F short
H int
I unsigned int
J long
K unsigned long
M float
N double
_N bool
U struct
PA+類型 指針
PB+ const指針
類參數白開始標誌
public @@QAE
protected @@IAE
private @@AAE
使用const 則將A換爲B