这个是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文件的生成

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

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

最新文章

  1. 源码安装php
  2. 写给Git初学者的7个建议
  3. mysql 序列与pg序列的比较
  4. 学习 zookeeper
  5. 【C语言入门教程】1.2 函数库 和 链接
  6. 01_传说中的车(Fabled Rooks UVa 11134 贪心问题)
  7. 【iHMI43 应用演示】之 modbus 协议(从机)通信演示
  8. windows服务器记录3389远程桌面IP策略
  9. Json时间格式转换问题
  10. js获取天气
  11. Angularjs循环二维数组
  12. 【scikit-learn 0.19 中文文档 】安装 scikit-learn | ApacheCN
  13. 深入理解javascript函数进阶系列第二篇——函数柯里化
  14. CSS 圣杯布局升级版---多个固定宽度一个自适应宽度
  15. Vue一、起步
  16. Eclipse is running in a JRE, but a JDK is required Some Maven plugins may not work when importing projects or updating source folders.
  17. python_命令
  18. uva-10382-贪心
  19. oracle instantclient + plsql 远程连接数据库
  20. Java用FutureTask实现又返回值的线程

热门文章

  1. 时间管理GTD
  2. linux查看占用内存前10的命令
  3. react 核心技术点
  4. 阶段一-01.万丈高楼,地基首要-第3章 用户登录注册模块开发-3-8 优化Swagger2显示
  5. Ubuntu下卸载anaconda
  6. 【SpringBoot】SpringBoot日志框架(四)
  7. “无法启动IIS Express Web服务器”的解决办法
  8. /home/jdk1.8.0_211/jre/bin/java: Permission denied
  9. Golang 连接ActiveMQ
  10. SQL经典实例笔记