2014-04-04 11 views
18

tutti. Ho incontrato un problema sulla strumentazione sul bytecode Dalvik.Aggiungi nuovi registri sul bytecode Dalvik

Il bytecode origine è:

virtual methods 

.method public onClick(Landroid/view/View;)V 

    .locals 12 

    .param p1, "v" # Landroid/view/View; 

... 

    return-void 

.end method 

di stampare qualcosa, ho bisogno di aggiungere 4 nuovi registri. Tuttavia, 12 (locale) +2 (argomenti) +4 (nuovo)> 16 che porteranno a problemi per alcune istruzioni.

Quindi, penso di un'idea in modo soffiò:

Il numero di registri interi sono 20. V0-V11 sono locali, V18-V19 sono argomenti.

Spostare inizialmente da v18-v19 a v12-v13 e i registri degli argomenti sono all'interno di v15. Inoltre,

dobbiamo modificare p0 in v12, p1 in v13.

Se si desidera utilizzare 4 nuovi registri, spostare v0-v3 in v14-17. Dopo aver gestito 4 nuovi registri, sposta v14-v17 su v0-v3.

Il nuovo bytecode diventa:

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 

Purtroppo, ho incontrato Java.lang.VerifyError. Qualcuno può aiutarmi? Grazie.

risposta

1

I registri non sono intercambiabili. Alcune istruzioni accettano solo registri 0-15, altri 0-255, quindi questo approccio non funzionerebbe.

Problemi correlati