如果运行.NET编译器,它将生成一个包含中间语言代码(IL)的文件,并将其放入.exe文件(例如)。
如果我使用了像ildasm这样的工具,它会再次向我显示IL代码。
但是,如果我直接写入文件IL代码,则可以使用ilasm生成.exe文件。
它包含什么? IL代码再次? IL代码与IL汇编代码不同吗?
IL代码和IL汇编之间有区别吗?
最佳答案
.NET程序集不包含MSIL,它包含表示IL操作码的元数据和字节。纯二进制数据,而不是文本。诸如ildasm.exe之类的任何.NET反编译器都知道如何将字节转换回文本。这很简单。
C#编译器直接生成二进制数据,没有中间文本格式。当您使用文本编辑器编写自己的IL代码时,则需要ilasm.exe才能将其转换为二进制文件。这很简单。
生成二进制数据最困难的工作是元数据btw。对其进行了过度的微优化,以使其尽可能的小,其结构也非常复杂。没有编译器直接生成字节,它们将使用pre-built component来完成该工作。值得注意的是,罗斯林不得不从头开始重写这项艰巨的工作。
关于c# - IL代码与IL汇编: is there a difference?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33543227/