일부는 (Minecraft Forge의 Transform 클래스를 사용하지만 관련이 없어야하는) 일부 asm으로 작업했지만, NoClassDefFoundError 및 NullPointerException으로 계속 충돌합니다. 나는 이미 문제와 이론적 인 해결책이 무엇인지를 좁혔다.Java ASM - AbstractInsnNode에서 LabelNode 가져 오기
피연산자 23에 코드를 삽입하려고하는데 코드에 이미 코드의 피연산자 68에있는 다른 레이블에 점프가 포함됩니다.
InsnList toInject = new InsnList();
toInject.add(new VarInsnNode(ALOAD, 0));
toInject.add(new InsnNode(ICONST_0));
toInject.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", "charAt", "(I)C"));
toInject.add(new IntInsnNode(BIPUSH, 33));
toInject.add(new JumpInsnNode(IF_ICMPEQ, 68sLabelNode));
return toInject;
마지막 추가는 내가 사용하려고했습니다 연산 68 에서 LabelNode의 레이블이 있어야합니다 :
m.instructions.insert(m.instructions.get(23), ConfigPatch1());
코드 주입 (m은 methodNode입니다)
(LabelNode) m.instructions.get(68)
하지만 "스택에 나쁜 피연산자"오류가 발생합니다. 캐스트가 나빴다는 것을 나타내는 것처럼 보였다. get은 AbstractInsnNode를 반환합니다.
Operand 68에서 LabelNode를 가져 와서 사출시 사용할 수 있습니까?
감사합니다. StackOverflow!