• 元数据概述


    元数据是由几个表构成的二进制数据块。有三种表,分别是定义表(definition table)、引用表(reference table)和清单表(manifest table)

    1,常用的元数据定义表

    元数据定义名称

    说明

    ModuleDef

    总是包含对模块进行标识的一个记录项;

    包含:模块文件名,扩展名(不含路径),模块版本ID(编译器创建的GUID

    TypeDef

    模块定义的每个类型在这个表中都有一个记录项;

    包含:类型的名称,基类型,标志(public等),索引(索引指向MethodDef表中该类型的方法,FieldDef表中该类型的字段,PropertyDef表中该类型的属性,EventDef表中该类型的事件)

    MethodDef

    模块定义的每个方法在这个保重都有一个记录项;

    包含:方法的名称,标志,签名,方法的IL代码在模块中的偏移量。每个记录项还引用了ParamDef表中的一个记录项,后者包括与方法参数有关的更多信息

    FieldDef

    模块定义了每个字段在这个表中都有一个记录项;

    包含:标志,类型,名称

    ParamDef

    模块定义的每个参数在这个表中都有一个记录项;

    包含:标志(inoutretval等),类型,名称

    PropertyDef

    模块定义的每个属性在这个表中都有一个记录项;

    包含:标志,类型,名称

    EventDef

    模块定义的每个事件在这个表中都有一个记录项;

    包括:标志,名称

    2,常用的引用元数据表

    引用元数据的名称

    说明

    AssemblyRef

    模块引用的每个程序集在这个表中都有一个记录项;

    包含:程序集名(不包含路径和扩展名),版本号,语言文化,公钥token,标志(flag),哈希值

    ModuleRef

    实现该模块所引用的类型的的每个PE模块在这个表中都有一个记录项;

    包含:模块的文件名,扩展名(不含路径)

    TypeRef

    模块引用的每个类型在这个表中都有一个记录项;

    包含:类型的名称,一个引用(指向类型的位置)

    MemberRef

    模块引用的每个成员(字段和方法以及属性方法和事件方法)在这个表中都有一个记录项;

    包含:成员的名称,签名,并指向对成员进行定义的那个类型的TypeRef记录项

     

    3,清单元数据表

    清单元数据表名称

    说明

    AssemblyDef

    如果模块标识的是程序集,这个元数据表就包含单一记录项来列出程序集名称(不含路径和扩展名),版本(majorminorbuildrevision),语言文化(culture),一些标志(flag),哈希算法以及发布者公钥(可为null

    FieldDef

    作为程序集一部分的每个PE文件和资源文件在这个表中都有一个记录项(清单本身所在的文件除外,该文件在AssemplyDef表的单一记录项中列出);

    包含:文件名,扩展名(不含路径),哈希值和一些标志(flags);

    如果程序集只包含它自己的文件,FileDef表将无记录

    ManifestResourceDef

    作为程序集一部分的每个资源在这个表中都有一个记录项;

    包含:资源名称,标志,FileDef表的一个索引,偏移量(指出资源在PE文件中的起始位置)

    ExportedTypesDef

    从程序集的所有PE模块中导出的每个public类型在这个表中都有一个记录项;

    包含:类型名称,FileDef表的一个索引,TypeDef表的一个索引

    4,利用ILDasm.exe查看元数据

    视图-》元信息-》显示

    学习永不止境,技术成就梦想。
  • 相关阅读:
    高德地图API,获取和设置zoom级别和中心点
    高德地图API注册使用教程简答演示
    HTML5 视频流行插件之video.js
    audio实现自定义音频播放器
    HTML5 audio API事件
    HTML5之audio属性
    GitLab的安装及使用教程
    设计模式六大原则(PHP)
    面向对象设计
    自定义的异常类
  • 原文地址:https://www.cnblogs.com/zd1994/p/6368356.html
Copyright © 2020-2023  润新知