IL代码与IL汇编:有区别吗?

xde*_*000 8 .net c#

如果我运行.NET编译器,它会生成一个包含中间语言代码(IL)的文件并将其放入.exe文件(例如).

如果我使用像ildasm这样的工具,它会再次显示IL代码.

但是,如果我直接写入文件IL代码,那么我可以使用ilasm生成.exe文件.

它包含什么?IL代码又来了吗?IL代码与IL汇编代码不同吗?

IL代码和IL汇编之间有区别吗?

ale*_*oot 7

是的,它们之间存在很大差异,因为:

  • (IL)也称为Microsoft中间语言或通用中间语言可以被认为与Java语言生成的字节代码非常相似,我认为您在您的问题中将其称为IL代码.

  • (ILAsm)具有与本机汇编语言相同的指令集.您可以在任何文本编辑器(如记事本)中为ILAsm编写代码,然后可以使用.NET框架提供的命令行编译器(ILAsm.exe)来编译它.

我认为IL Assembly可以被认为是一种完全成熟的.NET语言(可能是一种中间语言),因此当您使用ILAsm.exe编译ILAsm时,您生成IL的方式与C#编译器完全相同(步骤少)用C#代码......

正如评论中所述,IL Assembly基本上是.NET Byte Code的人类可读版本.


Han*_*ant 3

.NET 程序集不包含 MSIL,它包含表示 IL 操作码的元数据和字节。纯二进制数据,而不是文本。任何 .NET 反编译器(例如 ildasm.exe)都知道如何将字节转换回文本。这非常简单。

C#编译器直接生成二进制数据,没有中间文本格式。当您使用文本编辑器编写自己的 IL 代码时,您需要 ilasm.exe 将其转换为二进制文件。这非常简单。

生成二进制数据最困难的工作是元数据。它过度微观优化以使其尽可能小,其结构相当复杂。没有编译器直接生成字节,它们将使用预先构建的组件来完成该工作。值得注意的是,罗斯林必须从头开始重写,这是一项艰巨的工作。