我可以使用什么程序来反编译类文件?我真的会得到Java代码,还是仅仅是JVM汇编代码?
关于这个网站上的Java性能问题,我经常看到一些人的回答,他们“反编译”了Java类文件,以了解编译器如何优化某些东西。
我可以使用什么程序来反编译类文件?我真的会得到Java代码,还是仅仅是JVM汇编代码?
关于这个网站上的Java性能问题,我经常看到一些人的回答,他们“反编译”了Java类文件,以了解编译器如何优化某些东西。
当前回答
Soot是较新的Java代码的一个选项。至少它的优点是最近还在维护……
此外,Java反编译器是一个具有独立GUI和Eclipse集成的反编译器。
最后,还没有提到Jdec,尽管它没有其他选项那么完善。
其他回答
大多数Java反编译器都是基于JAD的。这是一个很棒的工具,但不幸的是,它已经有一段时间没有更新了,并且不能很好地处理Java 1.5+类。我还没有看到任何能够正确处理1.5+类的工具。
Soot是较新的Java代码的一个选项。至少它的优点是最近还在维护……
此外,Java反编译器是一个具有独立GUI和Eclipse集成的反编译器。
最后,还没有提到Jdec,尽管它没有其他选项那么完善。
Procyon包含一个反编译器。它是自由/开源软件。
以下是截至2015年2月的反编译器列表:
Procyon,开源,https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
CFR,免费,没有源代码,http://www.benf.org/other/cfr/
JD,仅供非商业用途免费,http://jd.benow.ca/
Fernflower,开源,https://github.com/fesh0r/fernflower,
JAD -此处仅为历史原因。免费,没有源代码,http://varaneckas.com/jad/ 过时,不受支持,不能正确反编译Java 5及更高版本。
您可以在线测试上述反编译器,不需要安装,并做出自己的选择。
云中的Java反编译器:http://www.javadecompilers.com/
如果你想知道Java编译器是如何做某些事情的,你不想要反编译,你想要的是反汇编。反编译涉及到将字节码转换为Java源代码,这意味着会丢失大量低级信息,如果您想了解编译器优化,那么这可能正是您感兴趣的信息。
不管怎样,我碰巧写了一个开源Java反汇编程序。与Javap不同的是,这甚至适用于高度病态的类,因此您可以看到混淆工具对您的类做了什么。它还可以进行反编译,尽管我不推荐这样做。