如何在Visual Studio汇编程序输出中取消名称
How to demangle names in Visual Studio assembler output?
>使用 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中。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 挂起和取消挂起一个文件DLL
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 如何取消对nullptr的屏蔽,返回正确的对象
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++取消引用指针.为什么会发生变化
- C++格式化输出问题
- 干净取消在输入/输出调用中被阻止的 std::线程
- 如何在Visual Studio汇编程序输出中取消名称
- 来自任意取消引用指针的输出