dex文件分析-8
来源:互联网 发布:合肥淘宝兼职 编辑:程序博客网 时间:2024/05/24 04:06
原博客地址:http://www.dusherry.com/
DexClassDef
结构体申明如下
struct DexClassDef{
u4 classIdx; //类的类型,指向DexTypeId列表的索引
u4 accessFlags; //访问标志
u4 superclassIdx; //父类类型,指向DexTypeId列表的索引
u4 interfacesOff; //接口,指向DexTypeList的偏移
u4 sourceFieldIdx; //源文件名,指向DexStringId列表的索引
u4 annotationsOff; // 注解,指DexAnnotationsDirectoryItem结构
u4 classDataOff; //指向DexClassData结构的偏移
u4 staticValuesOff; //指向DexEncodeArray结构的偏移,记录了类中的静态数据
}
从图中可以看出有0x352个DexClassDef结构体,第一个DexClassDef结构体的偏移为0x2A6D4.
classIdx=0x9f
accessFlags=0x2601
superclassIdx=0x4B3
interfacesOff=0x36014 ,指向这个类实现的接口类型。
……
classDataOff=0x000000,代表这个类中没数据。实际这里面就是android.support.annotation.AnimRes这个类,这个类里面的确没数据。
省略的几个含义已经在结构体注释中说明。
现在重点分析一下DexClassData结构,它是类中的数据部分。定义在DexClass.h文件中
DexClassData结构的申明如下
struct DexClassData{
DexClassDataHeader header; //指定字段和方法的个数
DexField * staticFields; //静态字段
DexField * instanceFields; //实例字段
DexMethod* directMethods; //直接方法
DexMethod* virtualMethods; //虚方法
}
DexClassDataHeader 结构记录了当前类中字段与方法的数目,它的申明如下:
struct DexClassDataHeader{
u4 staticFiledsSize;静态字段个数
u4 instanceFieldsSize;实例字段个数
u4 directMethodsSize; 直接方法个数
u4 virtualMrthodsSize; 虚方法个数
}
实际上这里面的u4只是在解析dex文件时在内存的数据类型,实际u4的字段类型是uleb128类型,这样可以减少dex文件的大小。
DexField 结构描述了类的字段类型与访问标志,它的结构体申明如下
struct DexField{
u4 fieldIdx; //指向DexFieldId的索引
u4 accessFlags; //访问标志
}
DexMethod{
u4 methodIdx; //指向DexMethodId的索引
u4 accessFlags //访问标志
u4 codeOff;//指向DexCode结构的偏移
}
最重要的结构出现了,codeOff指向了一个DexCode结构体,这个里面就详细描述了方法中的指令的内容,之前所有的就是各种字符串啊。
DexCode结构申明如下:
struct DexCode{
u2 registersSize; //使用的寄存器个数
u2 insSize; //参数个数
u2 outsSize; //调用其它方法时使用的寄存器个数
u4 debugInfoOff ;//指向调试信息的偏移
u4 insnsSize;//指令集个数,以2字节为单位
u2 insns[1];//指令集
}
到这里,dex分析差不多告一段路了,还有很多比较具体的东西还没分析,比如指令集的结构等等,希望以后有时间复习。- dex文件分析-8
- dex文件分析-6
- dex文件分析-7
- Dex文件结构分析-1
- dex文件结构分析-2
- dex文件结构分析-3
- dex文件结构分析-4
- dex文件结构分析-5
- Android DEX 文件打开分析
- Dex文件头及解析机制分析
- dx 生成 DEX文件流程分析
- Android动态加载DEX文件流程分析
- Dalvik指令分析(二) 从java文件到dex
- Dalvik指令分析(三) dex文件的结构
- Android中的ClassLoader与dex文件加密实现分析
- Android中的ClassLoader与dex文件加密实现分析
- 用dex分析mongodb
- DEX加密效果分析
- plsql 实现md5
- android的问号?和@符号的含义
- SQL游标语法及举例
- int b[m][n]和int **b——关于数组名和指针的关系这件“小事”
- Oracle Merge into详细介绍
- dex文件分析-8
- HBase Master 解析
- java collection 之用法,登陆注册功能的实现
- boost库之property tree库,解析JSON、XML、INI等
- gstreamer插件工作原理与流程分析
- CodeForces 556A
- adfs
- NSMutableString 可变字符串
- shell调试选项