Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package reghzy.asmclass;
- import org.objectweb.asm.ClassWriter;
- import org.objectweb.asm.MethodVisitor;
- import org.objectweb.asm.Opcodes;
- import org.objectweb.asm.Type;
- public class Main {
- public static final ASMClassLoader LOADER = new ASMClassLoader();
- public static void main(String[] args) {
- Class<?> clazz = generateClass();
- try {
- clazz.newInstance();
- }
- catch (InstantiationException e) {
- e.printStackTrace();
- }
- catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- }
- public static Class<?> generateClass() {
- String className = "MyCustomASMClass";
- String classDescription = className; // can include packages too, using the '/' char instead of '.' (e.g my/package/MyCustomASMClass)
- ClassWriter cw = new ClassWriter(0);
- cw.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC | Opcodes.ACC_SUPER, classDescription, null, "java/lang/Object", new String[0]);
- cw.visitSource(".dyn", null);
- // Ljava/lang/Object;
- cw.visitField(Opcodes.ACC_PUBLIC, "myField", Type.getDescriptor(Object.class), null, null).visitEnd();
- MethodVisitor ctor = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
- ctor.visitCode();
- ctor.visitVarInsn(Opcodes.ALOAD, 0); // load this
- ctor.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); // invoke super()
- // call System.out.println("hello!")
- ctor.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");
- ctor.visitLdcInsn("hello!");
- ctor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V");
- ctor.visitInsn(Opcodes.RETURN);
- ctor.visitMaxs(2, 1);
- ctor.visitEnd();
- cw.visitEnd();
- byte[] bytes = cw.toByteArray();
- return LOADER.defineClass(className, bytes);
- // try {
- // OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("F:\\TEMPPP\\MyCustomASMClass.class")));
- // out.write(bytes);
- // out.close();
- // }
- // catch (FileNotFoundException e) {
- // e.printStackTrace();
- // }
- // catch (IOException e) {
- // e.printStackTrace();
- // }
- }
- private static class ASMClassLoader extends ClassLoader {
- public ASMClassLoader() {
- super(Main.class.getClassLoader());
- }
- public Class<?> defineClass(String name, byte[] data) {
- return this.defineClass(name, data, 0, data.length);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement