使用 Visual Studio 2010/2012,可以编译带有/FAs
开关的 c++ 源文件,以生成结果代码的汇编输出。但是生成的 asm 文件包含所有符号的损坏形式。
是否有开关或其他智能方法可以让 Visual Studio 生成未损坏的符号?我知道可以手动输入 asm 文件,undname.exe
但切换会比自定义构建后事件方便得多。
使用 Visual Studio 2010/2012,可以编译带有/FAs
开关的 c++ 源文件,以生成结果代码的汇编输出。但是生成的 asm 文件包含所有符号的损坏形式。
是否有开关或其他智能方法可以让 Visual Studio 生成未损坏的符号?我知道可以手动输入 asm 文件,undname.exe
但切换会比自定义构建后事件方便得多。
由于 /FA 输出的性质,不可能这样做。FA 输出有效的汇编代码。表示未处理的 C++ 函数所需的符号在 Microsoft 的 x86 程序集中根本不是有效的标签名称。匿名命名空间也没有好的表示法。
处理这些情况的任何输出都不能使用汇编程序进行编译。如果您制作了一个确实处理此类名称的汇编程序,则它需要知道要应用谁的名称修改规则来组装它。这违背了输出汇编的主要目的(确切地看到发生了什么)。
如果您的所有符号都与 extern "C" 兼容,那么您可以将 C++ 源文件中的所有代码包装在 extern "C" 块中,以强制以未损坏的 C 样式发出所有符号,而不是应用 C++ 名称修饰.
Microsoft Research 项目http://en.wikipedia.org/wiki/Phoenix_%28compiler_framework%29提供了工具链的挂钩,它可能允许直接操作符号名称的形成方式,但不幸的是,它的最后一个公开版本是针对 VS 2008 和它似乎没有被产品化以包含在 VS 2010 或 VS 2012 中。