2012-01-12 65 views
0

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

+0

“什么是解析这些的标准方法?”您是否问如何组合两个寄存器的值来提供单个64位值来显示? – JesusFreke 2012-01-12 23:42:59

+0

你可以聊天吗?我可以在那里更好地解释它? – 2012-01-12 23:47:03

+0

我创建了一个叫dalvik的房间 – 2012-01-12 23:50:04

回答

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); 
}