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

我正试图弄清 Javaapplet 的类文件在底层做什么。用记事本或文本本打开它只会显示一堆官样文章。

有没有什么办法可以把它变回一种稍微可读的格式,这样我就可以试着弄清楚它在做什么?

  • Environment = = 已安装的 Windows w/VS 2008。
573770 次浏览

使用 杰德反编译它可能是您的最佳选择。除非代码被混淆了,否则它将产生一个正常的结果。

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

你想要一个 java 反编译器,你可以使用命令行工具 javap来做到这一点。此外,Java 反编译指南描述了如何反编译类文件。

你要找的是一个 Java 反编译器。我推荐 JADhttp://www.kpdus.com/jad.html,它是免费的非商业用途,并得到了工作完成。

注意: 这不会使代码完全相同。也就是说,你会丢失注释和可能的变量名,所以这会比仅仅阅读普通的源代码要难一些。如果开发人员真的很神秘,他们也会混淆他们的代码,使其更加难以阅读。

正如建议的那样,您可以使用 JAD 反编译它并查看文件。为了使其更容易阅读,您可以使用 JADclipseforeclipse 插件将 JAD 直接集成到 eclipse 中,或者使用比命令行 JAD 更容易使用的 DJJava 反编译器

如果您不介意阅读字节码,那么 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 代码,那么 JAD 是一个很好的选择。如果您真的想深入研究 .class文件格式的内部,那么您需要 javap。它与 JDK 捆绑在一起,允许您将十六进制字节码“反编译”成可读的 ASCII。它生成的语言仍然是字节码(不像 Java) ,但是它相当可读,而且非常有教育意义。

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

Jd-gui 是目前最好的反编译器。它可以处理 Java 中更新的特性,而不是越来越多的 JAD。

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

我将重复注释,与原始源代码相比,您可能会有所损失。由于删除,如果代码使用泛型,看起来会特别有趣。

当然是 JAD 和/或 JADclipseEclipse 插件。

没有必要反编译 Applet.class。公共 JavaAPI 类源代码与 JDK 一起提供(如果您选择安装它的话) ,并且比反编译的字节码更具可读性。您可以在 src.zip 中找到压缩文件(位于 JDK 安装文件夹中)。

如果要查看的类文件是开源的,则不应反编译它,而应将源文件直接附加到 IDE 中。这样,您就可以像查看自己的代码一样查看某个库类的代码

Cpuguru,如果您的 applet 是用 javac 1.3(或更少)编译的,那么最好的选择是使用 Jad。

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

如果您的 applet 已经使用最新的编译器编译过,您可以尝试使用 JD-GUI: 这个反编译器正在开发中,但是,它在大多数情况下会为使用 JDK 1.4、1.5或1.6编译的类生成正确的 Java 源代码。

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

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 编写的 iJava6的一个很好的反编译器。

正如@MichaelMyers 所指出的,使用

javap -c <name of java class file>

您也可以将输出重定向到一个文本文件以获得更好的可见性。

javap -c <name of java class file> > decompiled.txt

你也可以使用在线的 java 反编译器