dexlib2的源码框架

这个是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的源码框架的更多相关文章
- TVM源码框架安装方法
TVM源码框架安装方法 本文提供如何在各种系统上从零构建和安装TVM包的说明.它包括两个步骤: 首先从C++代码中构建共享库(linux的libtvm.so,macOS的libtvm.dylib和wi ...
- TensorFlow源码框架 杂记
一.为什么我们需要使用线程池技术(ThreadPool) 线程:采用“即时创建,即时销毁”策略,即接受请求后,创建一个新的线程,执行任务,完毕后,线程退出: 线程池:应用软件启动后,立即创建一定数量的 ...
- vue2源码框架和流程分析
vue整体框架和主要流程分析 之前对看过比较多关于vue源码的文章,但是对于整体框架和流程还是有些模糊,最后用chrome debug对vue的源码进行查看整理出这篇文章.... 本文对vue的整体框 ...
- golang 移动应用例子 example/basic 源码框架分析
条件编译 我们在源码中可以看到2个文件: main.go 和 main_x.go 这两个包名都是 package main , 都有 main 函数. 不会冲突么? 答案是不会的, main_x.go ...
- Swinject 源码框架(二):循环依赖的解决
可能存在循环依赖,比如 Parent 强制有 Child, Child 弱持有 Parent. 具体实现如下.Parent 初始化时,必须传入 Child,而 Child 初始化不必传入 Parent ...
- jQuery源码框架fn解读
(function( window, undefined ){ var jQuery = (function(){ var jQuery = function( selector, context ) ...
- Jmeter源码框架
首先jmeter框架入口类: NewDriver类(src/core/org/apache/jmeter/NewDriver.java) public static void main(String[ ...
- Swinject 源码框架(三):Object Scopes
Object Scopes 指定了生成的实例在系统中是如何被共享的. 如何指定 scope container.register(Animal.self) { _ in Cat() } .inObje ...
- Swinject 源码框架(一):基本原理
 核心是 Container类.它提供了两类方法,register 和 resolve. 为了找到在 resolve 时,能够找到对应的方法,内部维护了一个叫做services 的字典.key 是根 ...
随机推荐
- 【转载】 tf.Print() (------------ tensorflow中的print函数)
原文地址: https://blog.csdn.net/weixin_36670529/article/details/100191674 ------------------------------ ...
- spark 监控--WebUi、Metrics System(转载)
转载自:https://www.cnblogs.com/barrenlake/p/4364644.html Spark 监控相关的部分有WebUi 及 Metrics System; WebUi用于展 ...
- 003-Python3-基础语法-运行方式、代码基础要求、运算符[算数运算符、比较运算符、赋值运算符、位运算符、逻辑运算符、成员运算符、身份运算符]、运算符优先级
一.基础语法 参看地址:https://www.runoob.com/python3/python3-tutorial.html 1.1.运行方式 1.文件方式 编写一个hello.py文件, pri ...
- Python 使用 paho-mqtt
https://blog.csdn.net/weixin_41656968/article/details/80848542 https://blog.csdn.net/lhh08hasee/arti ...
- windows中设置php环境变量
1.我的电脑->右键(选择我的属性) 2.点击高级设置 3.点击环境变量 4.在系统变量中找到Path 点击 5.找到php.exe的文件目录,添加到path中 6.php -v 显示版本,表示 ...
- (转载)极大似然估计&最大后验概率估计
前言 不知看过多少次极大似然估计与最大后验概率估计的区别,但还是傻傻分不清楚.或是当时道行太浅,或是当时积累不够. 这次重游机器学习之路,看到李航老师<统计学习方法>中第一章关于经验风险最 ...
- exe文件图标不见了,教你win10桌面EXE文件图标不见了如何解决
1.进入cmd 2.输入以下命令 taskkill /im explorer.exe /f cd /d %userprofile%\appdata\local del iconcache.db /a ...
- EasyNVR摄像机网页无插件直播方案H5前端构建之:使用BootstrapPagination以分页形式展示数据信息
背景介绍 EasyNVR核心在于摄像机的音视频流的获取.转换.转码与高性能分发,同时同步完成对实时直播流的录像存储,在客户端(PC浏览器.Android.iOS.微信)进行录像文件的检索.回放和下载. ...
- LwIP应用开发笔记之六:LwIP无操作系统TCP客户端
上一篇我们基于LwIP协议栈的RAW API实现了一个TCP服务器的简单应用,接下来一节我们来实现一个TCP客户端的简单应用. 1.TCP简述 TCP(Transmission Control Pro ...
- spark org.apache.spark.ml.linalg.DenseVector cannot be cast to org.apache.spark.ml.linalg.SparseVector
在使用 import org.apache.spark.ml.feature.VectorAssembler 转换特征后,想要放入 import org.apache.spark.mllib.clas ...