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

我正在为Minecraft开发一个coremod,并在加载时转换很多类。 然而问题是有多个coremod也会改变我所使用的相同类,并且我得到了一些我想要研究的奇怪行为。

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

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

TLDR:如何在修改和加载类之后获取类的字节码? – 不要使用ClassLoader.getResource,因为它返回未修改的版本。 – 在加载时没有得到它,因为我想捕捉自己之后发生的变换。

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

希望有人能帮我这个=)

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

编辑:就转换顺序而言,根据文档,它是

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

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