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 に答える