import org.apache.xbean.asm.shaded.asm.ClassReader; import org.apache.xbean.asm.shaded.asm.ClassWriter; import org.apache.xbean.asm.shaded.asm.MethodVisitor; import org.apache.xbean.asm.shaded.asm.Opcodes; public class ExampleClass { public static void main(String[] args) { ClassReader reader = new ClassReader(ExampleClass.class.getClassLoader().getResourceAsStream("ExampleClass.class")); MethodVisitor visitor = new ExampleMethodVisitor(Opcodes.ASM9, writer.visitMethod(Opcodes.ACC_PUBLIC, "exampleMethod", "()V", null, null)); reader.accept(visitor, ClassReader.EXPAND_FRAMES); byte[] modifiedBytes = writer.toByteArray(); // ... } private static class ExampleMethodVisitor extends MethodVisitor { public ExampleMethodVisitor(int api, MethodVisitor methodVisitor) { super(api, methodVisitor); } @Override public void visitInsn(int opcode) { if (opcode == Opcodes.RETURN) { mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("Hello, World!"); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); } super.visitInsn(opcode); } } }


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