BCEL로 런타임에 Arguments(매개변수들) 캡쳐하는 Instruction 추가하기.

2015. 1. 12. 15:57·Study/BCI&BCEL&ASM

Bcel 을 처음 다룰 당시에 만들었던 간단한 매개변수 출력하는 BCEL transform이다.

상당히 다듬어지지않은 막코드라서 감안해서 볼 필요가있다.


핵심부분은 밑줄과 주석을 달겠다.


이전글(http://blog.sanguneo.com/21) 에서 premain 을 이용한 javaagent 사용법은 간략하게 배웠는데. 

BCEL을 여기에 접목시킨다는것은 조금 고차원적인 접근이 필요하다.(필자의 생각)


우선적으로 소스를 펼치기에 앞서 이론설명을 하자면 자바의 .class 파일은 완전하계 기계어(?)로 번역된것이 아닌,

그렇다고 소스형태도아닌 그 중간어딘가의 형태로 볼수있다. 

javac 명령어를 실행하면 소스파일을 java컴파일하면 class 파일로 뱉어내게되는데, 이 class파일이 ByteCode의 목적집합코드인셈이다.(?)


길게 이야기할거없이 일단 class파일은 바이트코드로 되어있다고 보면 된다.


웹상의 대부분의 자료들(BCEL에 관련해서만) 은 BCEL을 이용한 정적인 BCI 기술을 보여준다. 

정적인 BCI기술이라함은 class 파일화된 바이트코드를 다루는것이라 하겠다.


하지만! 이 정적인 BCI기술은 엄청난 한계가있는데, 

상용프로그램에대한 라이센스문제(수정불가등의 조항), 묶여있는 클래스군 혹은 시스템클래스 에대한문제(rt.jar 등) 이 그것이다.


그렇다면 실시간으로 무엇을 어떻게 불러와서 사용할수 있을고 하니. 자바에서 기본적으로 Transform 을 지원한다.(since jdk1.5)

여기서 사용할것은 ClassFileTransformer 이다.


우선 클래스파일 트랜스포머 메소드는 아래처럼 implements 로 얻어와서 정의하여 사용한다.


주의) 소스가 동작하지않을 수 있음. 버그있으면 피드백 바랍니다. 원본 코드를 자꾸 수정해서 아래코드는 기억을 더듬어 작성했습니다.



즉, 위에서 사용한 방식을 요약하면

클래스 파싱->메소드 검사후 조건검색->새 메소드인스트럭션 생성->인스트럭션에 아규먼트출력절차 추가->원본 인스트럭션 추가->생성된 인스트럭션을 원본 메소드에 교체->메소드를 클래스젠에 추가->클래스젠으로부터 클래스를 받아 바이트코드로 출력 하게된다.


이를 지칭하여

BCEL on fly, dynamic BCEL 이라고 부르기도 한다.




저작자표시 비영리 변경금지 (새창열림)

'Study > BCI&BCEL&ASM' 카테고리의 다른 글

BCEL 중요용어 및 사용법 간단 소개.  (0) 2015.01.12
bcel 6 다운로드  (0) 2015.01.12
BCI 기술과 BCEL  (0) 2015.01.12
ASM 으로 바이트코드 변경하기.  (0) 2014.08.21
BCEL 그나마 나은 참고자료..  (0) 2014.08.04
'Study/BCI&BCEL&ASM' 카테고리의 다른 글
  • BCEL 중요용어 및 사용법 간단 소개.
  • bcel 6 다운로드
  • BCI 기술과 BCEL
  • ASM 으로 바이트코드 변경하기.
상구너(sanguneo)
상구너(sanguneo)
  • 상구너(sanguneo)
    상구너 블로그
    상구너(sanguneo)
  • 전체
    오늘
    어제
    • 분류 전체보기 (44)
      • Day by day (7)
        • Diary (6)
        • TV (0)
      • Challenge (4)
      • Study (23)
        • Linux (6)
        • Java (1)
        • JavaScript (3)
        • BCI&BCEL&ASM (8)
        • Markup (2)
        • WAS (1)
        • DB (1)
        • NodeJS (0)
      • Develop (9)
        • inKrKamus (2)
      • Faith (0)
  • 블로그 메뉴

    • 홈
    • GITHUB
    • LinkedIn
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    Canvas
    닷지웹
    lineBreak
    fillText
    베지에
    mWebOSX
    곡선좌표
    mWebMac
    MWeb
    html5
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
상구너(sanguneo)
BCEL로 런타임에 Arguments(매개변수들) 캡쳐하는 Instruction 추가하기.
상단으로

티스토리툴바