0

当我使用 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,但它没有帮助,因为这条线没有使用任何寄存器。

4

1 回答 1

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。

于 2013-08-26T17:58:32.813 回答