我试图弄清楚 Java 小程序的类文件在幕后做了什么。用记事本或文本板打开它只会显示一堆官样文章。

有什么方法可以将其恢复为可读的格式,以便我可以尝试弄清楚它在做什么?

  • 环境 == 安装了 VS 2008 的 Windows。
有帮助吗?

解决方案

京东GUI 是目前最好的反编译器。与日渐尘土飞扬的 JAD 相比,它可以处理 Java 中的新功能。

其他提示

如果您不介意阅读字节码,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 反编译器操作指南 描述如何反编译类文件。

你正在寻找的是一个java反编译器。我推荐杰德 http://www.kpdus.com/jad.html 它可免费用于非商业用途并完成工作。

笔记:这不会使代码与编写的代码完全相同。IE。您将丢失注释和可能的变量名称,因此这比仅仅阅读正常的源代码要困难一些。如果开发人员真的很保密,他们也会混淆他们的代码,使其更难以阅读。

cpuguru,如果您的小程序是使用 javac 1.3(或更低版本)编译的,那么您最好的选择是使用 Jad。

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

如果您的小程序是用更新的编译器编译的,您可以尝试 京东GUI :该反编译器正在开发中,不过,大多数情况下,它会为使用 JDK 1.4、1.5 或 1.6 编译的类生成正确的 Java 源代码。

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

正如@MichaelMyers 所指出的,使用

javap -c <name of java class file> 

获取 JVM 汇编代码。您还可以将输出重定向到文本文件以获得更好的可见性。

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

使用 贾德 反编译它可能是你最好的选择。除非代码被混淆,否则它会产生好的结果。

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

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

我将回应与原始源代码相比您可能会丢失一点的评论。如果代码由于擦除而使用泛型,那么看起来会特别有趣。

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

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

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

按照建议,您可以使用JAD对其进行反编译并查看文件。为了更容易阅读,您可以使用 eclipse 的 JADclipse 插件将 JAD 直接集成到 eclipse 中,或者使用 DJ Java Decompiler,它比命令行 JAD 更容易使用

如果您希望获得可读的 Java 代码,JAD 是一个很好的选择。如果你真的想深入了解它的内部 .class 不过,你会想要的文件格式 javap. 。它与 JDK 捆绑在一起,允许您将十六进制字节码“反编译”为可读的 ASCII。它生成的语言仍然是字节码(与 Java 不同),但它具有相当的可读性并且极具指导意义。

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

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

CFR - 另一个java反编译器 是一个很棒的反编译器,适用于用 Java 6 编写的现代 Java。

您还可以使用可用的在线 java 反编译器。例如 http://www.javadecompilers.com

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top