검색
다른 검색어로 검색을 시도하시기 바랍니다.
BCEL 그나마 나은 참고자료..
영어 꼬부랑 글씨
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
http://bcel.sourceforge.net/docs/
패키지위치만 조금 다름.
감안해서 볼것.
140804 추가
http://www.massapi.com/package/org/apache/bcel/package-summary.html
위에거보다 훨씬 괜찮음.
'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 메소드 추가하기
적용에 앞서
이클립스의 경우 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 |