[ASM教程]#3增加移除类成员

简介: 可以委托一个ClassWriter。

首发于Enaium的个人博客


可以委托一个ClassWriter。

public class MyClassVisitor extends ClassVisitor {
   
    public MyClassVisitor(ClassWriter classWriter) {
   
        super(ASM5, classWriter);
    }
}

这样就可以把读取到的类转换为二进制文件了。

ClassReader classReader = new ClassReader(Learn3Test.class.getName());
ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
MyClassVisitor myClassVisitor = new MyClassVisitor(classWriter);
classReader.accept(myClassVisitor, 0);
classWriter.toByteArray();

重写字段访问方法,如果字段的名字一致,就返回null。

@Override
public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
   
    if (name.equals("aBoolean")) {
   
        return null;
    }
    return super.visitField(access, name, desc, signature, value);
}

移除方法也是一样。

@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
   
    if (name.equals("render")) {
   
        return null;
    }
    return super.visitMethod(access, name, desc, signature, exceptions);
}

在结束的时候添加一个字段。

@Override
public void visitEnd() {
   
    super.visitField(ACC_PRIVATE, "name", "Ljava/lang/String;", null, null).visitEnd();
    super.visitEnd();
}

添加方法也是一样。

@Override
public void visitEnd() {
   
    super.visitMethod(ACC_PRIVATE, "name", "(Ljava/lang/String;)V", null, null).visitEnd();
    super.visitEnd();
}
目录
相关文章
|
4月前
|
SQL Java
访问者模式问题之在ASM中,实现一个访问者来删除指定的类属性,如何解决
访问者模式问题之在ASM中,实现一个访问者来删除指定的类属性,如何解决
|
6月前
|
Java API
使用ASM为一个类增加属性工具类
使用ASM为一个类增加属性工具类
63 0
|
6月前
|
Java
使用ASM动态生成类的拦截代理类
使用ASM动态生成类的拦截代理类
76 0
|
6月前
|
Java 数据库连接 mybatis
使用ASM动态创建接口实现类
使用ASM动态创建接口实现类
52 0
|
6月前
|
Java API Android开发
ASM 框架:字节码操作的常见用法(生成类,修改类,方法插桩,方法注入)
ASM 框架:字节码操作的常见用法(生成类,修改类,方法插桩,方法注入)
114 0
[ASM教程]#4创建对象和数组
这期我们要创建一个对象和数组。
92 0
|
Java
[ASM教程]#1分析类
ASM是一种通用Java字节码操作和分析框架,它可以用于修改现有的class文件或动态生成class文件。
144 0
|
API
[ASM教程]#6树API
使用树API来生成一个类
87 0
[ASM教程]#5字符串混淆
测试类,需要混淆这里所有的字符串,上一期我们学习了如果插入一个常量,那么拦截插入常量的时候判断是不是字符串,如果是就混淆它。
109 0
[ASM教程]#2生成类
使用classWriter生成类
73 0