[ASM教程]#2生成类

简介: 使用classWriter生成类

首发于Enaium的个人博客


public class Learn2 {
   
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
   
        ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
        classWriter.visit(V1_8, ACC_PUBLIC, "cn/enaium/learn/asm/learn2/Learn2Test", null, "java/lang/Object", null);//类信息
        MethodVisitor methodVisitor = classWriter.visitMethod(ACC_PUBLIC + ACC_STATIC, "render", "()V", null, null);//插入方法
        methodVisitor.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");//插入字段
        methodVisitor.visitLdcInsn("Hello ASM!");//插入LDC
        methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);//插入方法
        methodVisitor.visitMaxs(2, 1);//设置栈和局部变量大小
        methodVisitor.visitInsn(RETURN);//插入返回
        methodVisitor.visitEnd();//结束
        classWriter.visitEnd();//结束

        //生成类
        try {
   
            FileOutputStream out = new FileOutputStream(Learn2.class.getResource("/cn/enaium/learn/asm/learn2/").getPath() + "Learn2Test.class");
            out.write(classWriter.toByteArray());
            out.close();
        } catch (Exception e) {
   
            e.printStackTrace();
        }
    }
}
目录
相关文章
|
9天前
|
Java API
使用ASM为一个类增加属性工具类
使用ASM为一个类增加属性工具类
8 0
|
9天前
|
Java
使用ASM动态生成类的拦截代理类
使用ASM动态生成类的拦截代理类
8 0
|
9天前
|
Java 数据库连接 mybatis
使用ASM动态创建接口实现类
使用ASM动态创建接口实现类
10 0
|
9天前
|
Java API Android开发
ASM 框架:字节码操作的常见用法(生成类,修改类,方法插桩,方法注入)
ASM 框架:字节码操作的常见用法(生成类,修改类,方法插桩,方法注入)
11 0
|
11月前
[ASM教程]#4创建对象和数组
这期我们要创建一个对象和数组。
70 0
|
11月前
|
Java
[ASM教程]#1分析类
ASM是一种通用Java字节码操作和分析框架,它可以用于修改现有的class文件或动态生成class文件。
85 0
|
11月前
|
API
[ASM教程]#6树API
使用树API来生成一个类
65 0
|
11月前
[ASM教程]#5字符串混淆
测试类,需要混淆这里所有的字符串,上一期我们学习了如果插入一个常量,那么拦截插入常量的时候判断是不是字符串,如果是就混淆它。
73 0
|
11月前
[ASM教程]#3增加移除类成员
可以委托一个ClassWriter。
51 0
|
Java
ASM 库的 classVisitor 类解析
ASM 库的 classVisitor 类解析
424 0