一个托管的PE文件包含4个部分:PE表头,CLR表头,元数据,IL代码。
PE表头是Windows操作系统要求的标准信息,主要时指出了文件的类型,GUI、CUI或是DLL(不同于以前的Dynamic Link Library,特指程序集文件的一种形式)。
CLR表头专门用于那些需要CLR才能运行的托管模块。CLR表头中包含和托管模块一起创建的元数据的主版本号和次版本号,一些标记,如果模块是GUI或CUI,可执行文件还有一个标识入口点方法的MethodDef标记,以及一个可选的强命名数字签名。最后该表头中还包括模块内某些元数据表的大小和偏移量。
元数据是一个非常重要的概念,他实际上是一个二进制数据块。元数据中包含了一些表,这些表被划分为三大类:定义表、引用表和清单表。定义表包含了程序中的模块、方法、类型、字段、变量、属性、事件等等一切相关的定义信息,而引用表则记录了程序引用的程序集、方法、类型等的信息。清单表与Assembly运行相关。
大家可以通过ILDasm来打开一个托管模块的元数据清单。在命令行中键入ILDasm /Adv App.exe来打开一个名为App.exe托管程序,在ILDasm的可视化界面中点击菜单--〉试图--〉元数据--〉显示就可以看到ILDasm处理过的元数据清单。
IL代码,源程序被编译后成为中间语言代码,在ILDasm中也可以看到程序的IL代码。
现在没有解决的就是Assembly相关的一些概念了。
下回再写