Android-редактирование smali: младшие биты должны быть нулем

1

невозможно перепаковать файлы смали код ошибки: apktool недопустимое литеральное значение 16 бит должны быть обнулены.

какое значение регистра следует использовать вместо "" const/high16 v4 "" "с замененным значением 0x7f04006a

.line 11
move-object v3, v0

move-object v4, v1

invoke-super {v3, v4}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

.line 12
move-object v3, v0

const/high16 v4, 0x7f030000

invoke-virtual {v3, v4}, Lcom/mycompany/myapp/MainActivity;->setContentView(I)V

return-void

метод .end

Мой открытый идентификатор: <public type="layout" name="main" id="0x7f04006a"/>

Теги:
smali

1 ответ

0

Инструкция const/high16 принимает 16-битный литерал, сдвигает его влево на 16 бит и загружает в указанный регистр.

Синтаксис smali для этой инструкции использует литеральное значение после смещения. Таким образом, в вашем примере const/high16 v4, 0x7f030000, в необработанном байт-коде фактический буквальный аргумент инструкции будет 0x7f03. Но в синтаксисе smali он указывается в виде пост-сдвинутой формы: 0x7f030000. Поскольку это пост-сдвинутая форма, последние 4 шестнадцатеричных цифры всегда должны быть 0.

Если вы хотите загрузить литеральное значение, которое не соответствует этим требованиям, вы должны использовать другую инструкцию, например, инструкцию const.

const v4, 0x7f04006a
  • 0
    после установки conts v4, x70f04006a apk компилируется, но основное действие не начинается здесь - это журнал. - >> 12-28 11: 20: 57.455 E / AndroidRuntime (9521): java.lang.VerifyError: верификатор отклонил класс com.mycompany.myapp2.MainActivity: void com.mycompany.myapp2.MainActivity.onCreate (android.os. Bundle): [0xFFFFFFFF] зарегистрировать индекс вне диапазона (7> = 7) (объявление com.mycompany.myapp2.MainActivity)
  • 0
    какие еще изменения вы сделали?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню