我有以下示例代码:
Label L1654589030
Line 3, L1654589030
ALOAD 0
INVOKESPECIAL java/lang/Object.<init>()V
RETURN
Label L466002798
我执行基本转换,重新排序说明和标签,并插入两条GOTO
指令:
GOTO L1654589030
Label L466002798
RETURN
Label L1654589030
ALOAD 0
INVOKESPECIAL java/lang/Object.<init>()V
GOTO L466002798
但是,当ASM计算帧数时,它会在ArrayIndexOutOfBoundsException
处抛出org.objectweb.asm.ClassReader.createDebugLabel
。在createDebugLabel
中,ASM尝试访问偏移65539
处的标签,从而崩溃。我可以通过使用新的LabelNode
替换up
我移动的LabelNode
来解决此问题,但这意味着我还必须更新引用它的所有指令。为什么会出现问题?
EDIT1 | CheckClassAdapter
返回以下转储:
<init>()V
00000 Main : : GOTO L0
00001 Main : : L1
00002 Main : : FRAME FULL [com/company/Main] []
00003 Main : : RETURN
00004 Main : : L0
00005 Main : : FRAME FULL [U] []
00006 Main : : ALOAD 0
00007 Main : Main : INVOKESPECIAL java/lang/Object.<init> ()V
00008 Main : : GOTO L1
FRAME FULL
不应该存在,但我该如何解决?
答案 0 :(得分:0)
已解决: MethodNode.localVariables
- &gt;在重新排序其指令节点后,start
/ end
标签未形成区域。我不得不手动更新每个变量。