我正在试图弄清楚Java applet的类文件在做什么。用记事本或Textpad打开它只会显示出一堆狼吞虎咽的东西。
有没有什么方法可以将它重新组合成一种有点可读的格式,这样我就可以试着找出它在做什么了?
答案 0 :(得分:196)
jd-gui是目前最好的反编译器。与尘封的JAD相比,它可以处理Java中的新功能。
答案 1 :(得分:70)
如果你不介意阅读字节码,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
答案 2 :(得分:7)
您想要一个java反编译器,您可以使用命令行工具javap
来执行此操作。此外,Java Decompiler HOW-TO描述了如何反编译类文件。
答案 3 :(得分:2)
使用Jad反编译它可能是您的最佳选择。除非代码被混淆,否则它将产生一个好的结果。
答案 4 :(得分:2)
您正在寻找的是java解编译器。我推荐JAD http://www.kpdus.com/jad.html它可以免费用于非商业用途并完成工作。
注意:这不会使代码与编写的代码完全相同。即你将失去评论和可能的变量名称,所以它将比阅读正常的源代码更难。如果开发人员真的很隐秘,他们也会对代码进行模糊处理,使其更难阅读。
答案 5 :(得分:2)
正如@MichaelMyers所指出的,使用
javap -c <name of java class file>
获取JVM汇编代码。您还可以将输出重定向到文本文件以获得更好的可见性。
javap -c <name of java class file> > decompiled.txt
答案 6 :(得分:2)
cpuguru,如果您的applet已经使用javac 1.3(或更低版本)编译,那么您最好的选择就是使用Jad。
不幸的是,JAD 1。5。8(2001年4月14日)支持的最后一个JDK是JDK 1.3。
如果您的applet是使用更新的编译器编译的,那么您可以尝试JD-GUI:这个反编译器正在开发中,但是,对于使用JDK 1.4编译的类,它大多数时间都会生成正确的Java源代码, 1.5或1.6。
达伦,谢谢你的帖子。 JD-GUI还不是最好的反编译器......但我正在研究:)答案 7 :(得分:1)
这是编译后的代码,您需要使用像JAD这样的反编译器:http://www.kpdus.com/jad.html
答案 8 :(得分:1)
jd-gui“http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q=”是反编译.class文件的最佳且用户友好的选项....
答案 9 :(得分:1)
如果要查看的类文件是开源的,则不应对其进行反编译,而是将源文件直接附加到IDE中。这样,您可以只查看某个库类的代码,就好像它是您自己的
一样答案 10 :(得分:1)
JAD和/或JADclipse Eclipse插件,当然。
答案 11 :(得分:1)
您需要使用反编译器。其他人建议JAD,还有其他选择,JAD是最好的。
我会回应那些与原始源代码相比可能会丢失一些的评论。如果代码使用泛型,由于擦除,它看起来会特别有趣。
答案 12 :(得分:0)
无需反编译Applet.class。公共Java API类源代码随JDK一起提供(如果您选择安装它),并且比反编译的字节码更易读。您可以在src.zip中找到压缩文件(位于JDK安装文件夹中)。
答案 13 :(得分:0)
如果您想要可读的Java代码,那么JAD是一个很好的选择。如果您真的想深入了解.class
文件格式的内部结构,那么您将需要javap
。它与JDK捆绑在一起,允许您将十六进制字节码“反编译”为可读的ASCII。它产生的语言仍然是字节码(不像Java那样),但它具有相当的可读性和极具指导性。
此外,如果确实想要,您可以在十六进制编辑器中打开任何.class
文件并直接读取字节码。结果与使用javap
相同。
答案 14 :(得分:0)
CFR - another java decompiler是一个很好的反编译器,适用于现代Java编写的Java 6。
答案 15 :(得分:0)
根据建议,您可以使用JAD对其进行反编译并查看文件。为了便于阅读,您可以使用eclipse的JADclipse插件将JAD直接集成到eclipse或使用比命令行JAD更容易使用的DJ Java Decompiler
答案 16 :(得分:0)
您也可以使用在线java反编译器。对于例如http://www.javadecompilers.com