.NET汇编语言

时间:2013-08-31 11:02:29

标签: .net jit cil

我理解反编译器和反汇编程序(A .net disassembler/decompiler)之间的区别,即反汇编程序允许您将机器代码转换为汇编语言(您可以在Visual Studio的Dissassembly窗口中看到)并且反编译器转换程序集语言到高级语言,例如C#。

是否可以在文本文件中看到由Jitter生成的汇编代码(来自Dissassembly窗口)?我怀疑不是因为它被优化为及时。

另外,在我的第一个问题的背景下,MSIL是汇编语言还是高级语言?即在.NET中,似乎有两种汇编语言,即MSIL和JITTER生成的汇编语言,但我怀疑答案是JITTER生成的机器代码在Dissassembly窗口中被格式化为汇编语言。

我花时间在这里阅读其他问题,但我没有找到答案。

2 个答案:

答案 0 :(得分:7)

我认为在这里理解定义很重要(看起来你大多数情况下都是这样,这只是为了确保)。

首先,汇编语言:这只是任何人类可读的语言,其中每个语句直接编译为某些机器代码中的指令(例如x86机器代码或.Net字节码)。

基于此,反汇编程序是一个反转编译的程序:它将机器代码转换为相应的汇编语言。

反编译器将机器代码转换为另一种语言。

也许所有选项的图像(包括de / /编译C / C ++和假设x86计算机)都会有所帮助:

compiling and decompiling graph

现在,针对您的具体问题:

  

是否可以在文本文件中看到Jitter生成的汇编代码(来自Disassembly窗口)?

理论上,没有理由不应该这样做(特别是考虑到NGEN)。实际上,我不知道任何这样的工具。

  

在第一个问题的背景下,MSIL是汇编语言还是高级语言?

我会说这是一种高级汇编语言。它当然是汇编语言,它也比普通汇编语言更高级。

答案 1 :(得分:3)

IL / MSIL是一种针对.NET虚拟机的汇编语言:-) The Disassembly窗口显示程序在jitted后的汇编语言,因此是“真正的”CPU(通常是Intel)的汇编语言。

通过使用ngen,您可以将compile .NET应用程序转换为“本机”机器代码。从那里你可以使用“标准”反汇编程序来观察它。