第3章 Android Dalvik指令
1、 环境配置 Ubuntu15.10 IP:192.168.153.130
2、 Dalvik指令使用
1、 Dalvik指令特点
例子: move-wide/from 16vAA vBBBB
Move 是基础字节码(baseopcode)
Wide 是64位数据宽度
From 16 是字节码后缀,是16位寄存器引用变量
vAA是目的寄存器,取值范围是v0~v255
vBBBB 是源寄存器,取值范围是v0~v65535
寄存器数值的取值范围为4、8、16等方式。
4位数值如A/B/C 取值为v0~v15
8位数值如AA/BB/CC 取值为v0~v255
16位数值如AAAA/BBBB/CCCC取值为v0~v65535
2、 空指令操作
Nop指令只是用于对齐操作,没有实际意义。
3、 数据操作指令
Move vA,vB 是将vB寄存器的值赋予给vA寄存器。
Move vAA,vBBBB 是将vBBBB源寄存器的值赋予给vAA目的寄存器。
Move/16 vAAAA, vBBBB是将vBBBB寄存器的值赋予给vAAAA寄存器,且源寄存器和目标寄存器都是16位。
Move-wide vA,vB 为4位寄存器的赋值。源寄存器与目的寄存器的值都为4位。
Move-object vA,vB 为对象赋值,源寄存器和目的寄存器都为4位。
Move-object/from16 vAA ,vBBBB 与move-wide/from 16 vAA vBBBB 相同。
Move-object/16vAAAA, vBBBB 为对象赋值,源寄存器和目的寄存器都为16位。
Move-result vAA 将invoke类型指令操作的单字非对象结果赋给vAA寄存器。
Move-result-wide vAA将invoke类型指令操作的双字非对象结果赋给vAA寄存器。
Move-result-object vAA 将上一个invoke类型指令操作的对象结果赋给vAA寄存器。
Move-exception vAA 保存一个发生异常的寄存器,是一条异常处理器的一条指令。
4、 返回指令
Return-void 表示返回viod方法
Return vAA 表示返回一个32位非对象类型的值,返回值为8位的寄存器。
Return-wide vAA 表示函数返回一个64位非对象类型的值,返回值为8位的寄存器。
Return-object vAA 表示函数返回一个对象的值,返回值为8位的寄存器。
5、 数据定义指令
Const/4 vA ,#+B 将数值符号扩展为32位后赋给寄存器vA .
Const/16 vA A,#+BBBB 将数值符号扩展为32位后赋给寄存器vAA .
Const vAA ,#+BBBBBBBBBB将数值赋给寄存器vAA .
Const/high16 vAA ,#+BBBB0000 将数值右边零扩展为32位后赋给寄存器vAA .
Const/high32 vAA ,#+BBBBBBBB 将数值右边零扩展为64位后赋给寄存器vAA .
Const-wide vAA ,#+BBBBBBBBBBBBBBBB 将数值赋给寄存器对v AA.
Const-wide/high16 vAA ,#+BBBB000000000000 将数值右边零扩展为64位后赋给寄存器对vAA .
Const-string vAA ,string@BBBB 通过字符串索引构造一个字符串并赋给寄存器vAA .
Const-sting/jumbo vAA ,string@BBBBBBBB 构建一个较大的字符串赋给寄存器vAA .
Const-class vAA ,type@BBBB 通过类型索引获取一个类引用并赋给寄存器vAA.
Const-class/jumbo vAAAA ,type@BBBBBBBB通过类型索引获取一个类引用并赋给寄存器vAAAA .
6、 锁指令
Monitor-enter vAA 为指定的对象获取锁
Monitor-exitvAA 释放指定的对象的锁