【问题标题】:How are variable length arguments parsed while parsing dalvik instructions?解析 dalvik 指令时如何解析可变长度参数?
【发布时间】:2012-01-12 23:21:02
【问题描述】:

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

【问题讨论】:

  • "解析这些的标准方法是什么?"您是在问如何组合这对中的 2 个寄存器的值以得出要显示的单个 64 位值?
  • 你能来聊天吗?我可以在那里更好地解释它吗?
  • 我创建了一个名为 dalvik 的房间
  • 但是,在不使用操作码本身的情况下,有没有办法找出是否正在使用 2 个寄存器或一个?
  • 2个寄存器,我的意思是一个操作数。

标签: dalvik opcode instructions


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 2020-10-25
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多