1.Dex文件格式

在上篇Dex文件解析文章中大致介绍了Dex文件的格式,回顾点这里:Android 文件解析之Dex文件头

这一节主要介绍string字符串是如何保存在Dex文件中的。

下面这张图很清晰的表示了string字符串在Dex文件中的存储方式:

string

在Dex的header中string_ids_size和string_ids_off分别表示了字符串的个数和string table的偏移,而string table中又存储着每个string数据的真实偏移值,string table中的每一项占4字节。由于每个字符串长度不固定,Dex文件采用uleb128变长编码来表示字符个数,字符个数的长度为1-5个字节(不包括字符串结束符)。

2.变长字符串长度算法

uleb128算法中每个字节的最高位都作为是否扩展该字节的标记,若为0,则不扩展,为1,则扩展1字节。uleb128编码和解码代码如下:

解码算法:

 3.Python读取Dex文件中的string

 

观看更多有关 的文章?

*

+
跳转到评论