Dalvik 指令学习

 Dalvik 指令可在在 android2.32\dalvik\docs\opcodes 中看到很详细的介绍

网上也有很多参考资料,比如 http://blog.csdn.net/hlchou/article/details/6303566

也可以在源码中 \android2.32\dalvik\libdex\OpCode.h 能找到很详细的定义

 

通过对源码的分析及相关资料搜索,再进行了一些试验,现有一些总结,以做备忘

 

指令,在代码中常称作 opcode,即:操作码

指令的宽度是 16Bites

在 Dalvik 中每一个指令的作用会由指令和相关数据组合而成。组合的方式有很多种,可参见源码文档: android2.32\dalvik\docs\dalvik-bytecode.html

现把常用的一些指令进行示例说明:

 

指令 + 寄存器

0e 00 => return-void 

Java 中的 return,固定不变数据 0

 

0f 01 => return v1

Java 中的 return 基本数据类型,数据存储在寄存器中 v1 中, 后面的数据是寄存器标识, 0f 04 就是 return v4

 

11 01 => return-object v1

Java 中的 return 类对像,类对像存储在 v1 中,数字如上

 

还有好多格式,可以参见文档。

 

 

下面说一下函数调用时寄存器状况

public int AFunc(int a, int b) {
  int c = 10;
  return a + b;
 }

 

把该类反编译成 smali ,该方法会导致使用了5个寄存器

v0 为 c

v1 为 a+b 的临时使用寄存器

v2 为 类对像自己

v3 为 参数 b

v4 为 参数 a

 

反回值用的是 return 寄存器 指令

 

看来 Dalvik 指令操作还是很复杂,需要进一步探索,以后有收获再补充!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值