繁体   English   中英

Visual Studio 是从 C 源代码还是从它编译成的二进制代码生成程序集?

[英]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 文件反汇编为汇编。

所以我的问题是:

  1. 我是对的,除了反汇编没有办法看到asm吗?

  2. (如果 1 为否):为什么 Visual Studio 的调试器显示“反汇编”选项,而不是“汇编”?

  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM