1. 程式人生 > 其它 >c++命名粉碎及快速還原

c++命名粉碎及快速還原

name mangling跟函式過載緊密相關。mangling就是將引數、名稱空間、返回值、呼叫方式等資訊加入函式名中,目的就是為了給過載的函式不同的簽名,因此呼叫函式的時候才好確認。

但是有個問題,vsgcc使用了不同的命名粉碎規則,我們不可能花大量精力在學習粉碎規則,如何快速還原,其實編譯器早就有對應的工具

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是一樣的

最後推薦一個網站,它可以解碼gccvs的粉碎名稱