在Dalvik字节码上添加新寄存器

use*_*149 18 instrumentation android

大家.我在Dalvik字节码的仪器上遇到了问题.

原始字节码是:

virtual methods

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

    .locals 12

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

...

    return-void

.end method
Run Code Online (Sandbox Code Playgroud)

要打印一些东西,我需要添加4个新寄存器.但是,12(本地)+2(参数)+4(新)> 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
Run Code Online (Sandbox Code Playgroud)

不幸的是,我遇到了Java.lang.VerifyError.谁能帮助我?谢谢.

Ste*_*nko 1

寄存器不可互换。有些指令只接受寄存器 0-15,其他指令则接受 0-255,因此这种方法不起作用。