如何在Visual Studio汇编程序输出中解码名称?

时间:2012-10-09 15:13:46

标签: c++ visual-studio visual-c++ assembly name-mangling

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

是否有开关或其他智能方法使Visual Studio生成未拼写的符号?我知道可以通过undname.exe手动提供asm文件,但是切换比自定义的构建后事件更方便。

2 个答案:

答案 0 :(得分:1)

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

使用汇编程序无法编译处理这些情况的任何输出。如果你制作了一个能够处理这些名称的汇编程序,那么它需要知道应用哪个名称修改规则来组装它。这违背了输出装配的主要目的(完全看看发生了什么)。

答案 1 :(得分:0)

如果你的所有符号都与extern“C”兼容,那么你可以将所有代码包装在extern“C”块中的C ++源文件中,以强制所有符号以unmangled C样式发出,而不是使用C ++应用名称修改。

Microsoft Research项目http://en.wikipedia.org/wiki/Phoenix_%28compiler_framework%29提供了工具链的钩子,它可能允许直接操纵符号名称的形成方式,但遗憾的是它的最后一次公开发布是针对VS 2008而且它似乎没有产品化包含在VS 2010或VS 2012中。