Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以人类可读的方式打开Java.class文件?_Java_Windows_Class_Applet - Fatal编程技术网

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

如何以人类可读的方式打开Java.class文件?,java,windows,class,applet,Java,Windows,Class,Applet,我试图弄清楚Java小程序的类文件在后台做什么。用记事本或文本板打开它,就会看到一堆狼吞虎咽的东西 有没有办法把它重新整理成可读的格式,这样我就可以试着弄清楚它在做什么 环境==Windows w/VS 2008已安装 使用它进行反编译可能是您的最佳选择。除非对代码进行了模糊处理,否则它将产生一个正常的结果。这是已编译的代码,您需要使用像JAD这样的反编译器:如果您想要一个java反编译器,您可以使用命令行工具javap来执行此操作。此外,还介绍了如何反编译类文件。您正在寻找的是java反编译

我试图弄清楚Java小程序的类文件在后台做什么。用记事本或文本板打开它,就会看到一堆狼吞虎咽的东西

有没有办法把它重新整理成可读的格式,这样我就可以试着弄清楚它在做什么

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

    • 使用它进行反编译可能是您的最佳选择。除非对代码进行了模糊处理,否则它将产生一个正常的结果。

      这是已编译的代码,您需要使用像JAD这样的反编译器:

      如果您想要一个java反编译器,您可以使用命令行工具
      javap
      来执行此操作。此外,还介绍了如何反编译类文件。

      您正在寻找的是java反编译器。我推荐JAD,它可以免费用于非商业用途,并且可以完成任务


      注意:这不会使代码与编写的代码完全相同。i、 您将丢失注释和可能的变量名,因此这将比仅仅读取普通源代码要困难一些。如果开发人员真的是保密的,他们也会混淆他们的代码,使其更难阅读

      根据建议,您可以使用JAD对其进行反编译并查看文件。为了便于阅读,您可以使用eclipse的JADclipse插件将JAD直接集成到eclipse,或者使用比命令行JAD更容易使用的DJ 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
      
      用法:javap。。。 其中包括: -c反汇编代码 -类路径指定查找用户类文件的位置 -extdirs覆盖已安装扩展的位置 -帮助打印此使用信息 -J直接传递到运行时系统 -打印行号和局部变量表 -公共仅显示公共类和成员 -受保护显示受保护/公共类和成员 -包显示包/受保护/公共类 和成员(默认) -私人秀所有班级和成员 -s打印内部类型签名 -bootclasspath覆盖加载的类文件的位置 通过引导类装入器 -详细打印堆栈大小、局部数和方法的参数数 如果正在验证,请打印失败原因
      如果您想要可读的Java代码,JAD是一个很好的选择。如果您真的想深入研究
      .class
      文件格式的内部结构,那么您需要
      javap
      。它与JDK捆绑在一起,允许您将十六进制字节码“反编译”为可读的ASCII码。它产生的语言仍然是字节码(不像Java),但它可读性很强,非常有教育意义


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

      是目前最好的反编译器相同。它可以处理Java中较新的功能,而不必使用JAD。

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


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

      JAD和/或JADclipse Eclipse插件,当然。

      不需要反编译Applet.class。公共JavaAPI类源代码随JDK一起提供(如果您选择安装它),并且比反编译字节码可读性更好。您可以在src.zip(位于JDK安装文件夹中)中找到compressed。

      如果要查找的类文件是开源的,则不应将其反编译,而应将源文件直接附加到IDE中。这样,您就可以像查看自己的

      cpuguru一样查看某个库类的代码,如果您的applet是使用javac1.3(或更低版本)编译的,那么最好的选择是使用Jad

      不幸的是,JAD1.5.8(2001年4月14日)支持的最后一个JDK是JDK1.3

      如果您的小程序是使用较新的编译器编译的,您可以尝试:这个反编译器正在开发中,但是,大多数情况下,它会为使用JDK1.4、1.5或1.6编译的类生成正确的Java源代码


      DarenW,谢谢你的帖子。JD-GUI还不是最好的反编译器。。。但我正在研究:)

      jdGUI“是反编译.class文件的最佳和用户友好的选择….

      是一个非常好的反编译器,适用于现代Java编写的Java 6。

      正如@MichaelMyers所指出的,使用

      javap -c <name of java class file> 
      
      javap-c
      
      获取JVM程序集代码。还可以将输出重定向到文本文件,以提高可见性

      javap -c <name of java class file> > decompiled.txt
      
      javap-c>decompiled.txt
      
      您还可以使用可用的在线java反编译器。例如,

      仅仅是一个语义问题,它不应该是一个=而不是两个吗是一个问题,while=是一个陈述,您正在陈述您的环境。您能澄清这个问题吗?我当时的想法是,您想读取实际的字节码,但似乎您实际上想反编译其他人的代码。@icco,=表示赋值,==表示相等。他说(Environment==Windows w/VS2008 installed)是真的,而不是命令将Environment设置为Windows w/VS2008 installed。一个离题和书呆子的人。记录在案==没有声明平等;它检验平等。你可以写true==false,它和写环境==Windows w/VS 2008安装一样有意义,也就是说根本没有意义。这个答案到2020年有多新?只要