托管程序的编译过程如下图所示 ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
其中MSIL(Microsoft 中间语言)起到了承上启下的作用,它介于源代码(Source Code)和机器代码(MachineCode)之间,因为MS或者其他组织为我们提供了从源代码到MSIL的编译器,所以我们能将C#,VB,J#,C++,JS等等高级语言的源程序清单编译成为MSIL,而MSIL代码无法直接运行,必须根据特定的CPU指令,通过JIT(实时编译器)将MSIL代码编译成为机器代码。这样就完成了对机器代码和高级语言之间的隔离。使得各种编程语言都能在CLR下得以统一的实现。 ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
涉及到的基础知识比较多,难以赘述,先通过最简单的程序来认识一下MSIL吧。 ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
用C#编写下面的程序  ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
using System;ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
using System.Collections.Generic;ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
using System.Text;ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
namespace Lesson1ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
{ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
   
class Programƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
   
{ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
       
staticƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
void Main(string[] args)ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
       
{ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
            Console.WriteLine(
"Hello World!");ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
            Console.Read();ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
        }
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
    }
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
}
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
生成该代码Lesson1.exe,在.net framework中,提供了两个工具: ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
  • MSIL 汇编程序 (Ilasm.exe) 该工具能将MSIL代码生成可移植可执行的(PE)文件
  • MSIL反汇编程序(Ildasm.exe) 该工具能将可执行PE反汇编成为MSIL代码
下面就与Ildasm.exe来将可执行的Lesson1.exe文件反汇编成为包含MSIL代码的Lesson1.il的。方式为,通过SDK命令提示,如下图所示执行ildasm工具 ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
就会在Lesson1.exe的同一目录产生一个包含着MSIL的Lesson1.il文件,打开该文件,文件如下:  ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
/Files/jillzhang/Lesson1.rarƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’
ƒ['²7 ‘å<www.netcsharp.cn]i[¨HPwêC’