簡體   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