首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混淆导致VerifyError:期望一个堆栈映射帧

混淆导致VerifyError:期望一个堆栈映射帧
EN

Stack Overflow用户
提问于 2013-11-12 12:15:13
回答 3查看 9.1K关注 0票数 15

我们正在使用最新的JDK 7 (u45)和ProGuard版本4.10

最近,在混淆发行版之后,启动发行版失败,出现以下错误:

代码语言:javascript
复制
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 7使用了更严格的验证,并为类引入了一个堆栈映射来验证代码。因此,在我的混淆过程中,这个映射似乎被破坏了,因为只有这个异常发生了,当我用project混淆我的项目时。

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

所以我想知道是否还有其他人犯了模拟错误?或者,如果有人可能知道解决这一问题的具体方法,例如,为混淆过程调整前护卫配置?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-12 19:13:36

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

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

(我是ProGuard的开发人员)

票数 30
EN

Stack Overflow用户

发布于 2016-01-05 11:25:52

如果你们还没有找到解决方案,你们可以试着检查一下你们是否有-microedition选项。下面是为什么它与StackMap有关。删除这个选项为我解决了这个问题。

票数 0
EN

Stack Overflow用户

发布于 2016-06-09 22:57:37

在将应用程序从1.6迁移到1.7时,我也面临着同样的挑战。经过巨大的斗争,我们找到了解决这个问题的办法。

方法1:您可以使用-XX:-UseSplitVerifier参数来解决这个问题,您不需要担心升级库文件。

方法2:我遵循了以下步骤来解决这个问题。步骤1:确定并保存应用程序使用的外部库列表。步骤2:确定列表后,继续逐个删除外部库文件,并插入升级版本库文件,这将帮助您隔离可能导致问题的库。在我的例子中: j2ee.jar和openjpa-1.2.2 jar文件创建了一个问题,然后我升级了这些库,解决了迁移问题。

因此,找出引起问题的图书馆并逮捕它是一个缓慢而痛苦的过程。

我希望,这些信息可能是有用的,因为它是基于我的实时经验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19928927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档