有很多外部实用程序可以对修饰的名称进行 demangle
尝试寻找vc++filt /
或一些像这样的在线 demangler
或者您可以使用 dbghelp api UndecorateSymbolName() 在 python 中使用 ctype / pywin32 编写一个
undname 也没有错,你的第二个猜测一定是正确的
我刚刚设计了一个类似的函数原型,并查看了它的 demangled 名称,
它与您的 demangle 名称完全不同,这里是一个 src 代码和输出
#include <windows.h>
#include <dbghelp.h>
#include <stdio.h>
void uselessname(HWND hwnd,LPWSTR lpcname,int mcnt)
{
printf("%p %ws %d\n",hwnd,lpcname,mcnt);
printf("%s\n%s\n%s\n",__FUNCTION__,__FUNCDNAME__,__FUNCSIG__);
}
int main (void)
{
HWND cwnd =NULL;
wchar_t cname[50] = {L"MANGLE AND DEMANGLE"};
int cnt = 50;
uselessname(cwnd,cname,cnt);
char ret[0x100] = {0};
UnDecorateSymbolName("?GetClassNameW@User@@QAE?AVFName@@H@Z",ret,0x100,0);
printf("%s\n",ret);
return 0;
}
输出
gcw.exe
0000000000000000 MANGLE AND DEMANGLE 50
uselessname
?uselessname@@YAXPEAUHWND__@@PEA_WH@Z <<<<<<<<<<<<<<<<<<<<<<<<<< must be like this
void __cdecl uselessname(struct HWND__ *,wchar_t *,int)
public: class FName __thiscall User::GetClassNameW(int) <<<<< result of yours
which is ?GetClassNameW@User@@QAE?AVFName@@H@Z