-
-
移动安全学习笔记(四)
-
发表于: 2023-2-16 11:51 22997
-
Dex文件的整体结构如下,文件头指定了一些属性,索引区记录着一些偏移和索引,数据区用于存放真正所需要的数据。
字符串表项,是一个字符串数据的偏移,偏移指向的是一个 string_data 结构
string_data结构中有两个字段:
字段1:代表长度,数据类型是 uleb128(变长的数据类型 1-5 个字节)
储存数据,字符串以 0 结尾
类型表表项,是一个索引值,类型描述符字符串在字符串表中的索引,索引是1则表示在字符串表中的数组索引1中的元素。类型描述符包括基本数据类型的描述符和类类型的描述符。
原型表项中存储的是函数原型的各部分描述信息。包括短类型(shorty_idx)、返回类型(return_type_idx)、参数的类型(parameters_off,最终还是一个指向字符串表的数组下标)。
注意:字段为返回类型(return_type_idx)的值,是类型表中的索引。
字段表项中内容存储的是字段的信息。包括字段所在类(class_idx)、字段的类型(type_idx)、字段的名称(name_idx),class_idx是类型表中的索引,type_idx是类型表中的索引,字段名称的索引是字符串表的数组下标。
方法表项中存储的是方法的信息,包括方法所在的类(class_ idx)、方法的原型(proto_idx)、方法的名称(name _idx),其中class_idx是类型表中的索引,proto_idx是在原型表中的索引,方法名称的索引(name_idx)是字符串表的数组下标。
类数据是一个数组,每一个元素就是一个类的相关信息。在表项中的class_data中存储的是类数据,包括类名索引、访问属性、父类索引、接口偏移源码索引、注解偏移、类数据偏移。
特点:变长,(1-5字节),每一个字节最高位表示标志位, 可以理解为是是否下一字节有数据。
范围:整型,最大表示一个32位的无符号数据
举例:
整型数据:16进制:0x180
二进制:0000 0001 1000 0000
小端方式二进制:1000 0000 0000 0001
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
- [原创]Pixel6 降级记录 3913
- [原创]AndroidManifest 二进制解析笔记 13654
- [原创] Android 签名对抗攻略 14729
- Android10 内核编译笔记 16606
- Android 源码编译 7759