- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 smali 代码,我想在其中的一开始就注入(inject)一个 sleep 函数。为此,我创建了一个只是 hibernate 的应用程序,生成了它的 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
值才能注入(inject)新变量。现在,我想将这段相同的代码添加到另一个应用程序中,但是当我使用这段代码运行这个应用程序时,出现了错误:
10-04 22:53:50.709 4396 4396 E AndroidRuntime: java.lang.VerifyError: Verifier rejected class com.sulctue.beaiasa.hcoisis: void com.sulctue.beaiasa.hcoisis.onCreate() failed to verify: void com.sulctue.beaiasa.hcoisis.onCreate(): [0x2] Rejecting invocation, long or double parameter at index 0 is not a pair: 9 + 1. (declaration of 'com.sulctue.beaiasa.hcoisis' appears in /data/app/com.paranbijuv.aijuy-bovbnI4hv2jswty95nHE9A==/base.apk)
10-04 22:53:50.709 4396 4396 E AndroidRuntime: at java.lang.Class.newInstance(Native Method)
10-04 22:53:50.709 4396 4396 E AndroidRuntime: at 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: at 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(Unknown Source: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 E AndroidRuntime: 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: at java.lang.reflect.Method.invoke(Native Method)
10-04 22:53:50.709 4396 4396 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
10-04 22:53:50.709 4396 4396 E AndroidRuntime: 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 (adj 900): crash
那么,我该如何调用:
invoke-static {v0, v1}, Ljava/lang/Thread;->sleep(J)V
使用 0x2710
的中间值而不是变量 v0
?我试过只调用 invoke-static {0x2710, v1} (...)
但失败并显示与上述相同的错误消息。
最佳答案
无法将常量值直接传递给 Dex 字节码中的函数。一切都必须首先存储在寄存器中。
仅根据错误消息很难判断您做错了什么,但我的猜测是您注入(inject)的局部变量导致注入(inject)代码之后的代码出现问题。也许您不小心覆盖了代码使用的方法参数。您能否发布您收到验证错误的确切代码?
附言如果您尝试运行 invoke-static {0x2710, v1}
,您不应该“得到与上面完全相同的错误”,因为该代码甚至不会汇编。你应该得到一个 smali 错误,所以你正在运行的 apk 可能不是你认为的代码组装的结果。您应该仔细检查您的工具设置并确保您正在安装和运行正确的 apk。
关于java - 如何在 Smali 汇编语言中传递即时值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52657370/
我是一名优秀的程序员,十分优秀!