BCEL 메소드 추가하기

2014. 8. 1. 15:57·Study/BCI&BCEL&ASM

적용에 앞서 

이클립스의 경우 bcel 라이브러리 추가.

한차례 javac 후 arg를 추가하여 실행


최종확인은 터미널, 콘솔에서


Test.java

public class Test {}


AddMain.java

import java.io.IOException;

import org.apache.bcel.classfile.*;

import org.apache.bcel.generic.*;

import org.apache.bcel.*;


public class AddMain {


    static public void main(String args[]) {

        String className = (args.length >= 1) ? args[0] : "";

        JavaClass mod = null;

        try {

            mod = Repository.lookupClass(className);

        }

        catch (Exception e) {

            System.err.println("Could not get class " + className);

        }


        ClassGen modClass = new ClassGen(mod);

        ConstantPoolGen cp = modClass.getConstantPool();


        InstructionList il = new InstructionList();


        il.append(new GETSTATIC(cp.addFieldref("java.lang.System","out","Ljava/io/PrintStream;")));

        il.append(new PUSH(cp, "헐대박 쩔어"));

        il.append(new INVOKEVIRTUAL(cp.addMethodref("java.io.PrintStream","println","(Ljava/lang/String;)V")));

        il.append(new GETSTATIC(cp.addFieldref("java.lang.System","out","Ljava/io/PrintStream;")));

        il.append(new PUSH(cp, "ㅋㅋ"));

        il.append(new INVOKEVIRTUAL(cp.addMethodref("java.io.PrintStream","println","(Ljava/lang/String;)V")));

        il.append(new RETURN());


        MethodGen methodGen = new MethodGen(Constants.ACC_PUBLIC|Constants.ACC_STATIC,Type.VOID,new Type[]{new ArrayType(Type.STRING, 1)},new String[]{"args"}, "omgg", className, il, cp);


        methodGen.setMaxLocals();

        methodGen.setMaxStack();


        modClass.addMethod(methodGen.getMethod());

        modClass.update();


        try {

            JavaClass newClass = modClass.getJavaClass();

            String className2 = className.replace(".","/");

            newClass.dump(className2 + ".class");

            System.out.println("Class " + className + " modified");

        }

        catch (IOException e) {

            e.printStackTrace();

        }

    }

}

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

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

bcel 6 다운로드  (0) 2015.01.12
BCI 기술과 BCEL  (0) 2015.01.12
ASM 으로 바이트코드 변경하기.  (0) 2014.08.21
BCEL 그나마 나은 참고자료..  (0) 2014.08.04
bcel api doc  (0) 2014.08.01
'Study/BCI&BCEL&ASM' 카테고리의 다른 글
  • BCI 기술과 BCEL
  • ASM 으로 바이트코드 변경하기.
  • BCEL 그나마 나은 참고자료..
  • bcel api doc
상구너(sanguneo)
상구너(sanguneo)
  • 상구너(sanguneo)
    상구너 블로그
    상구너(sanguneo)
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • Day by day (4)
        • Diary (3)
        • 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
    mWebMac
    html5
    mWebOSX
    MWeb
    lineBreak
    닷지웹
    곡선좌표
    fillText
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
상구너(sanguneo)
BCEL 메소드 추가하기
상단으로

티스토리툴바