dexlib2的源码框架

摘要:
这是dexlib2的目录,显然它的代码比baksmali和smali多得多。这里我们将介绍核心目录分析,它暂时没有特定的功能。文件夹库都是抽象类,主要表示一些dex文件的一些基本数据结构。这里的关键点是该目录下的引用文件夹。有字段索引、方法索引、字符串索引和类型索引,它们与dex文件本身的组织结构密切相关。如果此处不清楚,建议检查dex文件的文件组织结构。

wKiom1P9xpig58yvAADclCjCASw631.jpg

这个是dexlib2的目录,明显看出来比baksmali和smali代码量要多很多,这里先将核心目录给大家做一下介绍

analysis 这个暂时不知道具体作用

base     这个文件夹下面全部都是抽象类,主要是对于一些dex文件的一些基础数据结构的一些表示

              这里面重点要注意的是这个目录下面的 reference这个文件夹,里面分别有 field索引,

             method索引,string索引,以及type索引,这些都是跟dex文件本身组织结构息息相关的,

             这里如果不是太清楚的话,建议看一下dex文件的文件组织结构。里面有表示string type

             proto  class的这些段的。

value        目录下面的这些类都是跟类成员变量初始值相关的操作,比如 在某个类中的成员变量

                 String m_s = "hello world"  这个时候就要用到 BaseStringEncodedValue 这个类的操作

                 了

 base    主目录下的这几个文件,

             BaseAnnotation.java  BaseAnnotationElement.java 跟注释相关

             BaseExceptionHandler.java   try catch后的exceptionhandler相关

             BaseMethodParameter.java    函数参数相关

             BaseTryBlock                try catch块相关

         

         

builder  这个是为生成dex文件的一些组件文件,

         build/debug         下面是对于 dex文件中debug信息保存的类,为最后生成dex做准备

         build/instruction    对于dalvik虚拟机支持的所有指令的支持的类,格式很鲜明,基本上

                                        每种类型的dalvik虚拟机指令用一个类来表示                              

         build/                       这下面就放了一些对于debug信息,异常句柄,指令,swith case块,

                                          trycatch 块,函数builder的一些实现

         总之这个文件夹下是支撑将smali文件写回为dex文件的类库

         

         

dexbacked  这个目录其实是将输入的dex进行解析后接受的类库

           dexbacked/instruction   解析后的dex的所有指令存放的类,也是以某类指令建立类来接收的

           dexbacked/raw          

 对于dex文件结构的各个组件接收的类。比如typeid,stringid,classdef,protoid,mapitem,headeritem,这些对比dex文件的结构就能和这些类一一对应起来    

                              

           dexbacked/reference     dex文件中的成员变量索引,方法索引,字符串索引,类型索引的类

           dexbacked/util          一些小的工具的类集合

           dexbacked/value         还是跟初始值相关的类

           dexbacked               一些更加上层抽象的类,表示的信息量更多,比如DexBackedClassDef.java

                                   就表示一个类,但是这个类又是由n个成员变量,n个方法来表示的,对于

                                   成员变量又涉及到了初始值,权限,访问属性,本身定义等,

                                   对于成员方法就更复杂了,除了指令还有try catch信息 debug信息,注释信息等等

           总之, dexbacked这个类库,有java语言完整表达了整个dex文件的文件结构,细化到dex文件的每个细节,就是说这个文件夹下的类已经能够涵盖dex文件所有的东西,里面的每个类,每个方法,每条指令都能从这个文件夹下找到相应的类来表示。        

iface      这个就是一个接口定义类,前面提到的base抽象类都是继承与这个文件夹下面的类,主要是为了                利用java多态的特点,减少代码的编写量,让代码看起来更加专业。

           

immutable      

这个文件夹提供了为类,方法,成员变量,指令,各种索引的不可更改的常量定义,但是这些类本身是可以new出来的,当你要为dex文件添加类,方法,成员变量或者指令的 时候,这个文件夹下面的类就很有作用了,可以用这个文件夹下面的类轻松构造出来各种索引,达到更改dex文件的目的,一般要配合builder下的各种方法来使用

                     

           

rewriter       这个文件夹下面提供了对于写回dex文件各种函数的hook,包括写回类的hook,

                    写回方法的hook,甚至到写回每条指令的hook,这个文件夹其实起到的作用也是为了能够

                    通过hook方便的修改dex文件。

           

writer     写回dex文件启动的文件夹,前面的builder这些都是为其提供弹药的,这里整体的dex文件的生成

            ,所有组织都是通过这个文件夹下面的不同的类协同完成的。

           

           

.             直接根目录下的是更基础的访问权限,指令格式,操作格式,索引,值类型的一些基础类了

免责声明:文章转载自《dexlib2的源码框架》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ArcGIS中标注(label)的使用技巧【js】了解前端缓存,收获不止于此!下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL规约(阿里巴巴)

建表规约 【强制】表达是与否概念的字段,必须使用 is _ xxx 的方式命名,数据类型是 unsigned tinyint ( 1 表示是,0 表示否 ) ,此规则同样适用于 odps 建表。说明:任何字段如果为非负数,必须是 unsigned 。 【强制】表名、字段名必须使用小写字母或数字 ; 禁止出现数字开头,禁止两个下划线中间只 出现数字。数...

MySQL SQL优化

前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧。 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础。 优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO...

ElasticSearch(四):关于es的一些基础知识讲解

上一篇博客更新完之后,我发现一个问题:在我创建索引的时候依旧无法准确的理解每个字段的意义,所以就有了这个。 1. 关于索引 1.1 关于索引的一些基础知识 在创建标准化索引的时候,我们传入的请求体如下: { "settings":{ "number_of_shards":5, "number_of_repli...

MongoDB自动删除过期数据--TTL索引

前序: 由于公司业务需求,对于3个月前的过期数据需要进行删除动作,以释放空间和方便维护本来想的是使用crontab写个脚本定时执行,但是看到Mongo本身就有自动删除过期数据的功能,所以还是用一下吧这个方法就是使用TTL索引,后续我再写一个脚本定时删除的任务介绍:TTL索引是MongoDB中一种特殊的索引, 可以支持文档在一定时间之后自动过期删除,目前TT...

SqlServer索引假脱机的解决

今天产品提出平台打开某一个模块速度特别慢,甚至有时会出现504的错误。赶紧连接正式版数据库本地调试代码,发现进行数据获取时,打开数据库和关闭数据库中间间隔的时间有5秒之久,这是数据量较少的情况,如果数据量更大的话就有可能出现错误了。看来问题是出在sql语句这里,把sql语句拷贝出来放到查询分析器中进行查看,速度还是很快的,但是查看执行计划的时候发现了问题,...

squid反向代理基本概述及性能事项

一、基本概念 squid反向代理作web加速是大型网站的常用模式。1. squid来自于1990的cache harvest项目。这个项目一个分支形成squid,另一个形成netapp的netcache产品(netapp的netcache是固化在其硬件产品中的,整体价格很贵) 2.squid是硬盘缓存,其使用内存作缓存内容的索引(一个索引在32位系统中大小...