如何以人类可读的方式打开Java .class文件?

我试图找出一个Java小程序的类文件正在做什么。 用记事本或文本板打开它只是显示一堆gobbledy-gook。

有没有什么办法可以把它变成可读的格式,所以我可以试着弄清楚它在做什么?

  • 环境== Windows w / VS 2008安装。

jd-gui是目前最好的反编译器。 它可以处理Java中较新的function,而相比之下,越来越尘埃的JAD。

如果你不介意读字节码,javap应该可以正常工作。 它是标准JDK安装的一部分。

Usage: javap <options> <classes>... where options include: -c Disassemble the code -classpath <pathlist> Specify where to find user class files -extdirs <dirs> Override location of installed extensions -help Print this usage message -J<flag> Pass <flag> directly to the runtime system -l Print line number and local variable tables -public Show only public classes and members -protected Show protected/public classes and members -package Show package/protected/public classes and members (default) -private Show all classes and members -s Print internal type signatures -bootclasspath <pathlist> Override location of class files loaded by the bootstrap class loader -verbose Print stack size, number of locals and args for methods If verifying, print reasons for failure 

你想要一个java反编译器,你可以使用命令行工具javap来做到这一点。 另外, Java Decompiler HOW-TO介绍了如何反编译类文件。

使用Jad来反编译它可能是你最好的select。 除非代码被混淆,否则会产生一个好的结果。

你正在寻找的是一个Java解编译器。 我build议JAD http://www.kpdus.com/jad.html它是免费的非商业用途,并完成工作。;

注意:这不会使代码与写入的代码完全相同。 即你将失去注释和可能的variables名称,所以它比阅读正常的源代码要困难得多。 如果开发者真的秘密,他们也会混淆他们的代码,这使得阅读变得更加困难。

cpuguru,如果你的applet已经用javac 1.3(或更less)编译,你最好的select是使用Jad。

不幸的是,JAD 1.5.8(2001年4月14日)支持的最后一个JDK是JDK 1.3。

如果你的applet已经被编译了一个更新的编译器,你可以试试JD-GUI :这个反编译器正在开发中,不过它在大多数情况下为使用JDK 1.4,1.5或1.6编译的类生成正确的Java源代码。

DarenW,谢谢你的post。 JD-GUI不是最好的反编译器,但是我正在努力:)

这是编译好的代码,您需要使用像JAD这样的反编译器: http : //www.kpdus.com/jad.html

你需要使用一个反编译器。 还有人build议JAD,还有其他的select,JAD是最好的。

我会回应评论,你可能会失去一点与原始的源代码相比。 如果代码使用generics,由于擦除,这将会显得特别有趣。

JAD和/或JADclipse Eclipse插件,当然。

如果您想查看的类文件是开源的,则不应对其进行反编译,而应将源文件直接附加到IDE中。 这样,你可以直接看到一些库类的代码,就好像它是你自己的一样

build议您可以使用JAD反编译并查看文件。 为了使读起来更容易,你可以使用用于eclipse的JADclipse插件来将JAD直接集成到eclipse中,或者使用DJ Java Decompiler,它比命令行JAD更容易使用

如果你想要可读的Java代码,JAD是一个很好的select。 如果你真的想挖掘.class文件格式的内部,你会想要javap 。 它与JDK捆绑在一起,允许您将hex字节码“反编译”为可读的ASCII码。 它产生的语言仍然是字节码(不像Java),但是它的可读性和非常有指导性。

另外,如果你真的想,你可以在hex编辑器中打开任何.class文件,并直接读取字节码。 结果与使用javap相同。

没有必要反编译Applet.class。 公共Java API类源代码随JDK一起提供(如果您select安装它),并且比反编译的字节码更易读。 您可以在src.zip中find压缩文件(位于您的JDK安装文件夹中)。

jd-gui“ http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q= ”是反编译的最好用户友好选项.class文件….

CFR – 另一个Java反编译器是现代Java编写的Java 6的一个很好的反编译器。