일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바
- django
- 스프링
- BCI
- JPA
- java
- 장고
- 웹 개발
- Spring
- python3
- 보안
- rabbitmq
- 스프링부트
- 파이썬3
- 디자인 패턴
- 스프링 부트
- node.js
- Spring Boot
- 안드로이드
- ORM
- HTTP
- 파이썬
- 데이터베이스
- 웹
- 자료구조
- Python
- db
- mysql
- 개발
- bytecode
- Today
- Total
목록ASM (3)
semtax의 개발 일지
1. Tree API 이번 포스팅에서는 ASM에서 제공하는 Tree API를 이용해서, 클래스 파일을 조작해보도록 하겠습니다. ASM에서는 클래스 조작을 위한 Tree API인 ClassNode 클래스를 제공합니다. 대략적인 생김새는 아래와 같습니다. public class ClassNode ... { public int version; public int access; public String name; public String signature; public String superName; public List interfaces; public String sourceFile; public String sourceDebug; public String outerClass; public String ou..
자바 시스템 클래스 들을 ASM으로 변경하는법 아래와 같이 자기가 직접 정의된 클래스 로더를 만들어서 수행하면 된다. 대충 순서는 다음과 같다. ClassLoader와 Class 클래스를 이용해서 변경하려는 클래스를 읽어 옴 setAccessible함수를 이용해서 권한을 수정가능한 상태로 변경함 reflection을 이용해서 ClassLoader.defineClass 을 호출하여 변경하려는 클래스에 접근 접근한 클래스를 변경후 반환 아래는 예제 코드이다. private Class loadClass(byte[] b) { // Override defineClass (as it is protected) and define the class. Class clazz = null; try { ClassLoader ..
1. ASM을 어디에다 쓰는가? 난독화 도구 제작등에도 사용 됨. JIT만들때도 활용이 가능 함. 그 외 기존 class 파일의 바이트 코드 패치를 할때 사용 됨. AspectJ 같은데서도 쓰인다고 함 2. ASM 라이브러리의 전체적인 구조 2-1. 전체 구성 Tree Based API와 Event Based API를 제공함 Tree Based API는 Top-Down으로 자바 바이트 코드를 파싱하여 생성된 AST를 순회하는 방식으로 동작 Event Based API는 순차적으로 바이트코드를 읽어들어서 특정 구문이 발견되었을때(Ex: 클래스 정의, 변수선언 등) 해당 구문이 발생하면 이벤트 핸들러가 실행되는 방식임 2-2. 주요 모듈 org.objectweb.asm : 이벤트 based API를 제공 o..