все. Я встретил проблему с инструментами по байт-коду Дальвика.
Байт-код происхождения:
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
. Может ли кто-нибудь мне помочь? Спасибо.