Fork me on GitHub

元数据概述

元数据是由几个表构成的二进制数据块。有三种表,分别是定义表(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查看元数据

视图-》元信息-》显示

 

posted on 2017-02-05 19:11  *Hunter  阅读(737)  评论(0编辑  收藏  举报

导航

AmazingCounters.com