classwriter (compute_max + compute_stack)가 설정되어 있어도 MaxStack을 올바르게 계산하지 않음 ASM (ObjectWeb)

StackOverflow https://stackoverflow.com/questions/2235493

문제

ASM을 사용하여 생성 한 클래스를로드하려고 할 때 ClassVerifyErrors가 예상됩니다. 추가 검사에서 JVM이 정확하고 메소드에 대해 이야기하고 있음을 알 수 있습니다. 이상한 점은 자동 계산 스택 및 최대 로컬 옵션을 사용하는 것입니다. 따라서 문제가되지 않아야합니다 ... 유효하지 않은 옵션이있는 방법은 매우 간단하지만 결과는 바이트 코드가 잘못되었습니다.

의도 된 방법을 가진 클래스를 작성했으며 ASM 생성 클래스를 Javac 생성과 BYTE 코드 매치업과 비교하여 Max 스택 인 유일한 오류는 0 인 반면 Javac은 값을 설정합니다.

이드는 그 tha Max 스택/현지인을 직접 계산하지 않아도됩니다.

도움이 되었습니까?

해결책

바이트 코드가 유효하지 않은 경우 최대 스택 및 가변 계산은 잘못된 결과를 생성 할 수 있습니다. 생성 된 코드 트로프를 실행하여 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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top