2014년 2월 7일 금요일

ASM 4.0 Guide - 1 Days

1. introduction

1.1 Movivations

ASM 은 자바 바이트코드 엔지니어링 라이브러리(a java bytecode engineering library)으로 다음의 이점이 있다.


  • Program analysis : 파싱에서 부터 애플리케이션의 잠재적인 버그를 찾거나, 사용하지 않는 코드, 역공학에 사용
  • Program generation : 일반 컴파일러나 Just in Time 컴파일러 같이 분산 프로그래밍에서 사용할 스텁, 스켈레톤 컴파일러가 사용할 프로그램을 작성
  • Program transformation : 프로그램을 최적화 하거나 AOP같이 성능 모니터링 이나 디버깅용 코드를 추가
그것도 runtime 시에 가능하다.

1.2 Overview

1.2.1 Model

ASM 라이브러리는 2개의 API 를 제공한다.

  • core API : event based model
- 연속적인 이벤트로 클래스를 표현한다.
- 각 이벤트는 클래스의 특정 구성 요소를 나타낸다.
- 이벤트 기반 API는 사용 가능한 이벤트, 반드시 따라야 하는 순서, 파싱할 엘리먼트 당 하나의 이벤트를 생성하는 클래스 파서, 연속적인 이벤트에서 컴파일된 클래스를 생성하는 클래스 작성기를 제공한다.
  • tree API : object based model
- 객체 트리로 클래스를 표현한다.
- 각 객체가 클래스 구성 요소를 나타낸다.
- 각 객체는 자신의 하위 구성 요소에 대한 객체들을 나타내는 레퍼런스를 가지고 있다.
- 객체 기반 API는 연속적인 이벤트 모델을 객체 트리 모델로 변경하는 하거나 그 반대로 변경하는 기능을 제공한다.
- 객체 기반 API는 이벤트 기반 API를 근간으로 만들어졌다.

이벤트 기반 API가 더 좋다.

- 객체 기반 API 보다 빠르고 메모리 소비가 적다.
- 클래스 변형이 객체 기반 모델 보다 어렵다. 한번에 한 엘리먼트만 조작하니까.


1.2.2 Organization


  • asm.jar
org.objectweb.asm, org.objectweb.asm.signature
event based API
클래스 파서, 클래서 생성기(class writer) 등의 컴포넌트

  • asm-util.jar 
org.objectweb.asm.util

  • asm-common.jar
 org.objectweb.asm.commons
미리 정의해 둔 클래스 트랜스포머

  • asm-tree.jar 
 org.objectweb.asm.tree
object based API

  • asm-analysis.jar 
tree API 기반의 클래스 분석 프레임워크와 미리 만들어 둔 클래스 분석기 제공 

댓글 없음:

댓글 쓰기