Добавить новые регистры на байт-код Dalvik

все. Я встретил проблему с прибором по бат-коду Дальвика.

Байт-код происхождения:

virtual methods .method public onClick(Landroid/view/View;)V .locals 12 .param p1, "v" # Landroid/view/View; ... return-void .end method 

Чтобы что-то напечатать, мне нужно добавить 4 новых регистра. Однако 12 (локальный) +2 (аргументы) +4 (новый)> 16, что приведет к проблеме для некоторой команды.

Итак, я думаю об идее в дупле:

Число целых регистров равно 20. v0-v11 являются локальными, v18-v19 – аргументами.

Сначала перенесите v18-v19 в v12-v13, а аргументы – в v15. К тому же,

Нам нужно изменить p0 на v12, p1 на v13.

Если мы хотим использовать 4 новых регистра, переместите v0-v3 в v14-17. После обработки 4 новых регистров переместите v14-v17 в v0-v3 обратно.

Новый байт-код становится:

 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 

К сожалению, я встретил Java.lang.VerifyError . Может ли кто-нибудь мне помочь? Спасибо.

Solutions Collecting From Web of "Добавить новые регистры на байт-код Dalvik"