▶이동
  • 상구너 닷컴 블로그를 방문하신 여러분을 환영합니다 :)
  • 스팸 정책에 의해 일부 덧글·방명록차단될 수 있습니다.

BCEL 메소드 추가하기

Study/BCI&BCEL&ASM 상구너(sanguneo) 2014. 8. 1. 15:57

적용에 앞서 

이클립스의 경우 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