문제

Java Byte Code Engineering Library를 사용하려고합니다. ASM 정적 분석을 수행합니다. 필드에 할당되는 변수를 검사하고 싶은 상황이 있습니다.

나는 가지고있다 MethodVisitor 그것을 구현합니다 visitFieldInsn() 방법. 나는 구체적으로 찾고있다 putfield 명령. 그것은 문제가되지 않습니다. 문제는 내가 만날 때입니다 putfield, 필드에 할당 될 변수에 액세스 할 수 있기를 원합니다. 구체적으로 나는에 대한 정보에 액세스하고 싶습니다 유형 변수의.

현재 나는 스택 상단에 무엇이 있는지 살펴 봐야하지만, 더 일반적인 검사 방법이 있다면 더 좋습니다.

스택의 변수를 검사하기 위해 ASM을 사용하는 방법이 있습니까?

도움이 되었습니까?

해결책

우선, 바이트 코드가 유효하다고 가정 할 수 있다면 필드에 할당 된 값 유형은 필드 유형과 일치해야하며 클래스 리더 API를 사용하여 미리 읽을 수 있습니다.

그러나 주어진 명령어 포인터의 스택 또는 가변 슬롯의 각 개별 값을 추적 해야하는 경우 SourceInterpreter와 함께 분석기 API를 사용할 수 있습니다. 기본적으로 주어진 값을 생성 한 명령을 찾을 수 있으며 해당 명령에 대한 정보를 사용하여 유형을 추론 할 수 있습니다 (예 : 메소드 매개 변수에 해당하는 변수에서 읽거나 메소드 호출에서 값을 반환 한 경우 사례 메소드 설명자에서 유형을 얻을 수 있습니다). 또한 내 오래된 블로그 게시물을 참조하십시오 SourceInterpreter를 사용하는 예.

다른 팁

나는 ASM에 익숙하지 않지만 Eclipse Java AST 프레임 워크와 비슷한 소리를 냈습니다. 변수에 대해 알기 위해 AST 방문자의 적절한 visitx () 방법에서 변수 선언을 직접 추적해야했습니다. 어떤 AST 노드가 변수 선언에 해당하는지 알면 그리 어렵지 않았습니다.

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