android - uptodown - Añadir nuevos registros en el bytecode Dalvik
dalvik dex file (1)
Los registros no son intercambiables. Algunas instrucciones aceptan solo los registros 0-15, otras 0-255, por lo que este enfoque no funcionaría.
todo el mundo. Me encontré con un problema en la instrumentación en el bytecode Dalvik.
El código de origen es:
virtual methods
.method public onClick(Landroid/view/View;)V
.locals 12
.param p1, "v" # Landroid/view/View;
...
return-void
.end method
Para imprimir algo, necesito agregar 4 nuevos registros. Sin embargo, 12 (local) +2 (argumentos) +4 (nuevo)> 16 lo que dará lugar a un problema para algunas instrucciones.
Por lo tanto, pienso en una idea de la siguiente manera:
El número de registros completos es 20. v0-v11 son locales, v18-v19 son argumentos.
Mueva el v18-v19 a v12-v13 al principio y los registros de argumentos están dentro de v15. Adicionalmente,
necesitamos modificar p0 a v12, p1 a v13.
Si queremos usar 4 registros nuevos, mueva v0-v3 a v14-17. Después de manejar 4 registros nuevos, mueva v14-v17 a v0-v3 hacia atrás.
El nuevo bytecode se convierte en:
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
Desafortunadamente, me encontré con Java.lang.VerifyError
. ¿Alguien podría ayudarme? Gracias.