uptodown android instrumentation

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.