一、Jad与jd-gui的关系
在解析jd-gui的使用方法之前,需要先了解一下Jad与jd-gui的关系。
Jad是一款经典的Java反编译器,可以将class文件反编译成java源码。
而jd-gui是基于Jad的一款图形化界面工具,它可以直接打开jar包、class文件等,将class字节码文件反编译成Java源代码,能够轻松查看代码并了解代码逻辑。
因此,使用jd-gui需要先下载Jad,并将其加入jd-gui。
二、jd-gui使用方法
1、基本操作
首先打开jd-gui,点击“文件”菜单,选择“打开”,选择需要反编译查看的jar包或class文件,然后就可以直接浏览源代码了。
在顶部的工具栏上,有一组常用的操作按钮:打开文件、保存文件、复制、查找、前进、后退等。在浏览代码的过程中,可以按住Ctrl键并滚动鼠标滚轮来调整字体大小,方便查看。
2、反编译配置
在菜单栏中选择“选项”,弹出选项窗口。这里可以设置Java反编译器(即Jad)的选项,如设置JVM参数、自动保存反编译结果等。
在选项窗口的“文件类型”选项中可以设置可以打开的文件类型,例如class、jar、zip等。设置好文件类型之后,在打开文件时就只会显示符合类型的文件了。
3、查看字节码
在查看反编译的源代码时,可以点击顶部菜单中的“字节码”按钮,查看该类文件的字节码信息。
通过查看字节码可以更深入地了解类的实现细节,可以看到类的各种成员变量、方法以及其他属性的字节码信息。可以通过字节码知道这个类在Java虚拟机中是怎么实现的。
4、查找关键词
在顶部工具栏中,有一个放大镜的图标,点击后可以输入需要查找的关键词。jd-gui会自动在源代码中查找这个关键词并高亮显示。
同时,可以在选项中设置“统计信息”选项,可以让jd-gui为我们生成代码中包含特定关键词的统计信息报告。
5、导出源代码
在顶部菜单中选择“文件”和“全部另存为”选项,可以将整个jar包或class文件导出成一个压缩包或者单独的文件夹,里面包含了反编译后的所有Java源代码。
这个功能非常实用,可以用于备份源代码或者直接进行修改、编译等操作。
三、使用示例
最后,我们来看一个使用jd-gui反编译jar包的示例:
import java.util.stream.Collectors; public class Main { public static void main(String[] args) { System.out.println("Hello, world!"); System.out.println(getNumbers(10)); } private static String getNumbers(int max) { return java.util.stream.IntStream.rangeClosed(1, max) .filter(num -> num % 2 == 0) .mapToObj(Integer::toString) .collect(Collectors.joining(", ")); } }
假设我们有一个包含这个类的jar包文件“test.jar”,可以通过jd-gui打开,反编译出源代码。
结果如下:
import java.util.stream.Collectors; public class Main { public static void main(final String[] args) { System.out.println("Hello, world!"); System.out.println(getNumbers(10)); } private static String getNumbers(final int max) { return (String)java.util.stream.IntStream.rangeClosed(1, max).filter(num -> num % 2 == 0).mapToObj(Integer::toString).collect(Collectors.joining(", ")); } }
可以发现,jd-gui反编译出的代码非常清晰易读,可以轻松理解代码逻辑,从而进行对源码的学习、修改或者扩展。