Java层逆向--Dalvik指令集

本文介绍了Dalvik虚拟机的指令集,包括空操作指令、数据操作指令、返回指令、数据定义指令、实例操作指令、数组操作指令、异常指令、跳转指令、比较指令、字段操作指令、方法调用指令、数据转换指令和运算指令。通过这些指令,深入理解Java层的逆向分析。
摘要由CSDN通过智能技术生成

往期推荐

Java层逆向分析-Dalvik字节码

修改资源去广告

修改包名实现分身

篡改Apk名称、图标

AndroidKiller介绍与使用

Dalvik的指令格式:
基础字节码 - 名称后缀/字节码后缀 目的寄存器 源寄存器

(连接符号“- ”在有的指令里是可以不存在的)

名称后缀是wide,表示数据宽度为64位
字节码后缀是from16,表示源寄存器为16位

例如:move-wide/from16 vAA,VBBBB:
move为基础字节码,即opcode。
wide为名称后缀,标识指令操作的数据宽度为64位。
from16为字节码后缀,标识源为一个16位的寄存器引用变量。
vAA为目的寄存器, 它始终在源的前面,取值范围为v0~v255。
vBBBB为源寄存器,取值范围为v0~v65535。

Dalvik 指令集中大多数指令用到了寄存器作为目的操作数或源操作数,其中 A/B/C/D/E/F/G/H 代表一个4位的数值,AA/BB/…/HH代表一个8位的数值,AAAA/BBBB/…/HHHH 代表一个16位的数值。

空操作指令

空操作指令的助记符为nop。它的值为00,通常nop指令被用来做对齐代码之用,无实际操作。

数据操作指令

数据操作指令为move。move 指令根据字节码大小与类型不同,后面会跟上不同的后缀,表达的意义也就不同。

“move vA, vB”:将vB寄存器的值赋给vA寄存器,源寄存器与目的寄存器都为4位。

“move/from16 vAA, vBBBB”:将vBBBB寄存器的值赋给vAA寄存器,寄存器为16位,目的寄存器为8位。

“move/16 vAAAA, vBBBB”:将vBBBB寄存器的值赋给vAAAA寄存器,源寄存器与目的寄存器都为16位。

“move-wide vA, vB”:为4位的寄存器对赋值。源寄存器与目的寄存器都为4位。

“move-object vA, vB”:object是对象的意思,出现这个词即表示为对象赋值。源寄存器与目的寄存器都为4位。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值