본문 바로가기

전체 글

(215)
[A Java bytecode engineering library]chap02 실습파일 Logic package com.sch.testapm.test.controller; import com.sch.testapm.reference.chap2.ClassPrinter; import lombok.extern.slf4j.Slf4j; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; imp..
[A Java bytecode engineering library] - [Core API] 3. Method[1/3] https://d2.naver.com/helloworld/1230 개인 요약 노트 이전 장에서 ClassVisitor의 구현체가 내부에서 'visitCode', 'visitMethod' 등 기능을 Override했었다. 추가적인 내용은 없었지만 사실 이 내부에서 바이트코드 명령어가 자동적으로 수행되고 있었을 것이다. 바이트코드 변환 과정은 JVM의 스택 메모리 구조를 활용하여 클래스와 메서드를 실행하는 방식을 반영한다. 메서드의 실행 과정은 지역 변수 배열에서 필요한 정보를 로드하여 피연산자 스택에서 연산을 수행하고, 그 결과를 다시 지역 변수 배열에 저장하거나 반환하는 과정이다. 순서와 스택 프레임, 연산 JVM은 스택 기반의 가상 머신으로 각 스레드는 자신만의 실행 스택을 가지고 있으며, 이 스택은 ..
[A Java bytecode engineering library] - [Core API] 2. Classes[2/2] 2. 클래스[2/2] 2.2.4. 클래스 변환( Transforming classes) 지금까지 ClassReader 및 ClassWriter 구성 요소는 독립적으로 사용되었다. 이벤트는 "수동으로" 생성되어 ClassWriter에 직접 소비되거나, 대칭적으로 ClassReader에 의해 생성되어 "수동으로", 즉 사용자 정의 ClassVisitor 구현에 의해 소비되었다. 이러한 구성 요소가 함께 사용될 때 진정한 흥미가 시작된다. 첫 번째 단계는 ClassReader에서 생성된 이벤트를 ClassWriter로 직접 전달하는 것이다. 결과는 클래스 리더에 의해 파싱된 클래스가 클래스 작성자에 의해 재구성된다는 것이다: 이 자체로는 그다지 흥미롭지 않다(바이트 배열을 복사하는 더 쉬운 방법이 있다!), ..
[A Java bytecode engineering library] - [Core API] 2. Classes[1/2] 실습 파일 및 내용 요약 https://csg1353.tistory.com/167 [ASM Library Guildline]chap02 실습파일 Logic package com.sch.testapm.test.controller; import com.sch.testapm.reference.chap2.ClassPrinter; import lombok.extern.slf4j.Slf4j; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.springframework.web.bind.annotation csg1353.tistory.com 이 장에서는 컴파일된 자바 클래스의 멤버 제거, 인터페이스 및 컴포넌트 ..
[A Java bytecode engineering library] 1. Introduction 1.1. Motivations 프로그램 분석, 생성 및 변환은 다양한 상황에서 유용하게 사용될 수 있는 기술이다. • 프로그램 분석은 간단한 구문 분석부터 전체 의미 분석에 이르기까지 다양하며, 응용 프로그램에서 잠재적인 버그를 찾거나 사용되지 않는 코드를 탐지하고, 코드를 역공학하는 데 사용될 수 있다. • 프로그램 생성은 컴파일러에서 사용되며, 이는 전통적인 컴파일러뿐만 아니라 분산 프로그래밍을 위한 스텁 또는 스켈레톤 컴파일러, 실시간 컴파일러 등을 포함한다. • 프로그램 변환은 프로그램을 최적화하거나 난독화하고, 응용 프로그램에 디버깅 또는 성능 모니터링 코드를 삽입하며, 관점 지향 프로그래밍 등에 사용될 수 있다. 이러한 기술들은 모든 프로그래밍 언어에 사용될 수 있지만, 언어에 따라 수행하기가..
[tomcat] catalina.sh (difference between java_opts and catalina_opts) [Backup 240124] 톰캣 내부에 agent 모델을 심을 일이 있었는데, catalina.sh(envset.sh) 안에 코드에서 궁금한 점이 있었다. 1. CATALINA_OPTS 사용 CATALINA_OPTS="$CATALINA_OPTS -javaagent:[scouter agent 경로]/scouter.agent.jar" export CATALINA_OPTS 2. JAVA_OPTS 사용 #Scouter Agent Setting SCOUTER_AGENT_DIR="" COLLECTOR_SERVER_IP="192.168.56.1" export JAVA_OPTS="$JAVA_OPTS -javaagent:${SCOUTER_AGENT_DIR}/scouter.agent.jar" export JAVA_OPT..
[Linux] nohup shell script 실행 불가 [240123 백업] centos nohup 스크립트 실행 불가 문제가 발생했다. 'nohup failed to run command 'java' no such file or directory' 문제. 즉, 자바를 읽지 못하는 문제이다. 문제 상황 1. /etc/progfile에 JAVA_HOME PATH 저장 후 root 계정과 chshin 계정 전부 적용됨을 확인한 상태이다. 두 계정 전부 echo $JAVA_HOME이나, java -version 등을 통해 성공적으로 경로가 등록되었다. 2. root 계정은 ./startup.sh 스크립트가 정상적으로 실행된다 (Scouter). 하지만 chshin의 경우 'nohup: redirecting stderr to stdout nohup: failed t..
[ASM][TreeAPI]Tree API에서 주로 사용하는 클래스 및 메서드 개요 Tree API에서 주로 사용하는 클래스 및 메서드에는 여러 가지가 있다. 기본적으로 ClassNode, MethodNode, InsnList가 중요한 역할을 하지만, 이 외에도 여러 유용한 클래스와 인터페이스가 있다. 여기에는 다음과 같은 것들이 포함된다. ClassNode : 클래스 노드. 트리 노드의 최상단 부모라고 생각하자. MethodNode : 클래스의 메서드를 나타낸다. 메서드의 접근 지정자, 이름, 설명 등을 포함할 수 있다. FieldNode: 클래스의 필드를 나타낸다. 필드의 접근 지정자, 이름, 설명, 초기값 등을 포함할 수 있다. AnnotationNode: 어노테이션을 나타낸다. 어노테이션의 설명자와 값들을 포함한다. VarInsnNode: 메서드의 지역 변수를 나타낸다. 변..