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