前端之家收集整理的这篇文章主要介绍了
java – 如何动态反编译内存中的类对象?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在制作一个工具来动态显示运行java类的源代码.我需要一个工具来帮助我从类对象动态反编译到源代码的字符串.我知道一些反编译工具,如Jad,DJ反编译器可以反编译.class文件,但我希望工具可以:
Class> c = ..; // get from runtime environment
String sourcecode = **DecompileTool**.decompileClassObject(c);
return sourcecode;
我需要这样一个DecompileTool,有谁知道?谢谢
最佳答案
我不知道任何可以像这样使用的反编译器.
实际上,在一般情况下,不可能实现这样工作的反编译器:
>班级<?>从运行时获得的对象不提供任何获取字节码的方法.
>为了获取字节码,您需要重做类加载器在从类路径中找到“.class”文件时所执行的操作.
>我认为没有办法找出正在使用的类加载器…如果包含动态实例化类加载器的可能性. (此类类加载器在(例如)Web容器中是常规做法.)
>在一般情况下,类加载器将以您无法重现的方式执行此操作…无需逆向工程并将相同的逻辑硬编码到您的反编译器适配器代码中.
此外,在运行中执行此操作可能毫无意义,因为反编译器很可能会生成不可编译的源代码.
原文链接:https://www.f2er.com/java/438123.html