如何在Visual Studio汇编程序输出中取消名称

How to demangle names in Visual Studio assembler output?

本文关键字:取消 输出 汇编程序 Visual Studio      更新时间:2023-10-16

>使用 Visual Studio 2010/2012,可以使用 /FAs 开关编译 c++ 源文件,以生成结果代码的程序集输出。但是生成的asm文件包含所有符号的损坏形式。

有没有开关或其他智能方法可以让Visual Studio生成未修改的符号?我知道可以通过undname.exe手动馈送 asm 文件,但切换会比自定义构建后事件方便得多。

由于/FA 输出的性质,不可能这样做。 FA 输出有效的汇编代码。 在微软的x86程序集中,需要表达C++函数所需的符号根本不是有效的标签名称。 匿名命名空间也没有好的表示法。

处理这些情况的任何输出都无法使用汇编程序进行编译。 如果你做了一个处理这些名称的汇编程序,它需要知道谁的名字重整规则来组装它。 这违背了输出程序集的主要目的(确切地看到发生了什么)。

如果所有符号都与 extern "C" 兼容,则可以将所有代码包装在 extern "C" 块中的C++源文件中,以强制所有符号以未修改的 C 样式发出,而不是应用C++名称重整。

Microsoft研究项目 http://en.wikipedia.org/wiki/Phoenix_%28compiler_framework%29 工具链中提供了钩子,它可能允许直接操作符号名称的形成方式,但不幸的是,它的最后一个公开版本是针对VS 2008的,它似乎没有被产品化包含在VS 2010或VS 2012中。