一、Jad与jdgui的关系

在解析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反编译出的代码非常清晰易读,可以轻松理解代码逻辑,从而进行对源码的学习、修改或者扩展。