Dalvik操作码汇总.docx
- 文档编号:675501
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:51
- 大小:31.82KB
Dalvik操作码汇总.docx
《Dalvik操作码汇总.docx》由会员分享,可在线阅读,更多相关《Dalvik操作码汇总.docx(51页珍藏版)》请在冰豆网上搜索。
Dalvik操作码汇总
Dalvik虚拟机操作码
作者:
GaborPaller翻译:
YULIANGMAX
v1.0
表中的vx、vy、vz表示某个Dalvik寄存器。
根据不同指令可以访问16、256或64K寄存器。
表中lit4、lit8、lit16、lit32、lit64表示字面值(直接赋值),数字是值所占用位的长度。
long和double型的值占用两个寄存器,例:
一个在v0寄存器的double值实际占用v0,v1两个寄存器。
boolean值的存储实际是1和0,1为真、0为假;boolean型的值实际是转成int型的值进行操作。
所有例子的字节序都采用高位存储格式,例:
0F000A00的编译为0F,00,0A,00存储。
有一些指令没有说明和例子,因为我没有在正常使用中看到过这些指令,它们的存在是从这里知道的:
Androidopcodeconstantlist。
Opcode
操作码(hex)
Opcodename
操作码名称
Explanation
说明
Example
示例
00
nop
无操作
0000-nop
01
movevx,vy
移动vy的内容到vx。
两个寄存器都必须在最初的256寄存器范围以内。
0110-movev0,v1
移动v1寄存器中的内容到v0。
02
move/from16vx,vy
移动vy的内容到vx。
vy可能在64K寄存器范围以内,而vx则是在最初的256寄存器范围以内。
02001900-move/from16v0,v25
移动v25寄存器中的内容到v0。
03
move/16
未知注4
04
move-wide
未知注4
05
move-wide/from16vx,vy
移动一个long/double值,从vy到vx。
vy可能在64K寄存器范围以内,而vx则是在最初的256寄存器范围以内。
05160000-move-wide/from16v22,v0
移动v0,v1寄存器中的内容到v22,v23。
06
move-wide/16
未知注4
07
move-objectvx,vy
移动对象引用,从vy到vx。
0781-move-objectv1,v8
移动v8寄存器中的对象引用到v1。
08
move-object/from16vx,vy
移动对象引用,从vy到vx。
vy可以处理64K寄存器地址,vx可以处理256寄存器地址。
08011500-move-object/from16v1,v21
移动v21寄存器中的对象引用到v1。
09
move-object/16
未知注4
0A
move-resultvx
移动上一次方法调用的返回值到vx。
0A00-move-resultv0
移动上一次方法调用的返回值到v0。
0B
move-result-widevx
移动上一次方法调用的long/double型返回值到vx,vx+1。
0B02-move-result-widev2
移动上一次方法调用的long/double型返回值到v2,v3。
0C
move-result-objectvx
移动上一次方法调用的对象引用返回值到vx。
0C00-move-result-objectv0
移动上一次方法调用的对象引用返回值到v0。
0D
move-exceptionvx
当方法调用抛出异常时移动异常对象引用到vx。
0D19-move-exceptionv25
当方法调用抛出异常时移动异常对象引用到v25。
0E
return-void
返回空值。
0E00-return-void
返回值为void,即无返回值,并非返回null。
0F
returnvx
返回在vx寄存器的值。
0F00-returnv0
返回v0寄存器中的值。
10
return-widevx
返回在vx,vx+1寄存器的double/long值。
1000-return-widev0
返回v0,v1寄存器中的double/long值。
11
return-objectvx
返回在vx寄存器的对象引用。
1100-return-objectv0
返回v0寄存器中的对象引用。
12
const/4vx,lit4
存入4位常量到vx。
1221-const/4v1,#int2
存入int型常量2到v1。
目的寄存器在第二个字节的低4位,常量2在更高的4位。
13
const/16vx,lit16
存入16位常量到vx。
13000A00-const/16v0,#int10
存入int型常量10到v0。
14
constvx,lit32
存入int型常量到vx。
14004E61BC00-constv0,#12345678//#00BC614E
存入常量12345678到v0。
15
const/high16v0,lit16
存入16位常量到最高位寄存器,用于初始化float值。
15002041-const/high16v0,#float10.0//#41200000
存入float常量10.0到v0。
该指令最高支持16位浮点数。
16
const-wide/16vx,lit16
存入int常量到vx,vx+1寄存器,扩展int型常量为long常量。
16000A00-const-wide/16v0,#long10
存入long常量10到v0,v1寄存器。
17
const-wide/32vx,lit32
存入32位常量到vx,vx+1寄存器,扩展int型常量到long常量。
17024e61bc00-const-wide/32v2,#long12345678//#00bc614e
存入long常量12345678到v2,v3寄存器。
18
const-widevx,lit64
存入64位常量到vx,vx+1寄存器。
1802874b6b5d54dc2b00-const-widev2,#long12345678901234567//#002bdc545d6b4b87
存入long常量12345678901234567到v2,v3寄存器。
19
const-wide/high16vx,lit16
存入16位常量到最高16位的vx,vx+1寄存器,用于初始化double值。
19002440-const-wide/high16v0,#double10.0//#402400000
存入double常量10.0到v0,v1。
1A
const-stringvx,字符串ID
存入字符串常量引用到vx,通过字符串ID或字符串。
1A080000-const-stringv8,""//string@0000
存入string@0000(字符串表#0条目)的引用到v8。
1B
const-string-jumbo
未知注4
1C
const-classvx,类型ID
存入类对象常量到vx,通过类型ID或类型(如Object.class)。
1C000100-const-classv0,Test3//type@0001
存入Test3.class(类型ID表#1条目)的引用到v0。
1D
monitor-entervx
获得vx寄存器中的对象引用的监视器。
1D03-monitor-enterv3
获得v3寄存器中的对象引用的监视器。
1E
monitor-exit
释放vx寄存器中的对象引用的监视器。
1E03-monitor-exitv3
释放v3寄存器中的对象引用的监视器。
1F
check-castvx,类型ID
检查vx寄存器中的对象引用是否可以转换成类型ID对应类型的实例。
如不可转换,抛出ClassCastException异常,否则继续执行。
1F040100-check-castv4,Test3//type@0001
检查v4寄存器中的对象引用是否可以转换成Test3(类型ID表#1条目)的实例。
20
instance-ofvx,vy,类型ID
检查vy寄存器中的对象引用是否是类型ID对应类型的实例,如果是,vx存入非0值,否则vx存入0。
20400100-instance-ofv0,v4,Test3//type@0001
检查v4寄存器中的对象引用是否是Test3(类型ID表#1条目)的实例。
如果是,v0存入非0值,否则v0存入0。
21
array-lengthvx,vy
计算vy寄存器中数组引用的元素长度并将长度存入vx。
2111-array-lengthv0,v1
计算v1寄存器中数组引用的元素长度并将长度存入v0。
22
new-instancevx,类型ID
根据类型ID或类型新建一个对象实例,并将新建的对象的引用存入vx。
22001500-new-instancev0,java.io.FileInputStream//type@0015
实例化java.io.FileInputStream(类型ID表#15H条目)类型,并将其对象引用存入v0。
23
new-arrayvx,vy,类型ID
根据类型ID或类型新建一个数组,vy存入数组的长度,vx存入数组的引用。
23122500-new-arrayv2,v1,char[]//type@0025
新建一个char(类型ID表#25H条目)数组,v1存入数组的长度,v2存入数组的引用。
24
filled-new-array{参数},类型ID
根据类型ID或类型新建一个数组并通过参数填充注5。
新的数组引用可以得到一个move-result-object指令,前提是执行过filled-new-array指令。
2420530D0000-filled-new-array{v0,v0},[I//type@0D53
新建一个int(类型ID表#D53H条目)数组,长度将为2并且2个元素将填充到v0寄存器。
25
filled-new-array-range{vx..vy},类型ID
根据类型ID或类型新建一个数组并以寄存器范围为参数填充。
新的数组引用可以得到一个move-result-object指令,前提是执行过filled-new-array指令。
250306001300-filled-new-array/range{v19..v21},[B//type@0006
新建一个byte(类型ID表#6条目)数组,长度将为3并且3个元素将填充到v19,v20,v21寄存器注4。
26
fill-array-datavx,偏移量
用vx的静态数据填充数组引用。
静态数据的位址是当前指令位置加偏移量的和。
260625000000-fill-array-datav6,00e6//+0025
用当前指令位置+25H的静态数据填充v6寄存器的数组引用。
偏移量是32位的数字,静态数据的存储格式如下:
0003//表类型:
静态数组数据
0400//每个元素的字节数(这个例子是4字节的int型)
0300000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Dalvik 操作 汇总
![提示](https://static.bdocx.com/images/bang_tan.gif)