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

大家。 我在Dalvik字节码的仪表上遇到了一个问题。

起始字节码是:

virtual methods .method public onClick(Landroid/view/View;)V .locals 12 .param p1, "v" # Landroid/view/View; ... return-void .end method 

要打印一些东西,我需要添加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 

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

Solutions Collecting From Web of "在Dalvik字节码上添加新的寄存器"