欢迎来到天天文库
浏览记录
ID:50368181
大小:135.00 KB
页数:14页
时间:2020-03-08
《C函数名修饰编码规则.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、C++函数名修饰编码规则-------------------------------2010年8月19日qduwg原创下面是总结的对C++名字修饰的一些规则,通过大量的实验搞出的。其中需要在VC内写一个小程序,然后通过单步调试,可以看出其编码规则,也可以使用cl/Fc/cxx.cpp方法编译你的cpp文件,得到一个xx.COD文件,在那里也可以看到修饰后的名字及汇编代码等。当然不了解一点编码规则,是无法看懂那些类似火星人编码的文字的。故废寝忘食一个多星期,白天晚上的干,才整理出来以下资料,也是自己心血的结晶
2、。聊以抛砖引玉。com(int,int)(??0comp@@QAE@HH@Z 复数类构造函数构造函数为?0,跟作用域comp,结束标志@@,函数访问类型Q,一般函数A常函数用B,调用规则E(this)。参数为2个整数,HH表示。@Z为函数标志comcom();??0comp@@QAE@XZ复数类构造函数,无参数。构造函数为?0,跟作用域comp,结束标志@@,函数访问类型Q,一般函数A常函数用B,调用规则E(this)。无参数用X表示。Z为函数标志,前面没有那个@号。c1.add(c2);//c1,c2分别为
3、复数类对象?add@comp@@QAEAAV1@AAV1@@Z)复数类成员函数。?成员函数名add,域名comp,结束标志@@,QAE含义同前,返回值类型AAV1,引用本层类的对象,@分隔符,然后参数AAV1,也是引用本类对象,分隔符@,函数结束标志@Z。注意此时最后面的@@Z的两个@之间没有数字的。(seebelow,后面情况有变化)增加一层名字空间时:?add@comp@wang@@QAEAAV12@AAV12@@Z //如果自定义了名字空间wang,可以看出作用域的变化。增加二层名字空间时
4、:函数原型comp&add(comp&a)?add@comp@wang@gang@@QAEAAV123@AAV123@@Z //如果在自定义名字空间wang外层又定义了一个gang名字空间域,可以看出作用域的变化。增加二层名字空间时:函数原型comp&add(comp&a,comp&b) //函数参数为多个,且有重复前面的参数的时候。?add@comp@wang@gang@@QAEAAV123@AAV123@0@Z //如果增加了多层名字空间,那么在参数的后面就会出现相应的层号1,2,3等,而且在
5、原来的@@Z的两个@之间增加一个数字0.表示重复前面第0号参数。如果有不同类型参数,则填入相应代号即可,替换掉数字。参见后面实例描述。cout<
6、class,后面?$char_traits@D@std@@,为第二个参数类类型的具体描述,其中@为参数类型,std@@为char_traits类所在域,然后是外层类$basic_ostream的范围std@@,然后是QAE,含义同前,接着是返回值类型,AAV是表示对一个对象的引用,0和1分别表示所引用对象参数,0表示跟前面第0个相同,即@DU,1表示跟前面第1个相同即@D(注意序号从0开始算起)。然后是函数参数,这里是H表示输出整数,最后是结束标志@Z。注:这里的范围不是名字空间,是指有不同类构成的函数签名,
7、跟前面的名字空间不同的。类模板名由$开头,然后是模板参数。cout<<'';??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@D@Z //调用的内联函数这个名字是没有类名修饰的名字,属于公有函数。开始是名字?6std@@,然后是YA,公有函数,调用约定A,返回值类型AAV表示对类引用(AA表示引用,V表示类),后面是引用的类,由$basic_ostream@DU?$char_traits@D@std@@描述,其后紧跟的是参数表,其中@
8、0是内联函数标志,@AAV10表示与0号参数相同类型,@D表示字符类型参数,@Z表示函数。char*p,cout<<*p;??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@D@Z //调用的内联函数constchar*p,cout<<*p;??6std@@YAAAV?$basic_ostream@DU?$char_traits@
此文档下载收益归作者所有