Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Регистры не взаимозаменяемы. В некоторых инструкциях принимаются только регистры 0-15, другие 0-255, поэтому этот подход не будет работать.