asm (27) 썸네일형 리스트형 [Agent / ASM] agent의 transform 메서드에 ASM 바이트코드 적용하기 2 / ASM 라이브러리 이슈 ClassReader / Visiter / Writer를 사용한 값 읽어오기 public static byte[] addLogging(byte[] classfileBuffer) { ClassReader classReader = new ClassReader(classfileBuffer); // 클래스 파일 읽기 // 클래스 파일 쓰기, COMPUTE_MAXS와 COMPUTE_FRAMES 옵션으로 메서드의 최대 스택 크기와 로컬 변수를 자동 계산 ClassWriter classWriter = new ClassWriter(classReader, ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); // Classvisitor 내부에 MethodVisitor가 있으.. [A Java bytecode engineering library] - [Core API] 3. Method[3/3] 3.3. 도구들 (tools) org.objectweb.asm.commons 패키지에는 자신만의 어댑터를 정의하는데 유용할 수 있는 몇 가지 사전 정의된 메소드 어댑터들이 포함되어 있다. 이 섹션에서는 그 중 세 가지를 소개하고, 이들이 어떻게 섹션 3.2.4의 AddTimerAdapter 예제와 함께 사용될 수 있는지 보여준다. 또한, 이전 장에서 본 도구들이 메소드 생성이나 변환을 용이하게 하는 방법도 보여준다. 3.3.1. 기본 도구들 섹션 2.3에서 소개된 도구들은 메소드에도 사용될 수 있다. 타입(Type) 많은 바이트코드 명령어들, 예를 들어 xLOAD, xADD 또는 xRETURN은 적용되는 타입에 따라 다르다. Type 클래스는 이러한 명령어들에 대해, 주어진 타입에 해당하는 opcode를.. [ASM]]MethodVisitor를 통해 특정 메서드 변조하기 나는 m의 메서드를 찾아, 여기 sysout을 통해 로깅을 붙이고 싶다..! 바로 코드를 보자. (A)의 경우 정상적인 동작을 하고, (B)의 경우 잘못된 코드이다. public class WrappingMethodVisitor extends ClassVisitor { public WrappingMethodVisitor(ClassVisitor classVisitor) { super(Opcodes.ASM9, classVisitor); } //각 메서드 방문시 호출 @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor m.. [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.. 이전 1 2 3 4 다음