import org.apache.bcel.*; import org.apache.bcel.classfile.*; import org.apache.bcel.generic.*; public class BCELExample { public static void main(String[] args) throws Exception { JavaClass origClass = Repository.lookupClass("com.example.MyClass"); ClassGen classGen = new ClassGen(origClass); ConstantPoolGen constPoolGen = classGen.getConstantPool(); MethodGen methodGen = new MethodGen(origClass.getMethods()[0], classGen.getClassName(), constPoolGen); InstructionList instList = methodGen.getInstructionList(); instList.append(new GETSTATIC(constPoolGen.addFieldref("java/lang/System", "out", "Ljava/io/PrintStream;"))); instList.append(new LDC(constPoolGen.addString("Hello, World!"))); instList.append(new INVOKEVIRTUAL(constPoolGen.addMethodref("java/io/PrintStream", "println", "(Ljava/lang/String;)V"))); methodGen.setInstructionList(instList); methodGen.setMaxStack(); methodGen.setMaxLocals(); classGen.replaceMethod(origClass.getMethods()[0], methodGen.getMethod()); JavaClass modifiedClass = classGen.getJavaClass(); String modifiedClassName = modifiedClass.getClassName(); modifiedClass.dump(modifiedClassName + ".class"); } }


上一篇:
下一篇:
切换中文