【问题标题】:Add new registers on Dalvik bytecode在 Dalvik 字节码上添加新寄存器
【发布时间】:2014-04-04 02:11:20
【问题描述】:

每个人。我在 Dalvik 字节码上遇到了一个问题。

原始字节码是:

virtual methods

.method public onClick(Landroid/view/View;)V

    .locals 12

    .param p1, "v"    # Landroid/view/View;

...

    return-void

.end method

要打印一些东西,我需要添加 4 个新寄存器。但是 12(local)+2(arguments)+4(new)>16 会导致某些指令出现问题。

所以,我想到了一个自爆的想法:

整个寄存器的数量是20个。v0-v11是本地的,v18-v19是参数。

首先将 v18-v19 移动到 v12-v13,参数寄存器在 v15 内。此外,

我们需要修改p0到v12,p1到v13。

如果我们要使用 4 个新寄存器,请将 v0-v3 移至 v14-17。处理完 4 个新寄存器后,将 v14-v17 移回 v0-v3。

新的字节码变成:

virtual methods

.method public onClick(Landroid/view/View;)V

    .locals 18

    .param p1, "v"    # Landroid/view/View;

move v12, v18

move v13, v19

...

//want to use 4 new registers

move v14, v0

move v15, v1

move v16, v2

move v17, v3

//use 4 new registers

move v0, v14

move v1, v15

move v2, v16

move v3, v17

    return-void

.end method

不幸的是,我遇到了Java.lang.VerifyError。有人可以帮我吗?谢谢。

【问题讨论】:

    标签: android instrumentation


    【解决方案1】:

    寄存器不可互换。有些指令只接受寄存器 0-15,有些则接受 0-255,所以这种方法行不通。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      相关资源
      最近更新 更多