我希望使用 ASM 来修改正在运行的 jar 文件并想问一些问题。首先,我可以使用 ASM 进行“实时”编辑吗?我的意思是,我可以编辑一个当前正在运行的 jar,例如游戏,然后将我的代码注入到 jars 类文件中并让它一直保存到 jar 关闭吗?所以它仍然会在游戏运行循环等中被调用?根据我的尝试,我只能让我的代码运行一次......谢谢
问问题
579 次
3 回答
3
看看java.lang.instrument包。您可以编写一个注册ClassFileTransformer的 Java 代理。
转换器可以使用 ASM 处理类文件中的字节码,将它们转换为您想要的,并从 ASM 返回新的字节码。也有可能在加载类文件后修改它们,但这可能有点偶然,因为您必须确保不更改签名等。
于 2013-11-06T05:15:26.270 回答
0
你也应该破解那个 jar 的 ClassLoader
并在调用 findClass 时返回修改后的类
于 2013-11-06T04:17:43.680 回答
-1
您可以使用反射来更改运行时的代码行为。它不会留在“jar”中,至少在加载您需要的类时,一切都会好起来的。
然后,您需要提供在程序中使用反射注入更改的机制。或者这就是我会去的方式,无论如何。
此外:这个问题的答案为运行时修改提供了更灵活的选项。如果您使用它的第三个选项,您可以使用JSR-223中定义的工具在 javascript(或其他语言)(相关信息,一个专门用于编写 java 脚本的博客)中进行编码。
于 2013-11-05T23:46:45.587 回答