Dalvik汇编语言基础
Dalvik虚拟机为自己设计了一套指令集,并制定了自己的指令格式和调用规范。
位描述约定如下:
- 每16位的字采用空格分隔开来
- 每个字母表示4位,每个字母按顺序从高字节开始,排列到低字节。每4位之间可能使用竖线「|」表示不同的内容。
- 顺序采用A~Z的单个大写字母作为一个4位操作码,op表示一个8位的操作码。
- 「∅」来表示这字段所有位为0值。
以「A|G|op BBBB F|E|D|C」为例,
指令中间两个空格每个分开的部分大小为16位;
第一个16位A|G|op,高8位由A和G组成,低字节由操作码op组成;
第二个16位BBBB表示一个16位的偏移值;
第三个16位由F、E、D、C四个字节组成,在这里他们表示寄存器参数。
单纯通过位标识还无法确定一条指令,必须通过指令格式标识来指定指令的格式编码。在书的38页,这里不摘录了。
DEX文件反汇编工具
目前主流的DEX可执行文件反汇编工具有BakSmali何Dedexer。其中BakSmali还支持打包反汇编代码重新生成DEX文件,使用更广泛。