"/FAs命令行选项“和"Goto反汇编”菜单选项有什么不同?
我知道Visual Studio有两种查看汇编代码的方法。
方法一: MSVC将/FAs添加到命令行选项中以生成.asm文件。
方法2: Goto反汇编菜单选项
Q1。方法1和方法2生成的汇编代码有什么不同?
Q2。方法1和方法2,哪种方式查看汇编代码更好?
Q3。方法2中VS的默认反汇编程序是什么?
发布于 2019-05-10 19:44:19
“转到反汇编”是Visual Studio IDE调试体验的一个功能,而用于输出反汇编的命令行选项是C++编译器的一个功能。这是完全不同的事情,它们彼此无关,以完全相反的方式工作。首先,“去反汇编”不做任何组装。它做的恰恰相反:它将正在运行的进程的一块内存解释为机器代码,并向您显示该机器代码的汇编代码是什么样子的。汇编程序将汇编代码转换为机器代码。反汇编程序将机器代码转换为汇编代码。这里发生的是后者。这就是为什么它被称为"Go To _Dis_assembly“。我不认为VS调试器使用的反汇编程序可以作为单独的工具访问。至少我不知道有任何文档会提到这样的工具,我也从来没有看到过更改调试器应该使用哪个反汇编程序的选项。因此,您对调试器使用的默认反汇编程序的问题有点沉默,它只是使用调试器…中内置的反汇编程序
当您使用编译器选项输出程序集代码时,编译器会将它为源代码生成的程序集代码写入文件。这使您可以查看编译器将源代码转换为的汇编代码。与调试器的“转到反汇编”功能相反,调试器将显示在任何给定时刻在给定进程中实际运行的实际机器码的汇编代码,而编译器输出的汇编是编译器为单个源文件生成的整个汇编。请注意,在链接实际程序之前,每个源文件都会发生这种情况。所以你会看到的程序集不是最终程序的程序集,它只是为单个源文件生成的程序集。如果您使用的是整个程序优化,则此程序集不一定与程序中实际结束的机器代码相对应。
结论:在这两个选项之间没有“更好的方法”。其中的每一个都做了完全不同的…
https://stackoverflow.com/questions/56076517
复制相似问题