gpt4 book ai didi

java - 使用 BCEL 跟踪 java 字节码中的每条指令

转载 作者:行者123 更新时间:2023-11-30 11:34:40 31 4
gpt4 key购买 nike

我正在使用 BCEL 生成字节码,我只想在输入类的静态方法中的每一行之前打印出 (println)。我尝试使用 BCEL 进行检测,但它会导致不同形式的错误。它说

Exception in thread "main" java.lang.VerifyError: StackMapTable error: bad offset in method C.max(Ljava/lang/String;II)I

有时,如果我在任何指令上放置一些静态方法调用,它就会开始工作,有时则不会。任何帮助将不胜感激...

更新:我修复了它。这不是 BCEL 库的问题,它是 JDK 版本 (1.7),它没有验证我的检测类。因此,如果有人遇到此类问题,请使用 JDK 1.6 或使用 JVM 选项“-XX:-UseSplitVerifier”。

干杯

最佳答案

StackMapTable 是在 50.0 中引入并在 51.0 中强制执行的功能,旨在通过在代码的不同位置包含有关类型的元数据来加速类文件验证。不幸的是,手动编写或调整很痛苦,因此除非您使用的是自动生成它的工具,否则最好将其完全删除。

为了省略 StackMapTable,您需要将类更改为 50.0 或更早版本。但这应该不是一个真正的问题,因为 51.0 中添加的唯一特性是 invokedynamic 及其关系,编译的 Java 从未使用过它们。

关于java - 使用 BCEL 跟踪 java 字节码中的每条指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15529535/

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