public class HelloWorld { public void sayHello() { System.out.println("Hello, World!"); } } import org.objectweb.asm.*; public class HelloWorldClassVisitor extends ClassVisitor { public HelloWorldClassVisitor(ClassVisitor cv) { super(Opcodes.ASM7, cv); } @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { if (name.equals("sayHello")) { MethodVisitor mv = cv.visitMethod(access, name, desc, signature, exceptions); return new HelloWorldMethodVisitor(mv); } return super.visitMethod(access, name, desc, signature, exceptions); } } import org.objectweb.asm.*; public class HelloWorldMethodVisitor extends MethodVisitor { public HelloWorldMethodVisitor(MethodVisitor mv) { super(Opcodes.ASM7, mv); } @Override public void visitCode() { super.visitCode(); mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("Enhanced Hello, World!"); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); } } import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; public class Main { public static void main(String[] args) throws Exception { ClassReader cr = new ClassReader("HelloWorld"); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor cv = new HelloWorldClassVisitor(cw); cr.accept(cv, ClassReader.EXPAND_FRAMES); byte[] enhancedBytecode = cw.toByteArray(); CustomClassLoader classLoader = new CustomClassLoader(); Class<?> enhancedClass = classLoader.defineClass("HelloWorld", enhancedBytecode); HelloWorld enhancedHelloWorld = (HelloWorld) enhancedClass.newInstance(); enhancedHelloWorld.sayHello(); } }


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