DexHeader

magic: 标志这是个dex文件,如果它是合法的则值为:dex.035

checksum:整个dex文件的校验和,可以用来判断dex文件是否损坏或被篡改

signture:SHA-1散列值

fileSize:整个文件大小
DEX文件格式
1897336的十六进制是:1cf378
DEX文件格式
DEX文件格式

headerSize:DexHeader结构的大小

endianTag:字段指定了DEX运行环境的CPU字节序, 预设值为0x12345678,默认采用小端字节序

stringIdsOff:DexStringId的偏移,表面DexStringId从00 00 00 70开始。
DEX文件格式

stringIdsSize:DexStringIds的文件个数,并不是指它的大小
DEX文件格式
(DexHeader剩下的信息个上面这个意思一样,就不做多解释了)


DexStringIds

(存放字符串)

点击任意一条
DEX文件格式
string_data_off:表面字符串的偏移(起始地址)
string_data:直接跳到字符串的偏移地址,value是字符串值。

选择其中一条数据:after
DEX文件格式
首先是是07表示这个字符串的长度,然后最后的00用来分割


DexTypeId

它所对应的字符串代表具体类的类型。
DEX文件格式
这里的0x4ce换成16进制为1230.表面“B”在DexStringIds列表中的第1230个是“B”。


DexProtoIds

存放函数的定义

shortyIds:指向DexStringId列表的索引
returnTypeIdx:指向DexTypeId列表的索引
parametersOff:指向DexTypeList的偏移量
DEX文件格式

parameters的values代表该函数的参数,size表示参数的个数,type_ids表示在DexTypeId列表的第1个


DexFileId

classIdx:类的类型,指向DexTypeId的列表的索引
typeIdx:字段类型,指向DexTypeId的列表索引
nameIdx:字段名,指向DexStringId列表的索引


DexMethodId

classIdx:类的类型,指向DexTypeId的列表的索引
protoIdx:声明类型,指向DexProtoId的列表索引
nameIdx:方法名,指向DexStringId列表的索引


DexClassDef

classIdx:类的类型,指向DexTypeId列表的索引
accessFlags:访问标志
superclassIdx:父类的类型,指向DexTypeId列表的索引
interfacesOff:接口,指向DexTypeList的偏移量
soureFileIdx:源文件名,指向DexStringId列表的索引
annotationsOff:注解,指向DexClassData结构的偏移量
classDataOff:指向DexClassData结构的偏移量
staticValuesOff:指向DexEncodedArray结构的偏移量

DexClassData

DexClassDataHeader:指定字段与方法的个数
staticFields:静态字段,DexField结构
instanceFields:实例字段,DexField结构
directMethods:直接方法,DexMehods结构
virtualMethods:虚方法,DexMehods结构

DexClassData

staticFieldsSize:静态字段个数
instanceFieldsSize:实例字段个数
directMethodsSize:直接方法个数
virtualMethodsSize:虚方法个数

DexField

filedidx:指向DexFiledid的索引
accessFlags:访问标志

DexMehod

methodidx:指向DexMethodid的索引
accessFlags:访问标志
codeOff:指向DexCode结构的偏移,本method的实现

DexCode

registersSize:使用寄存器个数
insSize:参数个数
outsSize:调用其他方法时使用的寄存器个数
triesSize:try/catch个数
debuginfoOff:指令调试信息的偏移
insns[1]:指令集
padding:optional
try_item tries[triesSize];:optional
encode_catch_handler_list_handlers;:optional


相关文章: