关于粉碎名称问题
#include <stdio.h>
//?nTest@@3HA 3H 代表返回类型是 int A: 这部分表示函数没有参数。
int nTest = 1000;
//?nTest2@@3MA 3M 代表返回类型是 float
float nTest2 = 1000;
//?nTest3@@3DA 3D代表返回类型是char
char nTest3 = 1000;
//?nTest4@@3FA 3F代表返回类型的short int
short int nTest4 = 1000;
//?fun1@@YAXXZ Y: 表示返回值是 void 类型。 AXXZ: 这部分描述函数没有参数。
void fun1()
{
}
//fun01@@YAHXZ Y: 表示返回值是 int 类型。 A: 表示函数有一个参数。 HXZ: 这部分描述函数参数的类型。
int fun01()
{
return 0;
}
//?fun2@@YAHHH@Z
int fun2(int n1 ,int n2)
{
return n1+n2;
}
//?fun3@@YAMHM@Z
float fun3(int n1,float n2)
{
return n1+n2;
}
int main(int argc, char* argv[])
{
fun1();
fun2(2,3);
fun3(2,2.1);
int nTest = 0;
return 0;
}
通过生成的.obj文件可以查看函数 、全局变量的名称是怎么来的
通过UNDAME.EXE可以反查出函数是怎么定义的
在 Windows 上,UNDNAME(Undecorate Name)是一个用于将符号名称转换为可读形式的实用程序,通常用于分析符号表中的函数或变量名称。
UNDNAME 工具可以通过命令行使用,并支持一系列命令和选项。