C# 如何使用代码查看程序集级别上发生的情况?

C# 如何使用代码查看程序集级别上发生的情况?,c#,assembly,C#,Assembly,可能重复: 我开始学习汇编语言 我想知道是否可以看到我的c#代码的汇编代码 例如,如果我有: int i; 我怎样才能: 看到汇编代码了吗 在汇编代码中准确地识别它的作用是什么 汇编程序代码通常只在JIT时间编写,因此查看它的最佳位置,特别是如果您想了解它,请查看VS调试器 如果您指的是IL(中间语言),这不是汇编语言,但它存储在您的EXE或DLL中。一个很好的工具是ILSpy 使用调试器查看抖动生成的机器代码。启动调试并单步执行或设置断点。在编辑器窗口上单击鼠标右键,选择“转到反汇编”

可能重复:

我开始学习汇编语言

我想知道是否可以看到我的
c#
代码的汇编代码

例如,如果我有:

int i;
我怎样才能:

  • 看到汇编代码了吗
  • 在汇编代码中准确地识别它的作用是什么

  • 汇编程序代码通常只在JIT时间编写,因此查看它的最佳位置,特别是如果您想了解它,请查看VS调试器

    如果您指的是IL(中间语言),这不是汇编语言,但它存储在您的EXE或DLL中。一个很好的工具是ILSpy


    使用调试器查看抖动生成的机器代码。启动调试并单步执行或设置断点。在编辑器窗口上单击鼠标右键,选择“转到反汇编”。或者使用调试+Windows+反汇编。您需要使用的其他调试窗口是寄存器和内存,它们显示原始cpu寄存器和内存视图。右键单击“寄存器”窗口,将寄存器添加到视图中


    您在那里看到的汇编代码有一些奇怪之处。所有代码都从地址0开始,它不会显示实际地址,因为由于抖动,这是完全不可预测的。但这也会导致一个错误,调用指令的目标地址是错误的。您通常希望看到优化的代码,因为这是用户机器上实际运行的代码。切换到发布版本并使用工具+选项、调试、常规,取消选中“在模块加载时抑制JIT优化”选项。

    您是否看到:您可能对查看编译的IL字节码感兴趣,它比汇编高一步,但级别仍然非常非常低。NET Reflector可以做到这一点,例如.C代码更容易翻译成汇编。尽管如此,单独学习汇编通常比对编译后的代码进行反向工程容易得多。仅供参考,
    inti
    的上下文远远不够实际编译;您已经给了一个符号一个类型,但是因为您没有对该符号做任何操作,所以什么也没有发生。一个有效的C#程序至少需要一个类。@DanBryant公共类myClass{}呢?