使用ASM库覆盖Java字节码中的本地变量名称

时间:2015-11-15 05:01:30

标签: java bytecode java-bytecode-asm

我使用Java ByteCode的ASM库读取了一个类'方法及其内容。这是在类中输出任何方法的局部变量名称:

ClassReader reader = new ClassReader(new FileInputStream(new File("TheClass.class")));

final ClassNode classNode = new ClassNode();
reader.accept(classNode, 0);

for (final MethodNode mn : (List<MethodNode>)classNode.methods) {
    for (LocalVariableNode n : (List<LocalVariableNode>)mn.localVariables) {
        System.out.println(n.name);
    }
}

这是编译的TheClass类文件的来源:

public class TheClass {
    public final String a;
    public final String b;

    public TheClass(String c, String d) {
        this.b = d;
        this.a = c;
    }
}

因此,输出逻辑上是thiscd现在,我需要将此编译的类复制到新文件中,但将<init>方法的参数(局部变量)更改为不同的名称(ef)。我怎么能这样做?我几乎没有使用过MethodVisitors等经验。

0 个答案:

没有答案