gpt4 book ai didi

混淆导致VerifyError : Expecting a stackmap frame

转载 作者:行者123 更新时间:2023-12-03 23:24:36 28 4
gpt4 key购买 nike

我们正在使用最新的 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 使用了更严格的验证,并为类引入了堆栈映射来验证代码。所以不知何故,在我的混淆过程中,这张 map 似乎被破坏了,因为当我用 proguard 混淆我的项目时,只会发生这个异常。

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

    所以我想知道其他人是否有类似的错误?或者,如果有人甚至可能知道解决这个问题的特定方法,例如通过调整混淆过程的 proguard 配置?

    最佳答案

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

    您仍然可以尝试 ProGuard 4.11 的测试版,但它在这里不太可能有所作为。如果你把处理过的类文件寄给我,我会调查一下。

    (我是 ProGuard 的开发者)

    关于混淆导致VerifyError : Expecting a stackmap frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19928927/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com