Как передать непосредственные значения на языке Smali Assembly? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть код smali, в который я хочу добавить функцию сна в самом начале.Для этого я создал приложение, которое просто спит, сгенерировало его smali и скопировал в приложение в качестве первых инструкций метода onCreate и сработало отлично, сгенерированный код был:

.locals 2
const-wide/16 v0, 0x2710

:try_start_0
invoke-static {v0, v1}, Ljava/lang/Thread;->sleep(J)V
:try_end_0
.catch Ljava/lang/InterruptedException; {:try_start_0 .. :try_end_0} :catch_0

:catch_0
//code continues here

Я тестировал в приложении, и оно работало, действительно просидел 0x2710 милисекунд (10 секунд).Обратите внимание, что мне пришлось изменить значение locals, чтобы добавить новую переменную.Теперь я хочу добавить этот же кусок кода в другое приложение, но когда я запускаю это приложение с этим кодом, я получаю сообщение об ошибке:

10-04 22: 53: 50.709 4396 4396 E AndroidRuntime:java.lang.VerifyError: Verifier отклонил класс com.sulctue.beaiasa.hcoisis: void com.sulctue.beaiasa.hcoisis.onCreate () не удалось проверить: void com.sulctue.beaiasa.hcoisis.onCreate (): [0x2] Отклонениепараметр вызова, long или double в индексе 0 не является парой: 9 + 1. (объявление 'com.sulctue.beaiasa.hcoisis' появляется в /data/app/com.paranbijuv.aijuy-bovbnI4hv2jswty95nHE9A==/base.apk)
10-04 22: 53: 50.709 4396 4396 E AndroidRuntime: на java.lang.Class.newInstance (собственный метод)
10-04 22: 53: 50.709 4396 4396 E AndroidRuntime: на android.app.Instrumentation.newApplication (Instrumentation.java:1102)
10-04 22: 53: 50.709 4396 4396 E AndroidRuntime: at android.app.Instrumentation.newApplication (Instrumentation.java:1087)
10-04 22:53: 50.709 4396 4396 E AndroidRuntime: на android.app.LoadedApk.makeApplication (LoadedApk.java:983)
10-04 22: 53: 50.709 4396 4396 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication (ActivityThread.java:5715)
10-04 22:53: 50.709 4396 4396 E AndroidRuntime: at android.app.ActivityThread.-wrap1 (неизвестный источник: 0)
10-04 22: 53: 50.709 4396 4396 E AndroidRuntime: at android.app.ActivityThread $ H.handleMessage (ActivityThread.java: 1656)
10-04 22: 53: 50,709 4396 4396 E AndroidRuntime: at android.os.Handler.dispatchMessage (Handler.java:106)
10-04 22: 53: 50,709 4396 4396 EAndroidRuntime: at android.os.Looper.loop (Looper.java:164)
10-04 22: 53: 50.709 4396 4396 E AndroidRuntime: at android.app.ActivityThread.main (ActivityThread.java:6494)
10-04 22: 53: 50.709 4396 4396 E AndroidRuntime: на java.lang.reflect.Method.invoke (собственный метод)
10-04 22: 53: 50.709 4396 4396 E AndroidRuntime: на com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:438)
10-04 22: 53: 50,709 4396 4396 EAndroidRuntime: at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)
10-04 22: 53: 53.470 1656 1907 I ActivityManager: Killing 4396: com.paranbijuv.aijuy / u0a79 (прил. 900): crash

Итак, как мне просто вызвать:

invoke-static {v0, v1}, Ljava/lang/Thread;->sleep(J)V 

с немедленным значением 0x2710 вместо переменной v0?Я попытался просто позвонить invoke-static {0x2710, v1} (...), но потерпел неудачу с тем же сообщением об ошибке, что и выше.

1 Ответ

0 голосов
/ 05 октября 2018

Нет способа передать константные значения непосредственно в функцию в байт-коде Dex.Сначала все должно быть сохранено в регистре.

Трудно сказать, что вы сделали неправильно, основываясь только на сообщении об ошибке, но я предполагаю, что введенные вами локальные данные вызывают проблемы с кодом, который следует вашемувведенный код.Возможно, вы случайно перезаписываете параметр метода, который использует код.Не могли бы вы опубликовать точный код, для которого вы получаете ошибку подтверждения?

PS Если вы попытались запустить invoke-static {0x2710, v1}, вы не должны "получать точно такую ​​же ошибку, как указано выше", потому что этот код выиграл "т даже собрать.Вы должны были получить ошибку smali, поэтому вполне возможно, что используемый вами apk не является результатом сборки кода, который, как вы думаете, есть.Вы должны дважды проверить настройки вашего инструмента и убедиться, что вы устанавливаете и запускаете правильный apk.

...