了解CIL的好处是什么?
你必须了解汇编才能理解它吗?这些文件中的代码看起来很相似。
如何了解更多信息?有没有像Jon Skeet的C#这样的书?
发布于 2009-02-11 18:11:02
在学习IL和CLR时,我发现这些书很有用:
只要通读一遍,你就会得到很多信息。
(我也听说过CLR via C#非常好,但我自己还没有读过。)
了解IL和CLR将在您遇到问题时帮助您。(一个泄漏的抽象?)不过,现在有了像Reflector这样优秀的反编译器,我发现自己不再经常使用ildasm了。
理解汇编并不是必须的,但它会有所帮助。实际上,IL在很大程度上相当简单。
IL派上用场的一个例子是确定F#确切地如何编译某些构造。另一个是能够使用DynamicMethod和System.Reflection.Emit,这可以在某些情况下打开一些很好的解决方案。
发布于 2009-02-11 19:48:38
CIL的知识可以让您在一些边缘情况下从.NET框架中获得更多。
请注意,您不必能够读取raw操作码即可从此知识中获益。有关IL和程序集的通用知识,再加上Mono.Cecil.dll,可以创造奇迹:
PS:对我来说,获得一些实用的IL知识的最好的源码方法是阅读一些Gendarme规则的C#代码(它类似于使用Mono.Cecil进行代码自省的FxCop )。此外,本文是一个很好的开始:Parsing the IL of a Method Body。
发布于 2009-02-11 20:00:34
CIL比常规汇编程序imo简单得多。这在很大程度上是因为虚拟机是基于堆栈的,所以所有东西都会进入堆栈,并且没有要跟踪的寄存器。
此外,没有偏移量计算,没有直接的内存操作,方法调用使用其.NET名称列出,等等。我猜,如果你对任何其他种类的汇编语言有一点经验,你可能很快就能掌握CIL代码的要点。
就我个人而言,我发现能够启动ILDasm或Reflector来查看C#编译器为某段代码实际生成的IL是非常有用的。对于许多较新的特性,如匿名委托/lambda、捕获变量、迭代器等,检查IL可能非常有用。
其他人也提到了好书,我只会投票给Serge Lidin的Expert .NET 2.0IL assembler。它有所有血淋淋的细节。如果你想要更接近C#的东西,Jeffrey Ricther通过C#的CLR是很好的选择。Jon Skeet的书很棒,但它并没有真正涵盖CIL。
https://stackoverflow.com/questions/537986
复制相似问题