文章分类 - MSIL
摘要:-4-关键字和操作符位于return语句之后的代码是不会被执行的。在下面给出的第1个程序中,你将发现在C#中有一个WriteLine函数调用,但是在我们的IL代码中却看不到。这是因为编译器意识到任何return之后的语句都不会被执行,从而,也就不用将其转换到IL中了。a.csclass zzz{public static void Main(){return;System.Console.WriteLine("hi");}}a.il.assembly mukhi {}.class private auto ansi zzz extends System.Object{.me
阅读全文
摘要:-3-在IL中,标号(label)是一个末尾带有冒号(即:)的名称。它使我们能够从代码的一部分无条件地跳转到另一部分。我们经常在由反编译器生成的IL代码中看到这个标号。例如:IL_0000:ldstr "hi"IL_0005:call void [mscorlib]System.Console::WriteLine(class System.String)IL_000a:call void zzz::abc()IL_000f:ret 在冒号前面的词就是标号。在下面给出的程序中,我们在函数abc中创建一个名为a2的标号。指令br用于随时跳转到程序中的任何标号。a.il.ass
阅读全文
摘要:如果你真的想要理解C#代码,那么最好的方法就是通过理解由C#编译器生成的代码。本章和下面两章将关注于此,请相信我们。 因此,我们将用一个小的C#程序揭露并解释有编译器生成的IL代码。通过这样做,我们就可以“一箭双雕”了:首先,我们将能够揭开IL的神秘,其次我们将更直观地理解C#编程语言。 我们将首先向你展示一个.cs文件,并随后由C#编译器用IL编写一个程序。它的输出将和cs文件是相同的。输出将会显示IL代码。这会增强我们对C#和IL的理解。因此,不再啰嗦,让我们冒险尝试。a.csclasszzz{publicstaticvoidMain(){System.Console.WriteLine(
阅读全文
摘要:-1- 我们用C#、VB.NET语言编写的代码最终都会被编译成程序集或IL。因此用VB.NET编写的代码可以在C#中修改,随后在COBOL中使用。因此,理解IL是非常有必要的。 一旦熟悉了IL,理解.NET技术就不会有障碍了,因为所有的.NET语言都会编译为IL。IL是一门中性语言。IL是先发明的,随后才有了C#、VB.NET等语言。 我们将在一个短而精辟的程序中展示IL。我们还假设读者至少熟悉一门.NET语言。a.il.methodvoidvijay(){} 随后,我们用IL编写了一个非常短小的IL程序——它显然是不能工作的,并将它命名为a.il。那么我们怎么才能把它编译为一个可执行程序呢?
阅读全文