从C#代码生成汇编代码?

有没有办法从C#代码生成汇编代码? 我知道C代码可以使用GAS,但有人知道C#是否可行?

C#通常编译为.NET字节码(称为CIL或MSIL ),然后在程序实际运行时编译为本机代码的JIT (“Just In Time”)。 像Mono的AOT一样存在C#的编译器,所以你可以通过其中一个编译C#程序然后反汇编它。 结果可能很难遵循。

更有可能的是,您可能希望查看比CPU的汇编代码更高级别的字节码,您可以通过在C#程序的已编译.exe上使用ILdasm来完成。

C#代码编译成MSIL(MS中间语言),这实际上不是你从C编译器得到的asm代码。 阅读有关.NET Framework应用程序如何运行的更多信息。

如果您想查看生成的IL代码,请参阅此问题 。

您可以使用NGEN工具以间接方式执行此操作,然后反汇编生成的二进制文件。 或者,您可以使用调试器来检查从MSIL创建的JIT代码, Ollydbg 2是一个能够执行此操作的调试器。

您可以使用BenchmarkDotNet并将printAsm标志设置为true。

 [DisassemblyDiagnoser(printAsm: true, printSource: true)] // !!! use the new diagnoser!! [RyuJitX64Job] public class Simple { int[] field = Enumerable.Range(0, 100).ToArray(); [Benchmark] public int SumLocal() { var local = field; // we use local variable that points to the field int sum = 0; for (int i = 0; i < local.Length; i++) sum += local[i]; return sum; } [Benchmark] public int SumField() { int sum = 0; for (int i = 0; i < field.Length; i++) sum += field[i]; return sum; } } 

哪个产生: 在此处输入图像描述