У меня есть код 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} (...)
, но потерпел неудачу с тем же сообщением об ошибке, что и выше.