![](/img/trans.png)
[英]java.lang.VerifyError: JVMVRFY012 stack shape inconsistent;
[英]java.lang.VerifyError: JVMVRFY010 multiple jsrs use single return
使用 IBM 时出现以下错误。 它与 Oracle 一起工作正常。 我的 class 是用 Oracle 而不是 IBM 编译的。
通过反射调用 class 时出现此错误。 通过 main 方法运行它可以正常工作。
Class aClass=ObfuscationUtility.class;
Method[] methods = aClass.getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals(deobfuscated_method)) {
method.setAccessible(true);
try {
decryptedText = (String) method.invoke(aClass, encryptedText);
……
任何建议我可能会犯什么错误。
Exception in thread "main" java.lang.VerifyError: JVMVRFY010 multiple jsrs use single return; class=com/ObfuscationUtility, method=<clinit>()V, pc=65
Exception Details:
Location:
com/ObfuscationUtility.<clinit>()V @65: JBjsr
Reason:
Error exists in the bytecode.
Exception Handler Table:
bci [322, 333] => handler: 1146
bci [1147, 1157] => handler: 692
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClassInternal(ClassLoader.java:396)
at java.lang.ClassLoader.defineClass(ClassLoader.java:357)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:154)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:730)
at java.net.URLClassLoader.access$400(URLClassLoader.java:96)
at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1187)
at java.security.AccessController.doPrivileged(AccessController.java:774)
at java.net.URLClassLoader.findClass(URLClassLoader.java:605)
at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:942)
at java.lang.ClassLoader.loadClass(ClassLoader.java:887)
at java.lang.ClassLoader.loadClass(ClassLoader.java:870)
在内部,ASM 库用于执行 class 字节码操作。 Java 7 的一项要求是它包含一个 StackMap 表以协助 class 验证。 正在使用的 ASM 版本包含一个缺陷,该缺陷会导致修改后的 class 具有不正确的 StackMap 表,这会导致在加载 ZA2F2ED4F8EBC2CBB4C21A29DC40AB61D 时出现 java.lang.VerifyError 当 class 中的方法使用多维 arrays 时,可能会发生这种情况。
问题结论ASM 库已经更新了一个修复程序,该修复程序可以为使用多维 arrays 的方法正确生成 StackMap。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.