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

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

How can I open Java .class files in a human-readable way?

我试图弄清楚Java applet的类文件在做什么。 用记事本或文本板打开它只会显示一堆乱码。

有什么方法可以将其纠缠成某种可读性的格式,以便我可以弄清楚它在做什么吗?

  • 环境==安装了带VS 2008的Windows。

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


如果您不介意读取字节码,则javap应该可以正常工作。它是标准JDK安装的一部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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描述了如何反编译类文件。


正如@MichaelMyers指出的那样,请使用

1
javap -c <name of java class file>

获取JVM汇编代码。您也可以将输出重定向到文本文件以获得更好的可见性。

1
javap -c <name of java class file> > decompiled.txt

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


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尚不是最好的反编译器...但是我正在研究:)


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

注意:这不会使代码与编写的代码完全相同。即,您将丢失注释和可能的变量名,因此,与仅阅读常规源代码相比,这将更加困难。如果开发人员确实是秘密的,他们也会混淆自己的代码,从而使其更难阅读。


使用Jad进行反编译可能是您的最佳选择。除非代码被混淆,否则将产生好的结果。


这是已编译的代码,您需要使用反编译器(例如JAD):http://www.kpdus.com/jad.html


当然,可以使用JAD和/或JADclipse Eclipse插件。


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


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

我会回应一些评论,与原始源代码相比,您可能会有所损失。如果代码由于擦除而使用了泛型,那就显得特别有趣。


如果您想要可读的Java代码,那么JAD是一个很好的选择。但是,如果您确实想深入研究.class文件格式的内部,则需要javap。它与JDK捆绑在一起,使您可以将十六进制字节码"反编译"为可读的ASCII。它产生的语言仍然是字节码(不是J??ava之类的东西),但是它相当易读且极富启发性。

另外,如果确实需要,可以在十六进制编辑器中打开任何.class文件,然后直接读取字节码。结果与使用javap相同。


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


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


无需反编译Applet.class。 JDK附带了公共Java API类源代码(如果您选择安装它的话),并且比反编译的字节码可读性更好。您可以在src.zip(位于JDK安装文件夹中)中找到压缩文件。


CFR-另一个Java反编译器是Java 6编写的现代Java的出色反编译器。


推荐阅读

    linux文件异或命令?

    linux文件异或命令?,数字,系统,工作,管理,命令,数据,网络,文件,第一,单位,基

    linux满屏显示命令?

    linux满屏显示命令?,工具,系统,服务,电脑,网络,技术,信息,数据,上会,软件,如

    linux文件复制的命令?

    linux文件复制的命令?,系统,文件,命令,目录,源文件,基本知识,位置,目标,选

    显示linux时间命令?

    显示linux时间命令?,时间,系统,信息,一致,命令,文件,终端,目录,选项,参数,lin

    linux复制命令文件?

    linux复制命令文件?,系统,文件,命令,目录,基本知识,源文件,目标,文件夹,路

    linux下文件均分命令?

    linux下文件均分命令?,管理,情况,系统,工作,信息,地址,命令,目录,单位,设备,L

    linux的文件替换命令?

    linux的文件替换命令?,系统,工作,实时,命令,文件,批量,字符串,内容,方法,表

    linux常用命令文本?

    linux常用命令文本?,工作,命令,网络,地址,系统,管理,标准,信息,目录,文件,Lin

    linux查文件数量命令?

    linux查文件数量命令?,系统,数据,电脑,命令,文件,信息,代码,对比,软件,第三,l

    linux命令刷新显示?

    linux命令刷新显示?,系统,工作,最新,地址,命令,异常,分析,工具,信息,软件,Lin

    linux命令去重文件?

    linux命令去重文件?,系统,工作,命令,信息,数据,环境,代码,文件,目录,操作,Lin

    linux写大文件命令?

    linux写大文件命令?,服务,数据,第三,较大,基础,工具,设备,文件,大小,命令,lin

    linux查询文件夹命令?

    linux查询文件夹命令?,系统,软件,电脑,命令,文件,文件夹,单位,第三,档案,数

    linux多文件打包命令?

    linux多文件打包命令?,系统,工具,时间,代码,文件,命令,文件夹,目录,指令,格

    linux显示最多的命令?

    linux显示最多的命令?,系统,情况,信息,数据,工具,电脑,状态,时间,分析,命令,

    linux匹配文件名命令?

    linux匹配文件名命令?,系统,时间,发行,位置,工具,软件,名称,盘后,电脑,盘中,l

    linux上编辑文件命令?

    linux上编辑文件命令?,系统,信息,工作,状态,命令,文件,标准,检测,工具,设备,L

    改文件名linux命令?

    改文件名linux命令?,名字,软件,文件,命令,位置,系统,文件名,目录,指令,方面,l

    linux命令文件加锁?

    linux命令文件加锁?,数据,密码,系统,设备,代码,地址,名单,信息,数字,统一,请

    linux显示隐藏命令?

    linux显示隐藏命令?,系统,电脑,档案,工具,一致,生产,文件夹,文件,命令,开头,l