Dex文件解析结构主要分为八个部分
DexHeader :
1.magic标识信息
2.checksum adler32 检验dex内容完整
3.signnature SHA1签名值
4.filesize文件总大小
5.header size文件头大小
6.endian_tag 安卓一般为小端
7.link_size 为0非静态链接 8.link_off linkSection对应偏移 以下内容size为数量 off为偏移量
8.关键量解释 map:MapItem type:类型列表 proto:声明列表 data:数据段大小
DexStringId
1.Value对应字符串数量 索引由0开始
2.data对应字符串 off对应字符串偏移 size字符串大小
DexTypeId
1.Dex存放的所有类型 包含DexString的index
DexProtoId
1.描述方法的原型,方法返回值类型与方法参数
2.returnTypeId 描述方法返回值类型 parameters_off 结构体偏移
3.list parameters 存放参数列表的结构体 包含数量和类型
DexFieldId
1.class :字段所在的类路径
2.type :字段的类型
3.name:字段名称
4.头部包含字段数量,偏移,大小
DexMethodId
1.包含三要素 方法所在的类 方法名 方法源文件
DexClassDef
1.类定义
2.关键字 class 类的类型 flags类访问修饰符 super父类 interfaces接口 source源文件
3.data_item 类中包含的信息 static 静态字段 instance 实例字段 direct直接方法 virtual 虚方法
4.下来是对字段方法的解析,codeOff偏移地址 codeitem方法的逻辑代码
DEXmapList
1.包含数组个数,数组的定义枚举量,属性。
Dex加载方法
1.解释器解释执行
2.二进制执行
3.Native指针



