如何以人类可读的方式打开 Java .class 文件?
题
我试图弄清楚 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