0

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

4

1 回答 1

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);
}
于 2012-01-14T13:53:57.833 回答