2021-04-22C/C++学习00
请注意,本文编写于 586 天前,最后修改于 589 天前,其中某些信息可能已经过时。

目录


常见数据类型

c
void __cdecl Foo(float)                         (?Foo@@YAXM@Z)
float __cdecl Foo(float)                        (?Foo@@YAMM@Z)

void __cdecl Foo(int)                           (?Foo@@YAXH@Z)
int __cdecl Foo(int)                            (?Foo@@YAHH@Z)

void __cdecl Foo(double)                        (?Foo@@YAXN@Z)
double __cdecl Foo(double)                      (?Foo@@YANN@Z)

void __cdecl Foo(char)                          (?Foo@@YAXD@Z)
char __cdecl Foo(char)                          (?Foo@@YADD@Z)

void __cdecl Foo(short)                         (?Foo@@YAXF@Z)
short __cdecl Foo(short)                        (?Foo@@YAFF@Z)

void __cdecl Foo(char *)                        (?Foo@@YAXPAD@Z)
char * __cdecl Foo(char *)                      (?Foo@@YAPADPAD@Z)

void __cdecl Foo(void)                          (?Foo@@YAXXZ)

观察变化,可以发现:
M ->  float
H ->  int
N ->  double
D ->  char
X ->  void
F ->  short
PA -> 指针

常见调用约定

c
int __cdecl Foo(int)" (?Foo@@YAHH@Z)

int __stdcall Foo(int)" (?Foo@@YGHH@Z)

int __fastcall Foo(int)" (?Foo@@YIHH@Z)

A -> __cdecl
G -> __stdcall
I -> __fastcall

解析

(?Foo@CR39@@YAXMHNPAD@Z)

c
(?Foo@CR39@@YAXMHNPAD@Z)

?        起始
Foo      函数名
@CR39    命名空间
@@Y      函数类型?
A        调用约定 __cdecl
X        返回值类型 void
M        参数类型 float
H        参数类型 int
N        参数类型 double
PAD      参数类型 char*
@Z       不知道

查看代码

c
# include <iostream>
using namespace std;

namespace CR39 {
	void Foo(float f, int n, double dbl, char* p);
}

int main()
{
	CR39::Foo(3.2f,2,4.5,nullptr);
	return 0;
}

(?Foo@@YIXHPAMD@Z)

c
(?Foo@@YIXHPAMD@Z)

?        开始
Foo      函数名
@@Y      函数类型
I        调用约定 __fastcall
X        返回值类型 void
H        参数类型   int
PAM      参数类型   float*
D        参数类型   char
@Z       不知道,结束?
c
# include <iostream>
using namespace std;

void __fastcall Foo(int a, float* f,char c);

int main()
{
	Foo(1,nullptr,'c');
	return 0;
}

本文作者:Na1r

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!