[英]Smali toast show code injection error - register v1 type Reference mismatch?
[英]android dalvik verification error: register1 v1 type 0, wanted ref
我一直在学习如何编码smali文件,并且我创建了一个使用字符串参数并将其放入日志的特定方法,它的java等效项如下所示:
public void log(String param){
Log.d(param, param);
}
当我再次进行平滑处理并签署了apk时,我在logCat中收到以下错误:
10-05 21:52:42.081: W/dalvikvm(32021): VFY: register1 v2 type 0, wanted ref
10-05 21:52:42.081: W/dalvikvm(32021): VFY: bad arg 0 (into Ljava/lang/String;)
10-05 21:52:42.081: W/dalvikvm(32021): VFY: rejecting call to Landroid/util/Log;.d (Ljava/lang/String;Ljava/lang/String;)I
10-05 21:52:42.081: W/dalvikvm(32021): VFY: rejecting opcode 0x71 at 0x0000
10-05 21:52:42.081: W/dalvikvm(32021): VFY: rejected Lcom/shqipe/worthstream/utils/Utils;.log (Ljava/lang/String;)V
10-05 21:52:42.081: W/dalvikvm(32021): Verifier rejected class Lcom/shqipe/worthstream/utils/Utils;
10-05 21:52:42.081: D/AndroidRuntime(32021): Shutting down VM
这是smali文件中的方法:
.method public static log(Ljava/lang/String;)V
.registers 2
.parameter "paramString"
.prologue
invoke-static {p1, p1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
.line 63
return-void
.end method
谁能向我解释我该如何调试此错误?
在这种情况下,p1是无效的寄存器。 实际上,baksmali应该已经抓住了这一点! :)
使用.registers 2和单个参数,您拥有寄存器v0和v1,其中p0别名为v1。 根据您的.registers指令,p1实际上是v2,这是不允许的。
你想要的是
invoke-static {p0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
或同等
invoke-static {v1, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
关于如何调试此类错误,您可能要做的最好的事情是在dalvik源代码中查找看到的VFY错误字符串,并准确确定错误消息的含义(即,错误条件是什么)触发),以及在字节码中发生错误的位置。
为了确定错误发生的字节码的位置,请查看错误行
10-05 21:52:42.081: W/dalvikvm(32021): VFY: rejecting opcode 0x71 at 0x0000
10-05 21:52:42.081: W/dalvikvm(32021): VFY: rejected Lcom/shqipe/worthstream/utils/Utils;.log (Ljava/lang/String;)V
这表明错误发生在Lcom/shqipe/worthstream/utils/Utils;.log (Ljava/lang/String;)V
方法中,字节码偏移量为0(即第一条指令)。 但是,如果不清楚所指的是哪条指令,则可以对baksmali使用-f选项,这将导致它在每条指令之前添加字节码偏移量作为注释。
只是一个除了JesusFreke的回答,P0未引用的Java this
的例子作为函数是静态的。 因此,论点始于p0,正如JesusFreke所说。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.