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