zoukankan      html  css  js  c++  java
  • 托管模块的组成

    1.PE32 或 PE32+头s

        标准WindowsPE文件头,类似于“公共对象文件格式(CommonObjectFileFormat,COFF)”头。如果这个头使用PE32格式,文件能在Windows的32位或64位版本上运行。如果这个头使用PE32+格式,文件只能在Windows的64位版本上运行。这个头还标识了文件类型,包括GUI,CUI或者DLL,并包含一个时间标记来指出文件的生成时间。对于只包含IL代码的模块,PE32(+)头的大多数信息会被忽视。对于包含本地CPU代码的模块,这个头包含了与本地CPU代码有关的信息。

    2.CLR 头

      包含使这个模块成为一个托管模块的信息(可由CLR和一些实用程序进行解释)。头中包含了需要的CLR版本,一些flag,托管模块入口方法(Main方法)的MethodDef元数据token,以及模块的元数据、资源、强名称、一些flag以及其他不太重要的数据项的位置/大小。

    3.元数据

    每个托管模块都包含元数据表。主要有两种类型的表:一种类型的表描述源代码中定义的类型和成员,另一种类型的表描述源代码引用的类型和成员。

     (metadata)是一组数据表。其中一些数据表描述了模块中定义的内容,比如类型及其成员。还有一些元数据表描述了托管模块引用的内容,比如导入的类型及其成员。元数据是一些老技术的超集。这些老技术包括COM的“类型库(TypeLibrary)”和“接口定义语言(InterfaceDefinitionLanguage,IDL)”文件。要注意的是,CLR元数据远比它们完整。另外,和类型库及IDL不同,元数据总是与包含IL代码的文件关联。 
    事实上,元数据总是嵌入和代码相同的EXE/DLL文件中,这使两者密不可分。由于编译器同时生成元数据和代码,把它们绑定一起,并嵌入最终生成的托管模块,所以元数据和它描述的IL代码永远不会失去同步。
    元数据有多种用途,下面仅列举一部分。 
    编译时,元数据消除了对本地C/C++头和库文件的需求,因为在负责实现类型/成员的IL代码文件中,已包含和引用的类型/成员有关的全部信息。编译器可直接从托管模块读取元数据。 
    MicrosoftVisualStudio使用元数据帮助你写代码。它的“智能感知(IntelliSense)”技术可以解析元数据,指出一个类型提供了哪些方法、属性、事件和字段。如果是一个方法,还能指出方法需要什么参数。 
    CLR的代码验证过程使用元数据确保代码只执行“类型安全”的操作。(稍后就会讲到验证。)。 
    元数据允许将一个对象的字段序列化到一个内存块中,将其发送给另一台机器,然后反序列化,在远程机器上重建对象的状态。 
    元数据允许垃圾回收器跟踪对象的生存期。垃圾回收器能判断任何对象的类型,并从元数据知道那个对象中的哪些字段引用了其他对象。

    4.IL(中间语言)代码

    编译器编译源代码时生成的代码。在运行时,CLR将IL编译成本地CPU指令

     

     

  • 相关阅读:
    Struct2_使用Ajax调用Action方法并返回值
    Eclipse使用maven创建struct2项目及遇到的各种坑
    IIS7.5 提示未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序
    使用Canvas实现下雪功能
    基于脚本的动画的计时控制(“requestAnimationFrame”)(转)
    pointer-events属性
    chrome Provisional headers are shown错误提示
    Wcf资料收集
    Asp.Net WebApi 启用CORS跨域访问指定多个域名
    Cors 跨域Access-Control-Allow-Origin
  • 原文地址:https://www.cnblogs.com/shenfengok/p/2171879.html
Copyright © 2011-2022 走看看