art学习笔记1 dex格式

dex格式官方文档 写的很详细学习dex的唯一指南

根据官方文档整理的dex结构图


dex结构图.png

几个需要比较不好理解的知识点

LEB128

LEB128(“Little-Endian Base 128”)表示任意有符号或无符号整数的可变长度编码。每个 LEB128 编码值均由 1-5 个字节组成,共同表示一个 32 位的值。如下面表格所示 ,每个字节中的最高bit是标识信息,1表示还有后续字节,0表示结束,后面7bits是有效数据。将多个字节的该7bits从低到高组合起来就是所表示的整数。
LEB128分成有符号数和无符号数两种分别进行处理,不过,只是在编码和解码过程有些不同。

|第一个字节|第二个字节|第三个字节|第四个字节|第五个字节|
|:--:|
|0xxxxxxx|
|1xxxxxxx|0xxxxxxx|
|1xxxxxxx|1xxxxxxx|0xxxxxxx|
|1xxxxxxx|1xxxxxxx|1xxxxxxx|0xxxxxxx|
|1xxxxxxx|1xxxxxxx|1xxxxxxx|1xxxxxxx|0xxxxxxx|

MUTF-8

MUTF-8是在UTF-8的基础修改而来,使用单字节、双字节和三字节编码。解码后的MUTF-8变成两个字节的UTF-16

单字节

字节 bit value 说明
第一个字节 0■■■■■■■ bit6-0 等于ascii值

双字节

字节 bit value 说明
第一个字节 110■■■■■ bit10-6
第二个字节 10■■■■■■ bit5-0

第二个字节和第一个字节的数据位拼成一个两个字节的UTF-16编码,其值0xC0和0x80之间

三字节

字节 bit value 说明
第一个字节 1110■■■■ bit15-12
第二个字节 10■■■■■■ bit11-6
第三个字节 10■■■■■■ bit5-0

组合成的UTF-16的编码值在0x80~0xFFFF之间

encoded_value

名称 格式 说明
(value_arg << 5) | value_type ubyte 低五位表示value的类型、高三位表示的是value的size-1。value_type为0,表示value的size等于1
value ubyte[]

课后练习

dexdump 解析dex文件

你可能感兴趣的:(art学习笔记1 dex格式)