Dalvik指令集

Posted Msnow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dalvik指令集相关的知识,希望对你有一定的参考价值。

类型

语法 含义
V void,只用于返回值类型
Z boolean
B byte
S short
C char
I int
J long
F float
D double
L Java类类型
[ 数组类型

方法

方法格式:Lpackage/name/ObjectName;->MethodName(III)Z

Lpackage/name/ObjectName 所属类

MethodName 方法名

III 方法的参数(三个整型参数)

Z 方法的返回类型(boolean类型)

字段(变量)

Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;

Lpackage/name/ObjectName 所属类

FieldName 字段名

Ljava/lang/String; 字段类型

空操作指令

nop

 

数据操作指令

返回指令

数据定义指令

数据定义指令用来定义程序中用到的常量、字符串、类等数据。基础字节码为const

"const/4vA,#+B" 将数值符号扩展为32位后赋给寄存器vA。

"const/16 VAA,#+BBBB" 将数值符号扩展为32位后赋给寄存器vAA。

"const vAA,#+BBBBBBBB" 将数值赋给寄存器vAA。

"const/hight16 vAA,#+BBBB0000" 将数值右边零扩展为32位后赋给寄存器vAA。

#"const-wide/16 vAA,#+BBBB" 将数值符号扩展为64位后赋给寄存器对vAA。

#"const-wide/32 vAA,#+BBBBBBBB" 将数值符号扩展为64位后赋给寄存器对vAA。

"const-wide vAA,#+BBBBBBBBBBBBBBBB" 将数值赋给寄存器对vAA。

"const-wide/high16 vAA,#+BBBB000000000000" 将数值右边零扩展为64位后赋给寄存器对vAA

"const-string vAA,[email protected]" 通过字符串索引构造一个字符串并赋给寄存器vAA。

"const-class vAA,[email protected]" 通过类型索引获取一个类引用并赋给寄存器vAA。

"const-class/jumbo vAAAA,[email protected]" 通过给定的类型索引获取一个类引用并赋给寄存器vAAAA。这条指令占用俩个字节,值为0x00ff(android 4.0 新增)

 

 

 

锁指令

实例操作指令

数据操作指令

异常指令

跳转指令

比较指令

字段操作指令

方法调用指令

调用类实例的方法,基础指令为invoke

形式:"invoke-king{vC,vD,vE,vF,vG},[email protected]"和"invoke-kind/range{vCCCC..vNNNN},[email protected]"

后者在设置参数寄存器时使用了range来指定寄存器的范围。

"invoke-virtual"或"invoke-virtual/range" 调用实例的虚方法。

"invoke-super"或"invoke-super/range" 调用实例的父方法。

"invoke-direct"或"invoke-direct/range" 调用实例的直接方法。

"invoke-static"或"invoke-static/range" 调用实例的静态方法。

"invoke-interface"或"invoke-interface/range" 调用实例的接口方法。

Android4.0新增"invoke-kind/jumpbo{vCCCC..vNNN},[email protected]"—寄存器值与指令的索引取值范围更大。

方法调用的返回值必须使用move-result*指令来获取。

invoke-static{},Landroid/os/Parcel;->obtain()Landroid/os/Parcel;

move-resule-object v0

数据转换指令

数据运算指令

AA

以上是关于Dalvik指令集的主要内容,如果未能解决你的问题,请参考以下文章

全网最全 Dalvik 指令集解析 !

Android 逆向笔记 —— 说说 Dalvik 及其指令集

JVM和Dalvik虚拟机的区别

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

深入理解Dalvik虚拟机- 解释器的执行机制