dex结构
2020-09-09 14:59:34 2 举报
AI智能生成
dex结构
作者其他创作
大纲/内容
dex
u1 magic[8]; dex版本标识
u4 checksum; adler32检验
u4 fileSize; 整个文件大小
u4 headerSize; DexHeader结构大小
u1 signature[kSHA1DigestLen]; <br>SHA-1哈希值
u4 typeIdsSize; DexTypeId的个数
u4 protoIdsSize; DexProtoId的个数
u4 fieldIdsSize; DexFieldId的个数
u4 endianTag; 字节序标记
u4 linkSize; 连接段大小
u4 classDefsSize; DexClassDef的个数
u4 stringIdsSize; DexStringId的个数
u4 dataSize; 数据段的大小
u4 mapOff; DexMapList的文件偏移
u4 linkOff; 连接段偏移,off都是偏移
u4 stringIdsOff;
u4 stringDataOff
+基址得到一个mutf-8的字符串
DexStringId[0]DexStringId[...]DexStringId[n]
u4 typeIdsOff;
+baseaddr得到DexTypeId(类型结构体)列表起始地址
u4 descriptorIdx;
指向DexStringid列表索引(n)
DexTypeId[0]DexTypeId[...]DexTypeId[n]
u4 protoIdsOff;
+baseaddr得到DexProtoId方法声明结构体
u4 shortyIdx;
指向DexStringId列表索引
u4 returnTypeIdx;
指向DexTypeId列表的索引
u4 parametersOff;
指向DexTypeList的偏移
DexTypeList
u4 size; DexTypeItem的个数
DexTypeItem list[1];DexTypeItem 列表起始地址
u2 typeIdx; 指向DexTypeId列表的索引
DexProtoId[0]DexProtoId[...]DexProtoId[n]
u4 fieldIdsOff;
u2 classIdx;
类的类型,指向DexTypeId列表的索引
u2 typeIdx;
字段的类型,指向DexTypeId列表的索引
u4 nameIdx;
字段名,指向DexStringId列表的索引
u4 methodIdOff;
DexMethodId方法结构体,列表分布同上
u2 ProtoIdx;
声明类型,指向DexProtoId列表的索引
方法名,指向DexStringId列表的索引
u4 classDefsOff;
DexClassDef 类结构体,列表分布同上
u4 classIdx;
类的类型,指向DexTypeId列表索引
u4 accessFlags;
访问标识
u4 superclassIdx;
父类类型,指向DexTypeId的偏移
u4 interfacesOff;
接口,指向DexTypeList的偏移
u4 SourceFileIdx;
源文件名,指向DexStringId列表的索引
u4 annotationsOff;
注解,指向DexAnnotationDirectoryItem的结构
u4 classDataOff;
指向DexClassData结构的偏移
DexClassData
DexClassDataHeader header; 指定字段与方法的个数
DexClassDataHeader
u4 staticFieldsSize; 静态字段个数
u4 instanceFieldsSize; 实例字段个数
u4 directMethodsSize; 直接方法的个数
u4 virtualMethodsSize; 虚方法的个数
DexField*staticFields; 静态字段DexFieId结构
Dexfield
u4 fieldIdx; 指向DexFieldId的索引
u4 accessFlags; 访问标识
0x000000010x000000020x000000040x000000080x000000100x000000200x000000200x000000400x000000400x000000800x000000800x000001000x000002000x000004000x000008000x000010000x000020000x000040000x000100000x00020000
\"public\
DexField* instanceFields; 实例字段DexField结构
DexMethod* directMethods; 直接方法 DexMethod结构
DexMethod
u4 methodIdx; 指向DexMethodId的索引
u4 accessFalgs; 访问标识
u4 codeOff; 指向DexCode结构的偏移
DexCode
u2 registersSize; 使用寄存器的个数
u2 inSize; 参数个数
u2 outsSize; 调用其他方法时使用的寄存器个数
u2 triesSize; tryCatch个数
u4 debugInfoOff; 指向调试信息的偏移
u4 InsnsSize; 指令集个数以2字节为单位
u2 Insns[1]; 指令集
DexMethod* virtualMethods; 虚方法 DexMethod结构
u4 staticValuesOff;
指向DexEncodedArry结构的偏移,类中静态数据
0 条评论
下一页