【移动安全基础篇】——12、Dalvik虚拟机

1. Dalvik VM(DVM)和 和 Java VM(JVM) 的区别:

1) JVM 是运行 Java 字节码,DVM 是运行 Dalvik 字节码
2) Dalvik 可执行文件(.dex)的体积更小
3) 虚拟机架构不同:JVM 是基于栈,DVM 是基于寄存器

Java 代码:

反编译 int foo(int a, int b)函数的 Java 字节码:

反编译 int foo(int a, int b)函数的 Dalvik 字节码:

2. Dalvik  汇编语言介绍
v  命名法与 p  命名法:

类型描述符:

寄存器:

1) DVM 寄存器都是 32bit 的,与名称无关
2) J,D 类型,需要相邻 2 个寄存器
3) 对象类型:Ljava/lang/String; = java.lang.String
4) 数组:[I = int [],[[I = int [][]

方法:

1) 格式:Lpackage/name/ObjectName;->MethodName(III)Z
2) 例子:method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String
等价于:String method(int, int[][], int, String, Object[])
字段:
格式:Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;

3.  程序编译与反编译

主要的反编译器:

1)jeb;
2)AndroidKiller

Dalvik  指令集:

1) 空操作指令:nop
2) 数据操作指令:move

move vA, vB:将 vB 寄存器的值赋给 vA 寄存器,源寄存器与目的寄存器都是 4 位
move-object/from 16 vAA, vBBBB:为对象赋值,源寄存器为 8 位,目的寄存器为 16

4.  汇编语言实现

对应的 Java 代码:

编译 smali  文件:

java –jar smali.jar –o classes.dex HelloWorld.smali

执行程序:
上传到手机:adb push classes.dex /data/local/
执行程序:adb shell dalvikvm –cp /data/local/classes.dex HelloWorld

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值