[英]Does Visual Studio generate assembly from the C source or from the binary code it compiled into?
当我运行我的代码(任何代码)时,在调试模式下我可以选择“反汇编”。
我知道“反汇编”是从机器代码(存储在 object 文件中的“1”和“0”)创建汇编代码。
所以,我可以假设当我在 Visual Studio 中编译我的代码时,C/C++ 代码与机器代码/目标文件之间没有“汇编/汇编”阶段,如果我想查看我需要的汇编代码要求 Visual Studio 将其从 object 文件反汇编为汇编。
所以我的问题是:
我是对的,除了反汇编没有办法看到asm吗?
(如果 1 为否):为什么 Visual Studio 的调试器显示“反汇编”选项,而不是“汇编”?
Clang/GCC 是否有汇编阶段,或者 C/C++ 代码是否直接编译为 object 代码?
编者注:对于 GCC 与大多数其他主流 C/C++ 编译器(如 clang/LLVM 和 MSVC)而言,3 的答案实际上是不同的。 由于这与 MSVC 的工作方式是一个单独的问题,因此该部分与这些其他 SO Q&As 重复:
当调试器提供反汇编选项时,它通常检查正在运行的进程的 memory,并通过嵌入或与可执行文件相关联的调试信息进行扩充,其中可以包括帮助调试器识别相关源代码的参考。
另外,编译器通常可以选择向您显示汇编语言,即它们在内部使用的汇编语言(可能在传递给特定子进程的临时文件中,例如汇编器)或其等效语言(如果它不生成会生成什么) object代码直接)。 对于 GCC 和 Clang, -S
开关执行此操作。 对于 Visual Studio, /FA
执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.