什么是虚拟机?虚拟机有那几种
往期推荐
1.1 虚拟机的概念
首先给大家介绍一下什么是虚拟机,这里所讲的虚拟机,可能和大家接触过的有些区别,它是一个运行环境,可以在上面执行相应的文件,比如: class文件、odex文件、oat文件等。
1.2 介绍java虚拟机、dalvik虚拟机和art虚拟机
1.java虚拟机:
java虚拟机运行的是java字节码,java程序经过编译,生成JAVA字节码保存在class文件中,java虚拟机通过解码class文件中内容来运行程序。
java虚拟机基于栈架构,虚拟机需要频繁的从栈上读取写入数据,这个过程需要更多的指令分派与内存访问次数,会耗费很多CPU的时间。
Java虚拟机执行流程图如下:
2.dalvik虚拟机(jit机制):
(1)Android 5.0以下。
(2)dalvik虚拟机运行的是dalvik字节码,所有的dalvik字节码由 java字节码转换而来,并被打包到一个DEX可执行文件中,dalvik虚拟机通过解释DEX文件执行这些字节码。
(3)dalvik虚拟机基于寄存器架构,数据的访问通过寄存器间直接传 递,这样的访问方式比基于栈方式要快很多。
(4)dalvik可执行文件体积更小。
3.art虚拟机(aot机制):
(1)Android 5.0版本及以上。
(2)ART虚拟机执行的是本地机器码。
在前面两种虚拟机中我们接触到了两种编译模式:
JIT:Just In Time 即时编译技术,是dalvik虚拟机使用的模式。
AOT:Ahead Of Time,预编译技术,是art虚拟机使用的模式 。
4.dalvik虚拟机与art虚拟机是如何实现无缝替换的,如下图所示。
注意
.dex =>dexopt=>.odex dalvik加载执行的odex文件
.dex=>dex2oat=>.oat art加载执行的是oat文件
小结
本次主要分享了虚拟机的概念,Dalvik虚拟机和ART虚拟机的使用,同时也了解java虚拟机、dalvik虚拟机和art虚拟机之间的区别,如下表所示。
如果你也对安卓逆向感兴趣。可以加下方的群,大家一起讨论问题,或者扫描下方二维码,关注回复 “安卓逆向” 获取免费教程
安卓逆向交流学习:342647370
vx:Yjxiaox