Как анализируются аргументы переменной длины при разборе инструкций dalvik? - PullRequest
0 голосов
/ 13 января 2012

И move vA, vB, и move-wide vA, vB включают в себя одинаковые операции и одинаковые операнды. За исключением кодов операций все одинаково. Я нахожусь в ситуации, когда мне нужно напечатать операнды, используемые инструкциями в приложении. Поэтому, когда я вижу инструкцию move vA, vB, я должен напечатать move va(*contents of va*), vb(*contents of vb*).
Это прекрасно работает в случае 4-байтовых регистров. Но когда я сталкиваюсь с move-wide инструкциями, я должен напечатать содержимое vA и содержимое следующего виртуального регистра., Содержимое vB и содержимое следующего виртуального регистра.
Какой стандартный способ их анализа?

1 Ответ

0 голосов
/ 14 января 2012

Поскольку 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);
}
...