alle. Ich habe ein Problem bei der Instrumentierung mit Dalvik-Bytecode festgestellt.Hinzufügen neuer Register auf Dalvik bytecode
Der Ursprung Bytecode ist:
virtual methods
.method public onClick(Landroid/view/View;)V
.locals 12
.param p1, "v" # Landroid/view/View;
...
return-void
.end method
etwas zu drucken, ich brauche 4 neue Register hinzuzufügen. Jedoch 12 (lokal) +2 (Argumente) +4 (neu)> 16, was zu einem Problem für einen Befehl führen wird.
So, denke ich an eine Idee in Weg blies:
Die Anzahl der ganzen Register sind 20 v0-v11 sind lokal, v18-v19 Argumente sind.
Verschieben Sie zunächst die v18-v19 zu v12-v13, und die Argumente befinden sich in v15. Zusätzlich müssen
wir müssen p0 bis v12, p1 bis v13 ändern.
Wenn wir 4 neue Register verwenden möchten, verschieben Sie v0-v3 zu v14-17. Verschieben Sie nach der Verarbeitung von 4 neuen Registern v14-v17 nach v0-v3 zurück.
Die neue Bytecode wird:
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
Leider traf ich Java.lang.VerifyError
. Könnte mir jemand helfen? Vielen Dank.