版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qing_gee/article/details/86510704
01 JAD和JD-GUI的不同之处
JAD镜像下载的官网是 https://varaneckas.com/jad/
如果未来镜像的下载链接失效了,我的CSDN下载资源中备份了一个:https://download.csdn.net/download/qing_gee/10921233
需要注意的是:JAD不是JD-GUI,两者都是反编译工具,但并不相同。
大家都知道,将源代码转换成二进制执行代码的过程叫“编译”,比如将Java源代码编译成.class字节码文件;那么把字节码文件转换成代码的过程就叫“反编译”。
比如有这样一段代码:
package com.cmower.java_demo.fourteen;
public class Cmower3 {
public static void main(String[] args) {
String cmowers = "";
for (int i = 0; i < 10; i++) {
cmowers += "沉默王二";
}
System.out.println(cmowers);
}
}
JAD反编译的结果是:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: Cmower3.java
package com.cmower.java_demo.fourteen;
import java.io.PrintStream;
public class Cmower3
{
public Cmower3()
{
}
public static void main(String args[])
{
String s = "";
for(int i = 0; i < 10; i++)
s = (new StringBuilder()).append(s).append("\u5A0C\u5910\u7CAF\u941C\u5B29\u7C29").toString();
System.out.println(s);
}
}
你能够知道+号操作符转换成了StringBuilder——这特别的关键,就像javap一样,只不过更加的清晰明了,javap一般人看不太懂,如下:
D:\program\java.git\java_demo\src\main\java\com\cmower\java_demo\fourteen>javap -c Cmower3
警告: 二进制文件Cmower3包含com.cmower.java_demo.fourteen.Cmower3
Compiled from "Cmower3.java"
public class com.cmower.java_demo.fourteen.Cmower3 {
public com.cmower.java_demo.fourteen.Cmower3();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: ldc #2 // String
2: astore_1
3: iconst_0
4: istore_2
5: iload_2
6: bipush 10
8: if_icmpge 37
11: new #3 // class java/lang/StringBuilder
14: dup
15: invokespecial #4 // Method java/lang/StringBuilder."<init>":()V
18: aload_1
19: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
22: ldc #6 // String 娌夐粯鐜嬩簩
24: invokevirtual #5 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
27: invokevirtual #7 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
30: astore_1
31: iinc 2, 1
34: goto 5
37: getstatic #8 // Field java/lang/System.out:Ljava/io/PrintStream;
40: aload_1
41: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
44: return
}
JD-GUI反编译的结果是:
如果我们想知道Java编译器都做了什么工作,JD-GUI反编译后的是最初的源码,因此我们对于javac实际编译的内容就不得而知了。
02 JAD的简单使用方法
下载好JAD并解压后(镜像),你将看到:
扫描二维码关注公众号,回复:
5269600 查看本文章
- jad.exe (无法直接运行)
- Readme.txt (使用说明)
为了更便捷的使用jad,我们可以将其加入到环境变量中。
然后打开CMD,输入以下命令(注意先要用javac命令进行编译):
jad Cmower3.class
然后会提示你
Parsing Cmower3.class... Generating Cmower3.jad
你在Cmower3.class所在的文件夹下就会发现多出来了Cmower3.jad,用文本编辑器打开即可查看。
你也可以直接下载我备份的链接——https://download.csdn.net/download/qing_gee/10921233
我把这份文档也放在了里面,祝你反编译成功!