dex2jar这个源码包,听名字是用来将dex文件转换为java文件,在githup上面的地址是https://github.com/pxb1988/dex2jar

本地使用源码:http://download.csdn.net/detail/new_abc/9718937

但我们分析这个源码可以看到,里面的功能不只是将dex转换为jar包,也可以转换dex为smail文件等,这个后面在分析

dex2jar就是将dex文件转换为class文件,然后class文件打成jar包

dex转换为class文件过程中会先转换为一种IR的中间指令格式

大概的转换流程是上面这样子的

中间主要 调用的函数接口如下

上面的是相应的Visitor访问者,具体的处理都是调用里面的visitor相关的函数进行处理

然后看看主要的类图

DexFileReader开始从dex文件中读取内容,并调用里面的相应的函数处理读取到的数据,如acceptClass会解析一个类等

这里的话主要是一个Visitor相关的类关系图

Dalvik指令格式
一段Dalvik汇编代码由一系列Dalvik指令组成,指令语法由指令的位描述与指令格式标识来决定。位描述约定如下
Dalvik指令对语法做了一些说明,它约定如下:
● 每条指令从操作码开始,后面紧跟参数,参数个数不定,每个参数之间采用逗号分开。
● 每条指令的参数从指令第一部分开始,op位于低8位,高8位可以是一个8位的参数,也可以是两个4位的参数,还可以为空,如果指令超过16位,则后面部分一次作为参数
● 如果参数采用 “vX” 的方式表示,表示它是一个寄存器,如v0、v1等。这里采用v而不用r是为了避免与基于该虚拟机架构本身的寄存器名字产生冲突,如ARM架构寄存器命名采用r开头。
● 如果参数采用 “#+X” 的方式表示,表明它是一个常量数字。
● 如果参数采用 “+X” 的方式表示,表明它是一个相对指令的地址偏移。
● 如果参数采用 “kind@X” 的方式表示,表明它是一个常量池的索引值。其中kind表示常量池类型,它可以是 “string” 字符串常量池索引)、“type”(类型常量池索引)、“field”(字段常量池索引)或者 “meth”(方法常量池索引)。● 每16位的字采用空格分隔开来。
● 每个字母表示4位,每个字母按顺序从高字节开始,排列到低字节。每4位之间可能使用竖线 “|” 来表示不同的内容。
● 顺序采用 A ~ Z 的单个大写字幕作为一个4位的操作码,op表示一个8位的操作码。
● “Φ” 来表示这字段所有位为0值。
以指令格式 “A|G|op BBBB F|E|D|C” 为例
指令中间有两个空格,每个分开的部分大小为16位,所以这条指令由三个16位的字组成。
第一个16位是 “A|G|op”,高8位由A与G组成,低字节由操作码op组成。
第二个16位由 BBBB 组成,它表示一个16位的偏移值。
第三个16位分别由F、E、D、C 共4个4字节组成,在这里他们表示寄存器参数。

单独使用位表示还无法确定一条指令,必须通过指令格式标识来指定格式的格式编码。它的约定如下:
● 指令格式标识大多由三个字符组成,前两个是数字,最后一个是字母。
● 第一个数字是表示指令有多少个16位的字组成。
● 第二个数字是表示指令最多使用寄存器的个数。特殊标记 “r” 标识使用一定范围内的寄存器。
● 第三个字母为类型码,表示指令用到的额外数据的类型。取值见如下表。
助记符 位大小 说 明
b 8 8位有符号立即数
c 16,32 常量池索引
f 16 接口常量(仅对静态链接格式有效)
h 16 有符号立即数(32位或64位数的高值位,低值位为0)
i 32 立即数,有符号整数或32位浮点数
l 64 立即数,有符号整数或64位双精度浮点数
m 16 方法常量(仅对静态链接格式有效)
n 4 4位的立即数
s 16 短整型立即数
t 8, 16, 32 跳转,分支
x 0 无额外数据
以指令格式标识22x 为例:
第一个数字2表示有2个16位字组成,第二个数字2表示指令使用到2个寄存器,第三个字母x表示没有使用到额外的数据。

这里是dex转ir用到的相关的一个类

这是转换的指令,解析dex文件中的相应指令 转换为这里的一个中间指令

这里是中间指令 转为jvm中的指令,里面都有accept方法

这里用来把解析的dex转换,用到Asm

这里是dex文件解析之后转换为中间指令IR文件用到的visitor,前面的visitor是访问dex文件的。

大概的类就上面这么多,画这个图主要是了解各个类之间的关系,要不然后面会有点糊涂。

作者:new_abc 来源:CSDN 原文:https://blog.csdn.net/new_abc/article/details/53736240


http://www.taodudu.cc/news/show-2015147.html

相关文章:

  • dex2jar和jd-GUI的下载安装与使用
  • java实现dex转jar_dex转jar工具
  • Android反编译apktool,dex2jar和jd-gui的使用和一键反编译查看apk
  • dex2jar的使用
  • Andorid中的dex文件使用dex2jar工具反编译
  • dex2jar工具及问题
  • dex2jar 和 jd-gui
  • android 反编译 dex2jar,Android反编译教程:apktool,dex2jar的使用
  • dex2java_dex2jar 使用方法 | 学步园
  • dex2jar java 1.8_dex2jar最新版下载-dex2jar下载 2.0官方版--pc6下载站
  • dex2jar java 1.8_利用 dex2jar 反编译 dex文件
  • dex2jar java 1.8_dex2jar v2.1 最新版本打包
  • dex2jar android,dex2jar
  • android逆向工程dex2jar使用
  • Android逆向分析之dex2jar异常处理的几种情况
  • dex2jar 和 jd-gui 的安装与使用
  • android安卓字体下载,安卓Android简中综艺手机字体
  • WPF自定义字体
  • 原生android字体,不用Root,国产安卓手机如何把字体切换成安卓原生字体
  • java获取系统所有字体_java获取本机所有可用字体
  • kindle字体设置
  • 思源黑体(魅族)、方正兰亭(小米)、冬青黑体(锤子)比较
  • windows自带黑体_window自带字体
  • PPT的字体
  • 字体的基础知识:中文字体区分练习
  • linux艺术字体,Linux字体美化实战(Fontconfig配置)
  • 兰亭字体linux版本,两种方法,让最新版 Windows 10 的字体更「养眼」
  • php barcode设置黑条宽度,打印机字体的安装问题 BarCode Pro 6.0修改线条宽度 BarCode pro打EAN13条形码...
  • 小米兰亭pro ttf_小米10Pro使用体验(三)
  • 小米兰亭字体_下载

dex2jar源码解析之总体介绍(一)相关推荐

  1. jsoncpp库常用源码解析及使用介绍(二)

    上一节介绍了jsoncpp库的下载及编译方式,中Value类中最基础的一部分功能的源码,包括Value的构造形式.重载"=".">"."< ...

  2. dex2jar源码解析----解析dex文件一

    Dex2jar命令在Dex2jarCmd.java文件中 public static void main(String... args) {new Dex2jarCmd().doMain(args); ...

  3. Spring源码拜读之总体介绍

    核心模块 spring-core:依赖注入IOC与DI的最基本实现 spring-beans:Bean工厂于Bean的装配 spring-context:IOC容器 spring-aop:面向切面编程 ...

  4. dex2jar源码解析----dex转smail

    我们以BaksmaliTest为例,查看一下Dex转smail的流程 public class BaksmaliTest {@Testpublic void t() throws Exception ...

  5. 【移动开发】Checkout开源库源码解析

    Checkout开源库的源码解析 1.功能介绍 1.1Checkout是什么 Checkout是Android In-App Billing API(v3 +)的一个封装库.In-App Billin ...

  6. 每天一个Lodash源码解析

    每天一个Lodash源码解析 chunk() 方法介绍 自我实现 源码分析 代码对比 知识点补充 浮点数转化为浮点数 数组创建方法区别 js中切割数组方法 slice() 方法介绍 自我实现 源码分析 ...

  7. Tomcat8源码解析

    Tomcat8源码解析 Tomcat总体架构 Connector:开启Socket并监听客户端请求,返回响应数据: Container:负责具体的请求处理: 一个Service负责维护多个Connec ...

  8. [源码解析] 机器学习参数服务器 Paracel (1)-----总体架构

    [源码解析] 机器学习参数服务器 Paracel (1)-----总体架构 文章目录 [源码解析] 机器学习参数服务器 Paracel (1)-----总体架构 0x00 摘要 0x01使用 1.1 ...

  9. Tomcat源码解析系列二:Tomcat总体架构

    Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...

  10. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

最新文章

  1. 2021年大数据Spark(四十九):Structured Streaming 整合 Kafka
  2. 可租赁、可定制的虚拟人居然还能这么玩?9月25日来百度大脑人像特效专场一探究竟!...
  3. 单摄像头+深度学习实现伪激光雷达,代码已开源
  4. List for game to play latter
  5. NLP深度学习:基于TensorFlow实现Skip-Gram模型
  6. 应用系统怎么开启审计功能_win10系统开启分屏功能的设置方法
  7. 基于Blink构建亲听项目以及全链路debug项目实时响应能力
  8. (62)Verilog HDL模块例化system Verilog模块
  9. php 二维数组根据键值合并二维数组_3分钟短文 | PHP 根据值移除数组元素,哪个方法最简单?...
  10. typescript + react 项目开发体验之起手式
  11. 三种图象处理的效率比较,用指针法最快
  12. linux读用户密码,linux用户/用户密码和用户组管理
  13. 深度可分离卷积组卷积
  14. 软件耦合的分类及解决方法
  15. Python 最强 IDE 详细使用指南!
  16. 基于Android的家校互动系统app
  17. 手写Vuex核心原理,再也不怕面试官问我Vuex原理
  18. 超级解霸害死人——安装evc过程种出现“没有文件扩展.vbs的脚本引擎”的问题...
  19. 企业如何实现IoT物联网远程控制
  20. 传智_Springmvc+Mybatis由浅入深全套视频教程(燕青)-mybatis笔记(两天)(2017年8月5日16:09:55)

热门文章

  1. 【方向盘】“江郎才尽”的周杰伦,出道已21周年
  2. Linux nohup命令详解
  3. 【最新版1909 (updated Jan 2020)】Windows10操作系统官方原版镜像
  4. 栈——栈的定义及基本操作(初始化、判空、进栈、出栈、遍历栈、销毁栈等)
  5. micropython源码分析之c模组注册
  6. creator qt 字体太小_QtCreator的一些自定义代码字体和颜色
  7. qt TCP 网络编程
  8. QT网络编程——UDP
  9. 学生管理系统(JAVA后台简约版)
  10. vb.net 教程 1-20 例