如何从装饰名称中取消装饰名称?

Ben*_*min 10 c++ windows name-mangling visual-studio

在Raymond Chen的一篇文章中,他似乎能够从装饰名称中了解该函数的未修饰名称.我不知道他怎么能这样做.

在这个装饰的名字,

?的GetName @可通过按钮@ UILibrary @@ UAEPB_WPAPAVStringHolder @ 2 @@ž

每个组件的含义是什么?

ssu*_*ube 13

为了避免猜测,仍然没有真正使用工具,该UndecorateSymbolName功能可能是有用的.我希望这能给出一个权威的正确答案.

要手动执行此操作,此页面会提供有关该方案的一些信息,就像这些一样.

基本概要是_name@scope@scope@@parameters@something@@something.我怀疑最后两个部分是堆栈大小和调用约定或类似,但文档可能有更多的细节.


Gaz*_*yer 7

名称修改与编译器有关.

在您链接的文章中,Raymond正在使用MS util(undname)来删除重整.

这是一个表格,显示常见的编译器如何破坏的.

  • @Benjamin:有一种简单的猜测方式:体验.特定编译器的修改是固定和定义的.经过一段时间查看错误和无瑕疵的名称后,您可以识别常见的模式,并且不需要每次都查看文档. (3认同)

Sla*_*nov 5

Microsoft Visual Studio带有undname.exe工具。

http://msdn.microsoft.com/en-us/library/ms937379.aspx

如果您在默认位置安装了MS VS,则可以使用:

“ C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ undname.exe”?GetName @ PushButton @ UILibrary @@ UAEPB_WPAPAVStringStringHolder @ 2 @@ Z

Microsoft(R)C ++名称解析器版权所有(C)Microsoft Corporation。版权所有。

取消修饰:-“?