Smali:所有寄存器args必须符合4位错误

时间:2013-08-26 14:49:54

标签: android smali

当我使用smali来解释我的mod文件时,我收到了这个错误:

  

patch \ android \ view \ Choreographer.smali [1392,4]所有注册参数必须   适合4位

我找到第1392行,发现:

invoke-direct {p0, p1, p2, p3}, Landroid/view/Choreographer;->MyFunc(JI)V 
invoke-static {}, Ljava/lang/System;->nanoTime()J  (line 1392)

move-result-wide v11

有人知道我该如何修复它?我已经阅读了这篇文章http://forum.xda-developers.com/showthread.php?t=733275,但它并没有帮助,因为这一行 没有使用任何登记册。

1 个答案:

答案 0 :(得分:1)

问题出在第一行

invoke-direct {p0, p1, p2, p3}, Landroid/view/Choreographer;->MyFunc(JI)V 

您只能使用寄存器v0-v15,因为数字寄存器索引必须符合4位。该方法显然具有大量寄存器,因此至少p3映射到高于v15的寄存器。

幸运的是,寄存器是连续的,因此修复很简单

invoke-direct/range {p0 .. p3}, Landroid/view/Choreographer;->MyFunc(JI)V 

/ range变量接受连续范围的寄存器,最多可以寻址v65535。