如果我运行一个.NET编译器,它会生成一个包含中间语言代码(IL)的文件,并将其放入.exe文件(例如)。
之后,如果我使用像ildasm这样的工具,它会再次显示IL代码。
但是,如果我直接写入文件IL代码,那么我就可以使用ilasm生成一个.exe文件。
里面有什么?又是IL码?IL代码与IL程序集代码不同吗?
IL代码和IL程序集之间有区别吗?
发布于 2015-11-05 13:18:00
.NET程序集不包含MSIL,它包含表示IL操作码的元数据和字节。纯二进制数据,而不是文本。任何.NET反编译器,比如ildasm.exe,都知道如何将字节转换回文本。很直截了当。
C#编译器直接生成二进制数据,没有中间文本格式。使用文本编辑器编写自己的IL代码时,需要ilasm.exe将其转换为二进制代码。很直截了当。
生成二进制数据的最困难的工作是元数据。由于结构过于微观优化,使其尽可能小,结构比较复杂。没有编译器直接生成字节,它们将使用预制构件来完成这项工作。值得注意的是,罗斯林不得不从头开始重写这个大任务。
发布于 2015-11-05 11:24:33
是的,它们之间有很大的区别,因为:
我认为IL程序集可以被认为是一种成熟的.NET语言(可能是一种中间语言),所以当您用ILAsm.exe编译ILAsm时,生成IL的方式与C#编译器使用C#代码所做的几乎相同(步骤更少)。
正如有人在评论中指出的,IL程序集基本上是.NET字节码的人类可读的版本。
https://stackoverflow.com/questions/33543227
复制相似问题