我试图弄清楚Java applet的类文件在做什么。用记事本或文本板打开它只会显示一堆乱码。
有什么方法可以将其纠缠成某种可读性的格式,以便我尝试找出它在做什么?
- 环境==已安装Windows VS 2008。
我试图弄清楚Java applet的类文件在做什么。用记事本或文本板打开它只会显示一堆乱码。
有什么方法可以将其纠缠成某种可读性的格式,以便我尝试找出它在做什么?
Answers:
如果您不介意阅读字节码,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 Decompiler HOW-TO描述了如何反编译类文件。
您正在寻找的是Java反编译器。我建议使用JAD http://www.kpdus.com/jad.html, 它可免费用于非商业用途,并且可以完成工作。
注意:这不会使代码与编写的代码完全相同。也就是说,您将丢失注释和可能的变量名,因此,与仅阅读常规源代码相比,这将更加困难。如果开发人员确实是秘密的,他们也会混淆自己的代码,从而使其更难阅读。
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的最佳且用户友好的选项文件....
那是已编译的代码,您需要使用反编译器(例如JAD):http : //www.kpdus.com/jad.html
您需要使用反编译器。其他人建议使用JAD,还有其他选择,JAD是最好的。
我会回应一些评论,与原始源代码相比,您可能会有所损失。如果代码由于擦除而使用了泛型,那就显得特别有趣。
如建议的那样,您可以使用JAD对其进行反编译并查看文件。为了使阅读更容易,您可以使用eclipse的JADclipse插件将JAD直接集成到eclipse或使用DJ Java Decompiler,它比命令行JAD易于使用
如果您想要可读的Java代码,那么JAD是一个很好的选择。但是,如果您真的想深入研究.class
文件格式的内部结构,就需要javap
。它与JDK捆绑在一起,使您可以将十六进制字节码“反编译”为可读的ASCII。它产生的语言仍然是字节码(不是Java之类的东西),但是它相当易读且极富启发性。
另外,如果您确实需要,可以.class
在十六进制编辑器中打开任何文件并直接读取字节码。结果与使用相同javap
。
CFR-另一个Java反编译器是Java 6编写的现代Java的出色反编译器。
您还可以使用可用的在线Java反编译器。对于例如http://www.javadecompilers.com