2013-08-26 74 views
0

當我用smali到DEX我的MOD文件,我得到這個錯誤:Smali:所有註冊ARGS必須符合4位錯誤

patch\android\view\Choreographer.smali[1392,4] All register args must fit in 4 bits

我設到線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

的問題是在第一行上

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 

的/變體的範圍接受寄存器的連續範圍,並且最多可尋址v65535。

+0

如果您不清楚p *寄存器如何映射到v *寄存器,可以在https://code.google.com/p/smali/wiki/Registers – JesusFreke

+0

找到更多信息謝謝JesusFreke,它確實是你所說的方法有超過16個寄存器(22)。現在我通過你提供的意思來解決問題。不勝感激! – lengxuehx

+0

什麼是invoke-static/range的地址範圍?我正在嘗試使用靜態方法並註冊> v15 – alchemist

相關問題