【问题标题】:Understanding VC++ ASM generation了解 VC++ ASM 生成
【发布时间】:2010-04-19 23:46:02
【问题描述】:

我已经告诉 VC++ 在编译期间生成 ASM 文件,我以前从未真正使用过。但它似乎非常有限,就像它们只是在编译过程中抛出的额外文件。 我想也许 ASM/C++ 代码可能是链接的,所以我可以直接从 C++ 跳转到生成的 ASM 代码?或者可以在 ASM 代码中设置断点? 这是可能的,我不知道这些工具,还是 ASM 生成用于离线分析?

【问题讨论】:

  • 很难做到这一点,因为 C++ 和 asm 没有 1:1 的表示。
  • 但是编译器确切地知道它生成了什么代码并且应该能够从 C++->ASM 映射。因此问题是,如果 PDB 文件包含此数据,或者 ASM 代码只是一个副产品。

标签: visual-studio-2008 visual-c++ assembly


【解决方案1】:

编译器生成的汇编语言文件主要用于离线分析。如果你想做一些事情,比如在生成的汇编代码中设置断点,你可以这样做。打开相应的源文件后,右键单击并选择“转到反汇编”。这将向您显示汇编语言代码,其中源语句作为 cmets 交错(类似于它单独生成的文件)。然后,您可以在从任何特定源语句生成的单个汇编语言语句上设置断点。

【讨论】:

  • 这仅在调试模式下才真正起作用,其中生成的程序集不像发布版本那样具有教育意义。 stackoverflow.com/questions/563000/…
  • @BlueRaja:是也不是。只要你让它在发布模式下生成调试信息,你仍然可以做大致相同的事情。不同之处在于全局优化可以重新排列代码,因此您不再获得源代码与其生成的内容之间的 1:1 对应关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 2017-12-25
  • 2021-10-03
  • 1970-01-01
  • 2017-12-16
相关资源
最近更新 更多