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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值