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