我试图弄清楚 Java 小程序的类文件在后台做什么。用记事本或文本板打开它只会显示一堆狼吞虎咽的东西。
有什么办法可以把它重新转换成某种可读的格式,这样我就可以试着弄清楚它在做什么?
- 环境 == 安装了 VS 2008 的 Windows。
jd-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
正如@MichaelMyers 所指出的,使用
javap -c <name of java class file>
获取 JVM 汇编代码。您还可以将输出重定向到文本文件以获得更好的可见性。
javap -c <name of java class file> > decompiled.txt
你想要一个java反编译器,你可以使用命令行工具javap
来做到这一点。此外,Java Decompiler HOW-TO描述了如何反编译类文件。
使用Jad反编译它可能是你最好的选择。除非代码被混淆,否则它会产生一个好的结果。
你正在寻找的是一个java反编译器。我推荐 JAD http://www.kpdus.com/jad.html 它可以免费用于非商业用途,并且可以完成工作。
注意:这不会使代码与编写的完全相同。即你会丢失注释和可能的变量名,所以它会比仅仅阅读普通的源代码更难一些。如果开发人员真的很神秘,他们也会混淆他们的代码,使其更难阅读。
cpuguru,如果你的小程序是用 javac 1.3(或更低)编译的,你最好的选择是使用 Jad。
不幸的是,JAD 1.5.8(2001 年 4 月 14 日)支持的最后一个 JDK 是 JDK 1.3。
如果你的小程序是用更新的编译器编译的,你可以试试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 的最佳且用户友好的选项文件....
您还可以使用可用的在线 java 反编译器。例如http://www.javadecompilers.com
那是编译后的代码,你需要使用像 JAD 这样的反编译器:http ://www.kpdus.com/jad.html
您需要使用反编译器。其他人建议JAD,还有其他选择,JAD是最好的。
我将回应与原始源代码相比您可能会丢失一点的评论。如果代码使用泛型,由于擦除,它看起来会特别有趣。
当然,JAD 和/或 JADclipse Eclipse 插件。
如果您要查看的类文件是开源的,则不应反编译它,而应将源文件直接附加到您的 IDE 中。这样,您就可以查看某个库类的代码,就好像它是您自己的一样
按照建议,您可以使用 JAD 对其进行反编译并查看文件。为了更容易阅读,您可以使用 eclipse 的 JADclipse 插件将 JAD 直接集成到 eclipse 或使用比命令行 JAD 更容易使用的 DJ Java Decompiler
如果您希望获得可读的 Java 代码,那么 JAD 是一个很好的选择。如果你真的想深入研究.class
文件格式的内部结构,你会想要javap
. 它与 JDK 捆绑在一起,允许您将十六进制字节码“反编译”为可读的 ASCII。它产生的语言仍然是字节码(不像 Java),但它具有相当的可读性和极强的指导意义。
此外,如果您真的愿意,您可以在十六进制编辑器中打开任何.class
文件并直接读取字节码。结果与使用javap
.
无需反编译 Applet.class。公共 Java API 类源代码随 JDK 一起提供(如果您选择安装它),并且比反编译的字节码更具可读性。您可以在 src.zip 中找到压缩文件(位于 JDK 安装文件夹中)。
CFR - 另一个 java 反编译器是一个很好的现代 Java 反编译器,它是用 Java 6 编写的。