Dalvik字节码即Smali(索马里?哈哈)汇编.不明白的地方看上一节:
Android软件安全与逆向分析入门-壹-初识反编译
下面是浓缩的精华:
Dalvik指令集有13种指令,比x86汇编好学的多.另外Android4.0之前没有两个字节的指令,新增的两个字节长度的指令一般是用来指向更大数据或者操作范围的.
但是你想学会它,就得在了解它后去用它,《Android软件安全与逆向分析》P52.有例子.手写Dalvik版HelloWorld.
以下大部分是主命令,主命令前后为修饰命令.
- 数据操作指令:
move - 返回:
return - 数据定义指令:
const - 锁指令:
monitor-enter vAA #为指定的对象获取锁
monitor-exit vAA #释放指定的对象的锁 - 实例操作指令:
类型转换,检查及新建等. - 数组操作指令:
获取数组长度,新建数组,数组赋值,数组元素取值与赋值. - 异常指令:
throw vAA #寄存器中指定类型的异常 - 跳转指令:
goto
switch
if-test #两个寄存器比较
if-testz #和零比较 - 比较指令:
cmp - 字段操作指令:
对对象实例的字段进行读写操作. - 方法调用指令:
invoke 调用类实例的方法.
实例方法类型有:
- 虚方法
- 父类方法
- 直接方法
- 静态方法
- 数据转换指令:
见名知意. - 数据运算指令:
……
好的.今天就简单介绍到这里.咱们下节见.