Jasmin에서 데이터 풀을 만드는 방법은 무엇입니까?
문제
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 개의 값을 새로 할당 된 배열로 설정합니다.
제휴하지 않습니다 StackOverflow