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

BCEL 그나마 나은 참고자료..

Study/BCI&BCEL&ASM 상구너(sanguneo) 2014. 8. 4. 16:20


영어 꼬부랑 글씨

http://www.smfsupport.com/support/java/bcel-tutorial!/


그래도 여기만한거 없음 ... ㅠㅠ 보기 너무 어렵다 ...


추가 140808

https://www.moparscape.org/smf/index.php?topic=216985.0


추가 140813

http://www.geekyarticles.com/2011/08/manipulating-java-class-files-with-bcel.html



추가 140821

http://sourcecodebrowser.com/bcel/5.2/index.html

(클래스다이어그램까지 자세하게 설명됨 물론 영어)


http://www.geekyarticles.com/2011/09/implementing-aspect-oriented.html

자바 에이전트 사용에대한 설명이 있다.

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

bcel 6 다운로드  (0) 2015.01.12
BCI 기술과 BCEL  (0) 2015.01.12
ASM 으로 바이트코드 변경하기.  (0) 2014.08.21
bcel api doc  (0) 2014.08.01
BCEL 메소드 추가하기  (0) 2014.08.01

bcel api doc

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

http://bcel.sourceforge.net/docs/

패키지위치만 조금 다름. 

감안해서 볼것.


140804 추가

http://www.massapi.com/package/org/apache/bcel/package-summary.html


위에거보다 훨씬 괜찮음.


http://commons.apache.org/proper/commons-bcel/apidocs/

'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 메소드 추가하기  (0) 2014.08.01

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
12