C# 从C代码生成汇编代码?
有没有办法从C代码生成汇编代码?我知道使用GAS的C代码是可能的,但是有人知道使用C#是否可能吗?C#通常被编译成.NET字节码(调用),然后在程序实际运行时(“即时”)编译成本机代码。类似C语言的编译器已经存在,所以你可以通过其中一个编译一个C语言程序,然后反汇编它。结果可能很难遵循 更有可能的是,您可能希望查看比CPU汇编代码更高级别的字节码,您可以在C程序的编译C# 从C代码生成汇编代码?,c#,assembly,code-generation,gnu-assembler,C#,Assembly,Code Generation,Gnu Assembler,有没有办法从C代码生成汇编代码?我知道使用GAS的C代码是可能的,但是有人知道使用C#是否可能吗?C#通常被编译成.NET字节码(调用),然后在程序实际运行时(“即时”)编译成本机代码。类似C语言的编译器已经存在,所以你可以通过其中一个编译一个C语言程序,然后反汇编它。结果可能很难遵循 更有可能的是,您可能希望查看比CPU汇编代码更高级别的字节码,您可以在C程序的编译.exe上使用这些字节码。C代码编译成MSIL(MS中间语言),而MSIL实际上不是从C编译器获得的asm代码。了解有关.NET
.exe
上使用这些字节码。C代码编译成MSIL(MS中间语言),而MSIL实际上不是从C编译器获得的asm代码。了解有关.NET Framework应用程序如何运行的更多信息
如果您想查看生成的IL代码,请参阅。您可以使用该工具以一种间接的方式执行此操作,然后反汇编生成的二进制文件。或者,您可以使用调试器来检查从MSIL创建的JIT代码,这样的调试器是否能够做到这一点。您可以在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;
}
}
[分解诊断器(printAsm:true,printSource:true)]/!!!使用新的诊断仪!!
[RyuJitX64Job]
公共类简单
{
int[]field=Enumerable.Range(0100.ToArray();
[基准]
公共和本地()
{
var local=field;//我们使用指向该字段的局部变量
整数和=0;
for(int i=0;i
产生:
我不清楚你在问什么。您想将C#编译成汇编,还是想编写一个输出汇编的C#程序?我想查看我的C#代码在汇编中的外观。为了教育目的。现在就去上组装课。