c++命名粉碎及快速还原
name mangling跟函数重载紧密相关。mangling就是将参数、命名空间、返回值、调用方式等信息加入函数名中,目的就是为了给重载的函数不同的签名,因此调用函数的时候才好确认。
但是有个问题,vs
和gcc
使用了不同的命名粉碎规则,我们不可能花大量精力在学习粉碎规则,如何快速还原,其实编译器早就有对应的工具
vs
undname.exe
这个工具在vs安装时附带的,具体位置可以用evething
搜一下,或者打开Visual Studio Developer Command Prompt 即可使用
D:\devel-tools\vs>undname ??2@YAPAXI@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.
Undecoration of :- "??2@YAPAXI@Z"
is :- "void * __cdecl operator new(unsigned int)"
gcc
c++filt
这个工具是gcc
安装时附带的,在gcc.exe
同目录
D:\devel-tools\LLVM\bin>c++filt _ZN6PersonC1Ev
Person::Person()
clang 的命令粉碎和vs是一样的
最后推荐一个网站,它可以解码gcc
和vs
的粉碎名称
本文作者:乘舟凉
本文链接:https://www.cnblogs.com/czlnb/p/16007943.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步