mP.*_*mP. 1 java assembly java-bytecode-asm
尝试加载使用ASM生成的类时,我得到了预期的ClassVerifyErrors.在进一步检查时,我可以看到jvm是正确的,并且该方法所讨论的具有无效的MAX_STACK值.奇怪的是我正在使用自动计算堆栈和最大本地选项,所以这不应该是一个问题...使用无效选项的方法非常简单,但结果是错误的字节码.
我编写了一个带有预期方法的类,并将我的asm生成的类与javac生成的类比较,字节代码匹配,唯一的错误是max stack为0,这是错误的,而javac设置的值为2.
我想避免自己计算最大堆栈/本地人.
如果字节码无效,则最大堆栈和变量计算会产生错误的结果.您可以通过CheckClassAdapter运行生成的代码来验证.
例如,
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
// generate code into cw instance...
PrintWriter pw = new PrintWriter(System.out);
CheckClassAdapter.verify(new ClassReader(cw.toByteArray()), true, pw);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1358 次 |
| 最近记录: |