【问题标题】:Running .dex file (written in smali) in Dalvik vm turns out to have a Verification Error在 Dalvik vm 中运行 .dex 文件(用 smali 编写)结果出现验证错误
【发布时间】:2015-12-08 14:36:20
【问题描述】:

这个“HelloWorld”将两个数字相加并打印出答案

.class public LHelloWorld;
.super Ljava/lang/Object;
.method public static main([Ljava/lang/String;)V
  .registers 5
  .parameter
  .prologue
  const v0, 0x2
  const v1, 0x4
  add-int/2addr v0, v1
  new-instance v3, Ljava/lang/StringBuilder;
  invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
  const-string v3, "The result is : "
  sget-object v2, Ljava/lang/System;->out:Ljava/io/PrintStream;
  invoke-virtual {v2, v3}, Ljava/lang/PrintStream;->print(Ljava/lang/String;)V
  invoke-virtual {v2, v0}, Ljava/lang/PrintStream;->println(Ljava/lang/Integer;)V
  return-void
.end method

当我在我的 Android 设备上运行 classes.dex 时,adb shell 会给我一个错误信息

Unable to find static main(String[]) in 'HelloWorld'
java.lang.VerifyError: Verifier rejected class HelloWorld due to bad method void HelloWorld.main(java.lang.String[]) (declaration of 'HelloW
orld' appears in /storage/extSdCard/HelloWorld.zip)

我真的不明白为什么会出现错误。

请帮忙,谢谢。

【问题讨论】:

  • 当它运行 dexopt 或 dex2oat 时,您要查找更早出现的 art/dalvik 验证日志。这些将指出特定的指令,即验证失败,并给出一些关于失败原因的指示。
  • @JesusFreke 我怎样才能得到你所说的那个日志?请您详细解释一下,谢谢。
  • 日志应该在 logcat 中。 “亚行日志猫”
  • @JesusFreke 谢谢!????

标签: android dalvik smali


【解决方案1】:

我发现问题出在哪里: 打印 int 数字(不是 Integer 对象)时,参数类型应为 'I' 而不是 'Java/lang/Integer'。

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 2012-04-23
    • 2018-05-28
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多