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文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 字符是用户可以读写的最小单位。计算机所能支持的字符组成的集合,就叫做字符集。字符集通常以二维表的形式存在。二维表的...
    刘惜有阅读 8,395评论 2 14
  • 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是...
    艾小天儿阅读 17,899评论 0 2
  • 1. ASCII   我们知道,计算机内部是通过二进制数据进行操作的,所有的信息最终都会转换为一个二进制值,二进制...
    骑着乌龟去看海阅读 1,855评论 0 4
  • UTF-8 编码提供了一种简便而向后兼容的方法, 使得那种完全围绕 ASCII 设计的操作系统, 比如 Unix,...
    谢大见阅读 5,002评论 0 3
  • 差点都要睡着了,还好手机突然叫唤了一下,才惊醒过来还未写今天的作业。今天的课也没有听,打开了一下子却觉得太吵了。...
    D061张琴阅读 110评论 0 0

友情链接更多精彩内容