Dalvik Verifier: register1 v25 type 0, требуется ссылка - PullRequest
0 голосов
/ 02 марта 2019

У меня есть следующий код Smali:

.method private k(I)V
.registers 27 (original) 29 (after)

...
#@68a
invoke-direct/range {v24 .. v25}, Landroid/widget/LinearLayout;-><init>(Landroid/content/Context;)V
...

Это отклонено верификатором Dalvik.0x76 - прямое обращение / диапазон.

dalvikvm: VFY: register1 v25 type 0, wanted ref
dalvikvm: VFY: bad arg 1 (into Landroid/content/Context;)
dalvikvm: VFY:  rejecting call to Landroid/widget/LinearLayout;.<init> (Landroid/content/Context;)V
dalvikvm: VFY:  rejecting opcode 0x76 at 0x068a
dalvikvm: VFY:  rejected Lcom/pocketwood/myav/MyAV;.k (I)V
dalvikvm: Verifier rejected class Lcom/pocketwood/myav/MyAV;
dalvikvm: Class init failed in newInstance call (Lcom/pocketwood/myav/MyAV;)

Интересно, что v25 не используется ни в одной инструкции выше 68a!Исходный APK работает нормально, но перепакован с smali, верификатор отклоняет класс MyAV.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Решение: v26 - это p1, а v25 - это p0.Из-за изменения счетчик регистров был расширен до 29, и из-за этого v25 больше не равен p0.

0 голосов
/ 02 марта 2019

Я подозреваю, что вы указали неверный код.Если вы посмотрите на сообщение об ошибке, оно упоминает код операции 0x76, который равен invoke-direct/range.В предоставленном вами фрагменте кода нет инструкции invoke-direct/range, поэтому, если не происходит какой-то действительно странный код, это не может быть кодом, вызывающим проблему.

Также посмотритепо названию метода в сообщении об ошибке: Lcom/pocketwood/myav/MyAV;.k (I)V.Есть то, что выглядит как пробел после k.Сам символ пробела не является допустимым символом в имени метода, но, может быть, это действительно какой-то другой пробелоподобный символ Юникода?

Nevermind.Это пространство, похоже, запекается в сообщении об ошибке .


Наконец, смещение, указанное в сообщении об ошибке (at 0x068a), должно быть смещением кода инструкции в содержащем методе.Вы можете использовать опцию baksmali --offsets при разборке файла dex, и baksmali добавит комментарий со смещением кода перед каждой инструкцией.Хотя я не уверен, что это смещение, если это смещение в байтах или кодовых единицах (16 бит), поэтому оно может быть отключено с коэффициентом 2 *.

...