关于粉碎名称问题


#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 工具可以通过命令行使用,并支持一系列命令和选项。

posted @ 2024-04-16 21:36  不会笑的孩子  阅读(6)  评论(0编辑  收藏  举报