DexHeader
magic: 标志这是个dex文件,如果它是合法的则值为:dex.035
checksum:整个dex文件的校验和,可以用来判断dex文件是否损坏或被篡改
signture:SHA-1散列值
fileSize:整个文件大小
1897336的十六进制是:1cf378
headerSize:DexHeader结构的大小
endianTag:字段指定了DEX运行环境的CPU字节序, 预设值为0x12345678,默认采用小端字节序
stringIdsOff:DexStringId的偏移,表面DexStringId从00 00 00 70开始。
stringIdsSize:DexStringIds的文件个数,并不是指它的大小
(DexHeader剩下的信息个上面这个意思一样,就不做多解释了)
DexStringIds
(存放字符串)
点击任意一条
string_data_off:表面字符串的偏移(起始地址)
string_data:直接跳到字符串的偏移地址,value是字符串值。
选择其中一条数据:after
首先是是07表示这个字符串的长度,然后最后的00用来分割
DexTypeId
它所对应的字符串代表具体类的类型。
这里的0x4ce换成16进制为1230.表面“B”在DexStringIds列表中的第1230个是“B”。
DexProtoIds
存放函数的定义
shortyIds:指向DexStringId列表的索引
returnTypeIdx:指向DexTypeId列表的索引
parametersOff:指向DexTypeList的偏移量
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