公众号:易锦课堂
点击右方领取,回复1即可领取安卓逆向教学大礼包一份。
小生今天要和大家一起去学习安卓逆向当中重中之重的虚拟机的相关内容,咱们只有了解虚拟机咱们才能去实战,到时候才能放开手脚,话不多说,咱们一起来看看吧。
制丨文生
整理丨阿星
来源丨易锦教育
我们安卓逆向用到的虚拟机,可能会和大家接触过的虚拟机不太一样,咱们说的虚拟机,是一个运行环境,我们可以在上面去执行相应的文件(比如:class文件、odex文件、oat文件等)
我们了解了虚拟的基本概念,咱们去看一下这三种虚拟机的区别。
三种虚拟机及区别
Java虚拟机
Java虚拟机运行的是java字节码,java程序经过编译,生成java虚拟机通过解码class文件中内容来运行程序。
Java虚拟机基于栈架构,虚拟机需要频繁的从栈上读取写入数据,这个过程需要更多的指令分派与内存访问次数,会非常的消耗cpu的时间。
Dalvik虚拟机
Dalvik虚拟机是基于它的一个jit机制,Android 5.0以下,dalvik虚拟机运行的是dalvik字节码,由java字节码转换而来,并被打包到一个DEX可执行文件中、dalvik虚拟机通过解释DEX文件执行这些字节码。
Dalvik虚拟机基于寄存器架构,数据的访问,通过寄存器间接或者直接传递,这样的访问方式比基于栈方式要快的多,dalvik可执行文件体积更小。
两种编译模式
JIT:just in time 即时编译技术,是dalvik虚拟机使用模式。
AOT:ahead of time,预编译技术,是art虚拟机使用的模式。
Art虚拟机
Android5.0版本以上ART虚拟机执行的是本地机器码。
Dalvik虚拟机与ART虚拟机是如何实现无缝替换的和它的区别
我们可以看到上图,java虚拟机、dalvik虚拟机和ART虚拟机都是向上三层提供了三个接口。以及区别ART虚拟机和dalvik虚拟机它的一个区别在persist.sys.dalvik.vm.lib这个字段。如果这个字段当中存的是libdvm.so那么它就是一个dalvik虚拟机,如果这个字段存放的是libart.so那么它是一个ART虚拟机。
我们 dalvik虚拟机和ART虚拟机在这里它的机制是不一样的,dalvik虚拟机它是jit机制,而我们的art虚拟机是aot机制。
在这里
dalvik
.dex=>dexopt=>.odex dalvik加载执行的odex文件
Art
.dex=>dex2opt=>.oat art加载执行的是oat文件。
怎么样呢不知道这样简单的讲解,朋友们有没有听懂呢?没有的话朋友们可以扫码下方的二维码进行咨询,当然还是会有丰富的学习资料和学习工具等你来拿。
原文始发于微信公众号(映山红coin安全团队):安卓逆向之虚拟机的相关内容
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论