如何动态反编译内存中的类对象?

Jer*_*Cai 5 java decompiler

我正在制作一个工具来动态显示运行java类的源代码.我需要一个工具来帮助我从一个动态编译Class ObjectString源代码的.我知道一些反编译工具,如Jad,DJ反编译器可以反编译.class文件,但我希望工具可以:

Class<?> c = ..; // get from runtime environment
String sourcecode = **DecompileTool**.decompileClassObject(c);
return sourcecode;
Run Code Online (Sandbox Code Playgroud)

我需要这样一个DecompileTool,有谁知道?谢谢

Ste*_*n C 3

我不知道有任何反编译器可以这样使用。

事实上,在一般情况下,不可能实现这样工作的反编译器:

  • 从运行时获取的对象Class<?>不提供任何获取字节码的方法。

  • 为了获取字节码,您需要重做类加载器在从类路径中找到“.class”文件时所做的操作。

  • 我认为没有办法找出正在使用的类加载器......如果您包含动态实例化类加载器的可能性。(这样的类加载器是(例如)Web 容器中的常见做法。)

  • 在一般情况下,类加载器将以您无法重现的方式执行此操作...无需进行逆向工程并将相同的逻辑硬编码到反编译器适配器代码中。

此外,即时执行此操作可能毫无意义,因为反编译器很有可能会生成不可编译的源代码。