본문 바로가기

전체 글

(215)
개발 진행 : 메서드 변조(MethodVisitor, ClassVisitor), 로깅 PrepareStatement Search transformer를 통해 prepareStatement를 조회해보자. public class MyClassTransformer implements ClassFileTransformer { //이 인터페이스의 구현체(transform)은 JVM이 존재하는 클래스를 로드할 때마다 호출되며, 이 시점에서 바이트코드를 조사하고 변경할 수 있다. @Override public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) { if (className.contains..
[Agent / ASM] agent의 transform 메서드에 ASM 바이트코드 적용하기 1 ClassReader - ClassWriter - ClassVisitor의 관계 먼저 이전 시간에 학습했던 내용을 다시 되짚으려고 한다. 1. ClassReader ClassReader는 주어진 바이트 배열(byte[])로부터 클래스 정보를 읽는 역할을 한다. 즉, .class 파일이나 ClassFileTransformer 인터페이스를 통해 전달받은 바이트코드(중요)를 읽고 해석하는 데 사용된다. ClassReader는 클래스 파일의 구조를 순차적으로 읽지만, 직접 바이트코드를 수정하지는 않는다. 대신, 읽어들인 정보를 ClassVisitor에 전달하여 분석이나 조작을 가능하게 한다. 2. ClassWriter ClassReader로부터 읽거나 새로운 정보를 바탕으로, 새로운 바이트코드를 만들거나 기존 ..
[Agent] java.lang.management 설명 java.lang.management 패키지 https://docs.oracle.com/en/java/javase/21/docs/api/java.management/java/lang/management/package-summary.html java.lang.management (Java SE 21 & JDK 21) package java.lang.management Provides the management interfaces for monitoring and management of the Java virtual machine and other components in the Java runtime. It allows both local and remote monitoring and managem..
[Agent] Agent 동작 구성 및 이해 Agent 개발 Instrumentation 인터페이스 API reference for Java Platform, Instrumentation Instrumentation (Java SE 17 & JDK 17) public interface Instrumentation This class provides services needed to instrument Java programming language code. Instrumentation is the addition of byte-codes to methods for the purpose of gathering data to be utilized by tools. Since the changes are pur docs.oracle.com 이 인터페이스..
[A Java bytecode engineering library] - [Tree API] 7. Method 개인 학습 정리MethodNodepublic class MethodNode extends MethodVisitor { public int access; // 메서드의 접근 제어자. 예: ACC_PUBLIC, ACC_PRIVATE 등 public String name; // 메서드 이름 public String desc; // 메서드 서술자(descriptor). 매개변수와 반환 타입 포함 public String signature; // 메서드 시그니처. 제네릭 정보 포함 public List exceptions; // 메서드가 던질 수 있는 예외 타입 목록 public List parameters; // 메서드 매개변수 목록 public List visibleAnnotations; // 런타임에서 보이..
[A Java bytecode engineering library] - [Tree API] 6. Classes 개인 학습 정리Tree API?ASM의 Tree API는 바이트코드 조작을 위한 보다 높은 수준의 추상화를 제공한다. Core API가 방문자 패턴(visitor pattern)에 의존하여 바이트코드를 직접 조작하는 방식이라면, Tree API는 바이트코드를 더 쉽게 조작할 수 있도록 메모리 내 트리 구조로 클래스를 표현한다. 이를 통해 사용자는 바이트코드 구성 요소(예: 메서드, 필드, 애너테이션)를 노드로서 조작할 수 있게 된다. Tree API의 주요 특징은 다음과 같다.고수준의 추상화: Tree API를 사용하면, 바이트코드 구조를 이해하기 쉬운 객체 모델을 통해 작업할 수 있다. 이는 복잡한 조작을 단순화시키고 코드의 가독성을 높여준다.쉬운 수정: 클래스 파일의 구조를 트리로 표현하기 때문에, ..
[A Java bytecode engineering library] - [Core API] 5. Backward compatibility(역호환 해당 파트는 직접적인 개발은 아니지만, Legacy version의 호환 가능성과 규칙에 대해 정의한다.5. Backward compatibility5.1. 서론 과거에 클래스 파일 포맷에 새로운 요소가 도입되었고, 미래에도 새로운 요소들이 추가될 것이다(예: 모듈성, 자바 타입에 대한 애너테이션 등). ASM 3.x까지, 이러한 변화는 ASM API에 역호환성이 없는 변경을 초래했는데, 이는 바람직하지 않다. 이러한 문제를 해결하기 위해 ASM 4.0에서 새로운 메커니즘이 도입되었다. 그 목적은 클래스 파일 포맷에 새로운 기능이 도입되더라도, 모든 미래의 ASM 버전이 ASM 4.0 이후의 모든 이전 버전과 역호환성을 유지하도록 하는 것이다. 이는 클래스 생성기, 클래스 분석기 또는 클래스 어댑터가 A..
[A Java bytecode engineering library] - [Core API] 4. Metadata 개인 내용 정리시그니처와 SignatureVisitor 시그니처 : 클래스, 인터페이스, 필드, 메소드 등을 JVM이나 컴파일러가 인식할 수 있도록 정의한 기술적인 정보. SignatureVisitor는 ASM 라이브러리에서 제공하는 인터페이스로, 바이트코드의 시그니처를 방문하여 읽거나 수정할 때 사용된다. 이 인터페이스를 사용하면 제네릭 타입, 클래스 시그니처, 메소드 시그니처 등을 분석하고 조작할 수 있다. 여러 메서드를 통해 세부적인 시그니처 요소들을 방문하고 수정할 수 있으며, 이는 타입 파라미터, 반환 타입, 예외 타입 등 다양한 요소들을 처리할 수 있게 해준다. 타입 시그니처(Type Signature)예를 들어, List 클래스에서 E라고 할 수 있을 것이다. 특정 input의 Type을 지..