这可能是Java的ASM库吗?

时间:2013-11-05 23:15:01

标签: java code-injection bytecode java-bytecode-asm

我希望使用ASM来修改正在运行的jar文件,并想问一些问题。首先使用ASM我可以“生活”编辑,我的意思是,我可以编辑当前正在运行的jar例如一个游戏然后将我的代码注入到jar类文件中并让它坚持直到罐子关闭?所以它仍将在游戏运行循环等中调用?从我的尝试来看,我只能让我的代码运行一次...... 感谢

3 个答案:

答案 0 :(得分:3)

查看java.lang.instrument包。您可以编写一个注册ClassFileTransformer的Java代理。

转换器可以使用ASM处理类文件中的字节码,将它们转换为您想要的字节码,并从ASM返回新的字节码。 modifying class files after they have already been loaded也有潜力,但这可能有点昙花一现,因为你必须确保不要改变签名等。

答案 1 :(得分:0)

你也应该破解那个jar的ClassLoader

并在调用findClass时返回修改后的Class

答案 2 :(得分:-1)

您可以使用反射在运行时更改代码行为。它不会停留在“jar”中,至少在你需要的类加载时,一切都会很好。

然后,您需要提供使用程序中的反射注入更改的机制。或者那就是我的方式,无论如何。

此外:the answer to this question具有更灵活的运行时修改选项。如果您使用其第三个选项,则可以使用related info中定义的工具以javascript(或其他语言)(a blog dedicated to scripting in javaJSR-223)进行编码。