我试图弄清楚Java小程序的类文件在底层做什么。用记事本或Textpad打开只显示一堆乱码。
有没有办法将它转换为较易读的格式,以便我可以尝试理解它在做什么?
- 环境 == 安装了VS 2008的Windows系统。
我试图弄清楚Java小程序的类文件在底层做什么。用记事本或Textpad打开只显示一堆乱码。
有没有办法将它转换为较易读的格式,以便我可以尝试理解它在做什么?
jd-gui目前是最佳的反编译器。相比于日渐老旧的JAD,它能够处理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
正如 @MichaelMyers 指出的那样,请使用
javap -c <name of java class file>
要获取JVM汇编代码,您也可以将输出重定向到文本文件以获得更好的可视性。
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 文件……
如果您的小程序是使用javac 1.3(或更低版本)编译的,那么您最好使用Jad。
不幸的是,JAD 1.5.8(2001年4月14日发布)支持的最后一个JDK版本是JDK 1.3。
如果您的小程序是使用更新的编译器编译的,您可以尝试使用JD-GUI:这个反编译器正在开发中,但它能够为大多数使用JDK 1.4、1.5或1.6编译的类生成正确的Java源代码。
DarenW,感谢您的帖子。JD-GUI目前还不是最好的反编译器,但我正在努力改进它 :)