it-swarm.cn

如何以人类可读的方式打开Java .class文件?

我正在试图弄清楚Java applet的类文件在做什么。用记事本或Textpad打开它只会显示出一堆狼吞虎咽的东西。

有没有什么方法可以将它重新组合成一种有点可读的格式,这样我就可以试着找出它在做什么?

  • 环境== Windows w/VS 2008已安装。
100
cpuguru

jd-gui 是目前最好的反编译器。与尘封的JAD相比,它可以处理Java中的新功能。

196
DarenW

如果您不介意阅读字节码,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
69
Michael Myers

你想要一个Java反编译器,你可以使用命令行工具javap来做到这一点。此外, Java Decompiler HOW-TO 描述了如何反编译类文件。

7
Drew Frezell

使用 Jad 来反编译它可能是你最好的选择。除非代码被混淆,否则它将产生一个好的结果。

2
Rasmus Faber

您正在寻找的是Java解编译器。我推荐JAD http://www.kpdus.com/jad.html 它可以免费用于非商业用途并完成工作。

注意:这不会使代码与编写的代码完全相同。即你将失去评论和可能的变量名称,所以它将比阅读正常的源代码更难。如果开发人员真的很隐秘,他们也会对代码进行模糊处理,使其更难阅读。

2
David Beleznay

正如@MichaelMyers所指出的,使用

javap -c <name of Java class file> 

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

javap -c <name of Java class file> > decompiled.txt
2
Nilashish C

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

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

如果您的applet是使用更新的编译器编译的,您可以尝试 JD-GUI :这个反编译器正在开发中,然而,它为大多数时候生成正确的Java源代码,用于使用JDK 1.4,1.5编译的类或1.6。

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

2
Emmanuel Dupuy

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

1
arturh

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

1
cynicalman

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

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

1
Zac Gochenour

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

1
Karthikeyan Subramanian

肯定是JAD和/或JADclipse Eclipse插件。

1
John Gardner

您也可以使用在线Java反编译器。对于例如 http://www.javadecompilers.com

0
Prachi Sharma

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

0
Arno

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

0
amitwadhwa

如果您想要可读的Java代码,JAD是一个很好的选择。如果你真的想要深入研究.class文件格式的内部,那么你将需要javap。它与JDK捆绑在一起,允许您将十六进制字节码“反编译”为可读的ASCII。它产生的语言仍然是字节码(不像Java那样),但它具有相当的可读性和极具指导性。

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

0
Daniel Spiewak

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

0
tidbeck