解析dalvik指令时如何解析变长参数?

时间:2012-01-12 23:21:02

标签: dalvik opcode instructions

move vA, vBmove-wide vA, vB都涉及相同的操作和相同的操作数。除了操作码,一切都是一样的。我处于需要打印应用程序中的指令所使用的操作数的情况。 所以,当我看到指令move vA, vB时,我应该打印move va(*contents of va*), vb(*contents of vb*)
这在4字节寄存器的情况下工作正常。但是当我遇到move-wide指令时,我应该打印vA的内容和下一个虚拟寄存器的内容.vB的内容和下一个虚拟寄存器的内容。
解析这些的标准方法是什么?

1 个答案:

答案 0 :(得分:0)

由于Dalvik和dx都是开源的,因此回答涉及dex文件的问题的最佳方法是检查它们的来源。 Dx解析DecodedInstruction.java中的指令。它首先解码操作码,然后使用操作码通知解码剩余的指令。

public static DecodedInstruction decode(CodeInput in) throws EOFException {
    int opcodeUnit = in.read();
    int opcode = Opcodes.extractOpcodeFromUnit(opcodeUnit);
    InstructionCodec format = OpcodeInfo.getFormat(opcode);
    return format.decode(opcodeUnit, in);
}