2012-01-12 60 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); 
}