Intereting Posts
Параметры Retrofit – @Body нельзя использовать с форматированием или многочастной кодировкой Размер значка панели действий в Android 4.2 Как показать клавиатуру номера в EditText в Android? Canvas 'drawLine и drawRect не включают конечную позицию? Эмулятор Android: как я могу получить список запущенных сервисов Экран выбора уровня, например, «Башня фермы», «Злые птицы», «Отрезать веревку» и т. Д.? Циркуляр ViewPager. Фрагменты не работают так, как они должны были после первого раунда Play Store Бета-тестирование не работает Рисовать круговую диаграмму в Android? Как установить разделительную линию между линиями TextView Меню Android Options в фрагменте Желательно ли использовать Activity.onAttachFragment или Fragment.onAttach для связи между Activity и вложенным фрагментом? Facebook после входа не возвращается, но снова спрашивает логин Android: управление эмулятором отключено в перспективе DDMS Не удается разрешить символ «AppCompatActivity»

Добавить новые регистры на байт-код 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"