전체 글 (227) 썸네일형 리스트형 [ASM] static과 인스턴스 필드 생성자 호출 - <clinit>, <init> : 정적 초기화 생성자 블록, : 생성자 호출 블록 변수를 만드는 것과, 생성자를 불러서 초기 값을 지정하는 것은 다른 프로세스이다. 쉽게 말해서 Obj obj; 와 Obj obj = new Obj(); 은 JVM 동작 자체가 다르다. asm으로 변수를 생성하는 것과는 별개로, clinit과 init 호출을 통해 이것의 생성자를 mv으로 호출하고, 이 생성자들을 통해 값을 넣어줄 수 있다 clinit과 init은 Java 바이트코드에서 특별한 의미를 가지는 메서드 이름이다. 이들은 클래스 단위로 작동하며, 특정 객체 인스턴스에 대한 것이 아니다. 이 메서드를 통해 정의된 코드는 클래스가 JVM에 의해 로딩되는 시점에 한 번만 실행된다. : static에서의 생성자 호출 는 Java 클래스의 정적 초기화 .. [ASM Docs]MethodVisitor 하위 메서드들 Docs를 통해 알아보기 https://asm.ow2.io/javadoc/org/objectweb/asm/MethodVisitor.html#visitParameter(java.lang.String,int) MethodVisitor (ASM 9.6) Direct Known Subclasses: AnalyzerAdapter, CheckMethodAdapter, CodeSizeEvaluator, InstructionAdapter, LocalVariablesSorter, MethodNode, MethodRemapper, TraceMethodVisitor public abstract class MethodVisitor extends Object A visitor to visit a Java method. T asm.ow2.io 전체 메서.. [ASM 바이트코드 작성] if문과 예외를 포함한 메서드 추가 예제(중요) 예제 코드 package org.agent.util.asm.testcode.chap03; import org.objectweb.asm.*; import static org.objectweb.asm.Opcodes.*; public class SetF extends ClassVisitor { public SetF(ClassVisitor classVisitor) { super(Opcodes.ASM9, classVisitor); } @Override public MethodVisitor visitMethod( final int access, final String name, final String descriptor, final String signature, final String[] exceptions) {.. [A Java bytecode engineering library] - [Core API] 3. Method[2/3] 개인 요약 및 정리 Overview 3장 2절은 클래스 멤버(필드, 메서드 등)의 변형, 추가, 제거 방법을 다룬다. 이 과정에서 ClassVisitor와 MethodVisitor 인터페이스의 활용이 중요하다. 여기서는 간단한 변형부터 복잡한 변형까지 다양한 예시를 통해 ASM 라이브러리의 활용 방법을 설명한다. 멤버 제거 필드와 메서드 제거: 특정 조건에 부합하는 필드나 메서드를 찾아 제거합니다. 이를 위해 visitField와 visitMethod 메서드를 오버라이드하고, 조건에 맞지 않는 경우 해당 호출을 전달하지 않습니다(null 반환). 멤버 추가 필드와 메서드 추가: 새로운 필드나 메서드를 추가하려면, visitField나 visitMethod를 적절한 시점에 호출합니다. 특히, visitEn.. 개발 진행 : 메서드 변조(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 이 인터페이스.. 이전 1 ··· 5 6 7 8 9 10 11 ··· 29 다음