理解CIL有什么好处?
你必须知道集会才能理解吗?这些文件中的代码看起来很相似。
我如何了解更多信息?有关它的任何书籍,如Jon Skeet的C#书吗?
答案 0 :(得分:6)
我发现这些书在学习IL和CLR时非常有用:
Inside the IL Assembler,Serge Lidin
当然,你会想拥有ECMA specs。
阅读它们会给你很多信息。
(我也听说CLR via C#非常好,但我自己没有看过。)
了解IL和CLR会在遇到问题时为您提供帮助。 (漏洞抽象?)虽然现在有了像Reflector这样好的反编译器,但我发现自己并没有使用ildasm。
不一定需要了解装配,但它会有所帮助。在大多数情况下,IL实际上非常简单。
IL派上用场的一个例子是确切地确定F#究竟是如何编译某些结构的。另一个是能够使用DynamicMethod和System.Reflection.Emit,它可以在某些情况下打开一些不错的解决方案。
答案 1 :(得分:6)
了解CIL可以让您在某些边缘情况下从.NET框架中获得更多优势。
请注意,您无需阅读原始操作码即可从此知识中受益。 IL和汇编的一般知识,加上Mono.Cecil.dll可以创造奇迹:
答案 2 :(得分:3)
CIL比常规汇编程序imo简单得多。在很大程度上,这是因为虚拟机是基于堆栈的,所以一切都进入堆栈,没有寄存器可以跟踪。
此外,没有偏移计算,没有直接内存操作,使用.NET名称列出方法调用等等。我猜想如果你对任何其他类型的汇编语言有一点经验,你可能会很快就能掌握CIL代码的要点。
我个人认为能够启动ILDasm或Reflector以查看C#编译器实际为某些代码生成的IL是非常有用的。对于许多较新的功能,例如匿名委托/ lambdas,捕获变量,迭代器等检查IL可能非常有用。
其他人提到了好书,我只会对Serge Lidin的 Expert .NET 2.0 IL汇编程序投票。它具有所有血腥的细节。如果你想要更接近C的东西#Jeffrey Ricther的 CLR通过C#非常好。 Jon Skeet的书很棒,但它并没有涵盖CIL。
答案 3 :(得分:2)
您无需了解程序集即可学习它 - 它与本机程序集完全分开。虽然在运行时,CLR基本上会将其转换为本机程序集。
有几个可能的优点:
1)您可以查看编译器输出的CIL,具体了解您的代码正在做什么
2)为了解决某些类型的问题,你可能在某些时候想要动态生成代码....例如,因为微软的策略注入框架还没有完全达到鼻烟并且我们需要这种类型的行为我们写了一些低层,框架式管道..
答案 4 :(得分:0)
你可能可以用CIL做些什么,但我无法想到一个实用的例子。无论如何,这是一个教程:
http://weblogs.asp.net/kennykerr/archive/2004/09/07/introduction-to-msil-part-1-hello-world.aspx