2017-11-13 18 views
0

I 다음 샘플 코드가 있습니다재 배열 LabelNodes는 원인이 자신의 자바 ASM에서 난장판 오프셋

GOTO L1654589030 
    Label L466002798 
    RETURN 
    Label L1654589030 
    ALOAD 0 
    INVOKESPECIAL java/lang/Object.<init>()V 
    GOTO L466002798 
:
Label L1654589030 
    Line 3, L1654589030 
    ALOAD 0 
    INVOKESPECIAL java/lang/Object.<init>()V 
    RETURN 
    Label L466002798 

내가 지시 및 라벨을 재정렬하고 두 GOTO 지침을 삽입, 기본 변환을 수행을

그러나 프레임이 ASM에 의해 계산 될 때, ArrayIndexOutOfBoundsExceptionorg.objectweb.asm.ClassReader.createDebugLabel에 던졌습니다. createDebugLabel에서 ASM은 오프셋 65539에서 레이블에 액세스하려고 시도하므로 충돌합니다. 나는 LabelNodeup으로 새 것으로 바꿔서이 문제를 해결할 수는 있지만, 다시 말하면 모든 지시 사항을 업데이트해야 할 것입니다. 문제가 발생하는 이유는 무엇입니까?

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

:MethodNode.localVariables - 나는 그들의 명령 노드를 다시 정렬 후>start/end 레이블 영역을 형성하지 않았다. 각 변수를 수동으로 업데이트해야했습니다.