加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

混淆造成VerifyError:期望一个堆栈图框架

发布时间:2020-12-14 05:12:08 所属栏目:Java 来源:网络整理
导读:我们正在使用最新的JDK 7(u45)和ProGuard 4.10版 最近我们的分发失败,混淆后,出现以下错误: Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame atbranch target 155Exception Details: Location: com/bla/bla/service/ioc/Spr
我们正在使用最新的JDK 7(u45)和ProGuard 4.10版

最近我们的分发失败,混淆后,出现以下错误:

Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at
branch target 155
Exception Details:
  Location:
    com/bla/bla/service/ioc/SpringBootstrap.c()V @0: getstatic
  Reason:
    Expected stackmap frame at this location.
  Bytecode:
    0000000: b200 73b6 008b 9900 82b2 0073 b800 933b
    0000010: 1a99 0074 b200 73b6 008d 9900 6bb2 0074
    0000020: 1221 b600 cfb8 0092 4c2b b600 9c12 1db9
    ...
  Exception Handler Table:
    bci [0,152] => handler: 155

        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

我在StackOverflow上发现了关于这个主题的几个讨论,比如

> java-lang-verifyerror-expecting-a-stackmap-frame-at-branch-target-jdk-1-7
> java-lang-verifyerror-expecting-a-stackmap-frame
> understanding-how-to-resolve-inconsistent-stackmap-frames-exception
> java-7-inconsistent-stackmap-frames-need-help-understanding-why-solution-wor

从我所理解的是,java 7使用更严格的验证,并为类验证代码引入了堆栈映射.所以在我的混淆过程中,这个地图似乎已经被破坏了,因为只有这个异常发生,当我用proguard模糊我的项目时.

使用-XX禁用验证:-UseSplitVerifier并启动构建的jar有帮助,但我不确定是否应该是处理此问题的方式.

所以我想知道其他人是否有一个模拟错误?或者如果有人甚至可以知道一种解决这个问题的具体方法,例如通过调整混淆过程的proguard konfiguration?

解决方法

我假设你没有指定-dontpreverify?该选项几乎肯定会导致这些错误,因为它会停止ProGuard更新StackMapTable属性.该属性在Java 6中是可选的,但在Java 7中是必需的.

您仍然可以尝试ProGuard 4.11的测试版本,但它不太可能在这里有所作为.如果你邮寄我处理的类文件,我会研究一下.

(我是ProGuard的开发人员)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读