第3章 Android Dalvik虚拟机 第三节(上)

来源:互联网 发布:网络环路检测工具 编辑:程序博客网 时间:2024/05/01 23:24

 

第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 释放指定的对象的锁
0 0
原创粉丝点击