ASM Java字节码指令更改类名

ASM Java字节码指令更改类名,java,bytecode,java-bytecode-asm,bytecode-manipulation,Java,Bytecode,Java Bytecode Asm,Bytecode Manipulation,所以最近我一直试图简单地改变一个类名,但我就是做不到。 这是我的密码 注入类节点 方法类节点 现在,当我运行它时,它抛出一个由于某种原因未找到的类“com/kirelcodes/cool/Task”在导入列表中,我不知道为什么 我很想在您的解决方案中获得帮助,您只需在一个文件中重命名该类。其他类不会收到名称更改的通知,并将抛出“ClassNotFoundException” 最好在使用重新映射完成修改后重命名该类。所有visit…方法的signature参数都引用泛型签名,它仅在运行时与反射

所以最近我一直试图简单地改变一个类名,但我就是做不到。 这是我的密码 注入类节点

方法类节点

现在,当我运行它时,它抛出一个由于某种原因未找到的类“com/kirelcodes/cool/Task”在导入列表中,我不知道为什么
我很想在您的解决方案中获得帮助,您只需在一个文件中重命名该类。其他类不会收到名称更改的通知,并将抛出“ClassNotFoundException”


最好在使用重新映射完成修改后重命名该类。

所有
visit…
方法的
signature
参数都引用泛型签名,它仅在运行时与反射相关。您应该注意到,class visit方法有一个
name
参数,它与类的名称更相关,这是您想要更改的

对于成员来说,
desc
参数不是JVM规范所称的“签名”,但至少ASMAPI在调用通用签名描述参数
signature
方面是一致的。这就是为什么
签名
可以是
null
,这表明没有涉及泛型类型。为了实现目标,必须调整
desc
参数


此外,请注意,在处理说明时,您不仅需要注意转换引用成员的所有者类型,还必须调整成员的类型。顺便说一下,在此上下文中命名参数arg0、arg1、arg2、arg3、arg4是没有帮助的。您可能没有处理其他类型引用,例如,
ldc
指令可能会推送
引用,但我不知道这对这个具体案例是否重要。

我确实更新了参考资料。问题是,最终有一个导入对原始版本没有用处name@NacOJerk:你读过并试图理解吗?你的代码没有达到你的目的,也就是说,它没有重命名任何东西
import
语句是完全不在字节码中显示的源代码工件。