1

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

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

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

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

4

2 回答 2

7

我认为理解这里的定义很重要(看起来你大多这样做,这只是为了确保)。

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

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

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

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

compiling and decompiling graph

Now, to your specific questions:

Is it possible to see the assembly code (from the Dissassembly window) generated by the Jitter in a text file?

Theoretically, there is no reason why that shouldn't be possible (especially considering NGEN). Practically, I don't know about any such tool.

Is MSIL an assembly language or a high level language in the context of my first question?

I would say that it's a high-level assembly language. It's certainly an assembly language and it's also higher-level than normal assembly languages.

于 2013-08-31T12:39:09.933 回答
3

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

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

于 2013-08-31T11:18:03.960 回答