繁体   English   中英

从内存中获取Java类字节码(经过多次转换)

[英]Get Java class bytecode from memory(After multiple transforms)

我正在为Minecraft开发coremod,并在加载它们时转换许多类。 但是问题是,有多个coremod也转换了我自己的同一个类,并且出现了一些我想研究的奇怪行为。

然后是问题,在多次转换后如何检查字节码? 当我对其进行转换时,我只得到一个通过ASM运行的byte []输入,然后返回修改后的字节码。

我的想法是只在类加载后将类字节码转储到.class文件中,然后从那里检查它。 但是我似乎找不到任何方法在类加载后实际获取字节码。 我能找到的最接近的是getResource,但是它返回的是转换前的字节码,而不是我想要的。

TLDR:在修改和加载类之后,如何获取该类的字节码? -不能使用ClassLoader.getResource,因为它返回未修改的版本。 -在加载期间无法获取它,因为我想捕捉自己之后发生的转换。

是否有一些外部程序可以转储内存中的字节码或其他内容?

希望有人可以帮助我=)

据我所知,Java代理提供了运行时访问字节码的唯一接口。 这也是首先创建类文件转换器的方式,因此您应该已经在使用它。 只需对其进行修改以转储类文件。

编辑:至于转换的顺序,根据文档,它是

Retransformation incapable transformers
Retransformation incapable native transformers
Retransformation capable transformers
Retransformation capable native transformers

因此,理想情况下,您需要具有可重新转换的本机转换器。 但是编写本机代码很痛苦。 设置转换器以启用重新转换会很有帮助,但是稍后注册的另一个重新转换仍然可以在您运行之后运行。 我能想到的最好的选择是再次注册您的代理商。 或查找所有呼叫以注册变压器,然后插入您的呼叫。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM