Android Dex文件格式简介
来源:互联网 发布:杜兰特夺冠知乎 编辑:程序博客网 时间:2024/04/29 22:40
DEX格式
Dex保存了一组类及其关联的附件数据
数据类型
小端序 低字节存储在最低的内存地址处
大端序 高字节存储在最低的内存地址处
LEB128
LEB128(“Little-Endian Base 128”)是用于任意带符号或无符号整数的可变长度编码。 该格式借鉴了DWARF3规范。 在.dex文件中,LEB128仅用于编码32位整形数。
每个LEB128编码值由一到五个字节组成,它们一起表示一个32位的值。 每个字节的最高有效位除序列中的最后一个字节外,其最高有效位零。 每个字节的剩余7位是有效载荷,第一个字节中的数量最低有效7位,第二个字节中的下一个七位,依此类推。 在带符号LEB128(sleb128)的情况下,序列中最后一个字节的最重要的有效负载符号扩展以产生最终值。 在无符号情况下(uleb128),任何未明确表示的位都被解释为0。
示例
编码的每个字节有效部分只有低7bits,每个字节的最高bit用来指示是否是最后一个字节。1表示还有后续字节,0表示结束
用LEB128编码的正数,会根据数字的大小改变所占字节数。
Dex文件布局
4字节或单字节对齐
魔数(Dex035)
checksum(除魔数和此字段的剩余文件部分的adler32校验和)
signature(除魔数、校验和以及此字段剩余文件内容的SHA-1 hash值)
file_size(文件大小)
header_size(头部块大小)
endian_tag(指示文件的字节顺序)
…
后面各个表对应的大小和偏移量
头部大小固定为0x70 string_ids string_id_item[] 字符串标识符列表。 这些是用于该文件的所有字符串的标识符,用于内部命名(例如,类型描述符)或由代码引用的常量对象。 此列表必须按字符串内容排序,使用UTF-16代码点值(不是以区域设置敏感方式),并且不得包含任何重复的条目。 type_ids type_id_item[] 类型标识符列表。 这些是由该文件引用的所有类型(类,数组或原始类型)的标识符,无论是否在文件中定义。 此列表必须由string_id索引排序,并且不得包含任何重复的条目。 proto_ids proto_id_item[] 方法原型标识符列表。 这些是此文件引用的所有原型的标识符。 此列表必须按返回类型(按type_id索引)主顺序排序,然后通过参数列表(字典排序,由type_id索引排序的各个参数)进行排序。 列表不能包含任何重复的条目。 field_ids field_id_item[] 字段标识符列表。 这些是由该文件引用的所有字段的标识符,无论是否在文件中定义。 此列表必须排序,其中定义类型(按type_id索引)是主要顺序,字段名称(通过string_id索引)是中间顺序,类型(按type_id索引)是次要顺序。 列表不能包含任何重复的条目。 method_ids method_id_item[] 方法标识符列表。 这些是由该文件引用的所有方法的标识符,无论是否在文件中定义。 该列表必须进行排序,其中定义类型(按type_id索引)是主要顺序,方法名称(通过string_id索引)是中间顺序,方法原型(通过proto_id索引)是次要顺序。 列表不能包含任何重复的条目。 class_defs class_def_item[] 类定义列表。 必须对这些类进行排序,使得给定类的超类和实现的接口出现在引用类之前的列表中。 此外,对于同名类的定义在列表中不止一次出现是无效的。 call_site_ids method_handle_item[] 方法处理列表。 该文件所引用的所有方法句柄的列表,无论是否在文件中定义。 此列表未排序,并且可能包含将在逻辑上对应于不同方法句柄实例的重复项。 data ubyte[] 数据区,包含上表列出的所有支持数据。 不同的项目具有不同的对齐要求,并且如果需要,在每个项目之前插入填充字节以实现正确的对准。 link_data ubyte[] 静态链接文件中使用的数据。 本节中的数据格式未经本文档的说明。 此部分在未链接的文件中为空,运行时实现可能会使用它们,因为它们是合适的。
class_def_item示例
更详细的说明参考:
官方解释
中文博客解释
0 0
- Android Dex文件格式简介
- Android DEX 文件格式
- Android Dex文件格式解析
- Android Dex文件格式解析
- Android Dex文件格式解析
- Android Dex文件格式
- android之DEX文件格式
- Android Dex文件格式解析
- Android培训班(60)dex文件格式
- Android 虚拟机 — .dex 文件格式
- Dex文件格式
- dex文件格式
- DEX文件格式
- dex文件格式
- DEX文件格式
- Dex文件格式
- Dex文件格式
- Android培训班(61)dex文件格式2
- C# NPOI 导出excel
- 3月学习日志
- linux下对sh文件的基本操作总结
- 无法获得锁 /var/lib/dpkg/lock
- 创建数据库文件-日志文件-次要数据库文件
- Android Dex文件格式简介
- 类中构造函数的顺序
- json net.sf.json
- Android 通用页面滑动退出库,集成简单只要一行代码
- Q&A——性能优化(三)
- 欢迎使用CSDN-markdown编辑器
- 2月学习
- bzoj1566 [NOI2009]管道取珠
- PE文件结构详解(一)基本概念