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 指令操作还是很复杂,需要进一步探索,以后有收获再补充!