dex文件结构分析-3

来源:互联网 发布:国家进出口数据 编辑:程序博客网 时间:2024/06/06 02:40

转载请标明出处: 

http://www.dusherry.com/?id=6;

按书上说的Dalvik虚拟机解析dex文件的内容,最终将其映射成DexMapList数据 结构,DexHeader的mapOff字段指明了DexMapList结构在dex文件中的偏移。

按刚给的例子,它的偏移值为0x33adc。

 

结构体申明如下:

Struct DexMapList{

u4 Size;                     //DexMapItem的个数

DexMapItem list[1];             

}

Struct DexMapItem{

u2 type;                  //KDexType开头的类型

u2 unused;               //未使用,主要用于字节对齐

u4 size;                  //指定类型的个数

u4 offset;                //指定类型文件的偏移

}

其中type字段是一个枚举常量,通过名称很容易判断它的具体类型。

enum{

 

KDexTypeHeaderItem

=0x0000,

KDexTypeStringItem

=0x0001,

KDexTypeTypeIdItem 

=0x0002,

KDexTypeProtoIdItem

=0x0003,

KDexTypeFieldIdItem

=0x0004,

KDexTypemMethodIdItem

=0x0005,

KDexTypeClassDefItem

=0x0006,

KDexTypeMapList

=0x1000,

KDexTypeTypeList

=0x1001,

KDexTypeAnnotationSetRefList

=0x1002,

KDexTypeAnnotationSetItem

=0x1003,

KDexTypeClassDataItem

=0x2000,

KDexTypeCodeItem

=0x2001,

KDexTypeStringDataItem

=0x2002,

KDexTypeDebugInfoItem

=0x2003,

KDexTypeAnnotationItem

=0x2004,

KDexTypeEncodedArrayItem

=0x2005,

KDexTypeAnnotationDirectoryItem

=0x2006,

}

 

 



 

对比DexHeader部分,KDexTypeHeaderItem描述了整个DexHeader结构,而接下来的KDexTypeStringItem到KDexTypeClassDefItem与Dexheader当中对应的类型类型个数和文件偏移是相同的。


0x33acc为DexMapList的起始地址。根据定义的数据结构可以发现kDexTypeHeaderItem为0的文件偏移为0,也就是DexHeader头的文件偏移为0.


0 0
原创粉丝点击