Android DEX 基础
来源:互联网 发布:手机安全防护软件 编辑:程序博客网 时间:2024/06/03 15:33
1、什么是dex?
简单说就是优化后的android版.exe。每个apk安装包里都有。
相对于PC上的java虚拟机能运行.class;android上的Davlik虚拟机能运行.dex。
为何要研究dex格式?因为dex里面包含了所有app代码,利用反编译工具可以获取java源码。理解并修改dex文件,就能更好的apk破解和防破解。
2、dex好处
dex文件有个天大的好处:它可以直接用DexClassLoader类加载,这叫动态加载。于是我们只要在dex上加壳,在程序运行时脱壳,就可以规避静态反编译的风险。
3、一般的反编译流程是什么样子的。
1、下载apk文件,然后解压 ,得到 class.dex 文件
2、用dex2jar 把 class.dex 还原成 classes-dex2jar.jar 文件
3、用 jd-gui.exe 把 classes-dex2jar.jar 文件打开,就可以看到源码了。
4、Android 为什么会出现 65536限制问题?
在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的包,存储了很多Java编译字节码的归档文件。因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。这里需要强调的是,Dex和Jar一样是一个归档文件,里面仍然是Java代码对应的字节码文件。当Android系统启动一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex的效率会比直接执行Dex文件的效率要高很多。但是在早期的Android系统中,DexOpt有一个问题,也就是这篇文章想要说明并解决的问题。DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65536个。当一个项目足够大的时候,显然这个方法数的上限是不够的。尽管在新版本的Android系统中,DexOpt修复了这个问题,但是我们仍然需要对老系统做兼容。
- Android DEX 基础
- Android DEX 基础
- Android DEX 基础
- Android插件化基础篇 — dex 文件
- Android插件化基础篇 — dex 文件
- Android [Dex Loader] Unable to execute dex:
- Android dex分包方案 (多dex)
- Android [Dex Loader] Unable to execute dex:
- Android dex分包方案 (多dex)
- Android DEX 文件格式
- Android Dex文件结构
- android编译dex-preopt
- Android Dex文件结构
- Android dex分包方案
- Android dex分包方案
- android dex分包
- Android dex分包方案
- Android dex分包技术
- Android开发之--studio中配置svn
- 进程与线程详解
- Java 时间戳进行比较
- python http应用
- Kafka+Spark Streaming+Redis实时系统实践
- Android DEX 基础
- linux常见指令(下)
- 补码
- HDU3488 Tour
- C#学习笔记整理1
- 操作系统实验九之写者优先问题
- jQuery+zTree加载树形结构菜单
- JsTreeの使用-yellowcong
- netowrkx备忘笔记