문제

Jasmin은 상수 풀을 지정할 수 있습니까?수천 바이트의 디스크립터 영역을 생성 할 수 있어야합니다.영역은 널을 포함한 임의의 바이트 데이터를 포함합니다.다음은 이진 상수를 선언하는 일반적인 어셈블리 지시문의 예입니다. 라코 디스

Java 클래스 파일에 이러한 영역이 포함되어있는 것 같지만 Jasmin에서 그렇게 대규모로 값을 선언하는 방법을 찾을 수 없습니다.

도움이 되었습니까?

해결책

Java 클래스 파일의 해당 영역을 상수 풀이라고하며 JVM 사양 §4.4

하지만 임의의 유형이 지정되지 않은 데이터를 포함 할 수는 없지만 대신 유형이 지정된 데이터 포함합니다.

지원되는 데이터 유형은 다음과 같습니다.

  • CONSTANT_Class
  • CONSTANT_Fieldref
  • CONSTANT_Methodref
  • CONSTANT_InterfaceMethodref
  • CONSTANT_String
  • CONSTANT_Integer
  • CONSTANT_Float
  • CONSTANT_Long
  • CONSTANT_Double
  • CONSTANT_NameAndType
  • CONSTANT_Utf8

    아무도 이러한 유형은 임의 길이의 임의의 유전자 태그 코드 데이터를 지원하지 않습니다. byte 가 가장 가깝지만 콘텐츠는 유효한 UTF-8 데이터 여야하며 0 바이트를 허용하지 않습니다.

    CONSTANT_Utf8가 어떻게 인코딩되는지 알아내는 가장 좋은 방법은 Java에서 하나를 정의하고 결과 byte[] 파일을 디 컴파일하는 것입니다. 내가 아는 한 .class는 필드를 설정하는 이니셜 라이저 블록으로 컴파일됩니다.

    확인 됨 :이 Java 클래스 : 라코 디스

    디 컴파일 (byte[] 사용) : 라코 디스

    보시다시피 생성 된 생성자는 "수동으로"5 개의 값을 새로 할당 된 배열로 설정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top