初識,Dex文件結(jié)構(gòu):
1.dex文件中的數(shù)據(jù)結(jié)構(gòu)
u1/uint8_t=>表示1字節(jié)的無符號數(shù)
u2/uint16_t=>表示2字節(jié)的無符號數(shù)
u4/uint32_t=>表示4字節(jié)的無符號數(shù)
u8/unit64_t=>表示8字節(jié)的無符號數(shù)
sleb128=>有符號leb128,可變長度為1-5字節(jié)
uleb128=>無符號符號leb128嗜傅,可變長度為1-5字節(jié)
uleb128p1=>無符號leb128值加1葵腹,可變長度為1-5字節(jié)
2.dex文件整體結(jié)構(gòu)
struct DexFile {
DexHeader
DexStringId
DexTypeId
DexProtoId//對DexType進(jìn)一步說明
DexFieldId
DexMethodId
DexClassDef
DexData
DexLink
}
以索引為線索
3.DEX的內(nèi)存映射
與靜態(tài)類似歉摧,只是變?yōu)閤xxItem結(jié)構(gòu)
ClassObject結(jié)構(gòu)由六個部分組成:
PDvmDex:// DEX文件字段
super://超類
sfields://對應(yīng)DexClassData結(jié)構(gòu)中的staticFields靜態(tài)字段
iFields://對應(yīng)DexClassData結(jié)構(gòu)中的instanceFields實例字段
directMethods://對應(yīng)DexClassData結(jié)構(gòu)中的directMethods直接方法字段
virtualMethods:///對應(yīng)DexClassData結(jié)構(gòu)中的virtualMethods虛方法字段
DexClassDef : class_def_item
DexClassData: class_data_item
DexFiled(staticFields): sfileds
DexFiled(instanceFields): ifileds
DexMethod(directMethods):directMethods
DexMethod(virtualMethods):virtualMethods
DexCode: code_item