gpt4 book ai didi

java - 无法理解在 Java 中使用 ASM 字节码重命名的方法

转载 作者:行者123 更新时间:2023-11-29 06:08:12 25 4
gpt4 key购买 nike

我目前正在尝试了解 ASM 库的工作原理。我决定尝试重命名给定类的所有方法,因此我编写了一个迷你 MethodRenamer 访问者:

class MethodRenamer extends ClassAdapter {
public MethodRenamer(ClassVisitor cv) {
super(cv);
}

@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
MethodVisitor methodVisitor = cv.visitMethod(access, name+"_new", desc, signature, exceptions);
return methodVisitor;
}
}

它实际上帮我完成了全部工作,但我不明白为什么。我认为对于给定的代码,它只会为每个方法 m 创建一个没有代码的 m_new 方法。但出乎我的意料,它以某种方式用原始代码填充了每个 m_new

这怎么会发生?我的想法是,只有我转发给 cv 的内容才会写入输出文件。我没有在任何地方告诉 cv 原始 m 代码的代码是什么..所以我想这里一定有其他事情发生了?唯一可行的选择似乎是它以某种方式使用我返回的 methodVisitor

最佳答案

从 MethodRenamer.visitMethod() 返回的 MethodVisitor 是 ClassReader 用来填充方法体的那个。如果你想要一个空方法,那么你应该返回 null。参见 corresponding JavaDoc .

关于java - 无法理解在 Java 中使用 ASM 字节码重命名的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7914113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com