Jad其实是一个优秀的反汇编工具,在命令行下使用。Jad并不局限于IDEA,在eclipse下也有插件。这里记录一下Jad IDEA下的配置。
我想补充的是在 windows下不要把 Jad 解压到带有空格的路径下,会导致反编译失败。安装完成后需要配置一下jad.exe的路径,jad会有智能的提示。
测试一下Jad的反汇编效果。
原始源码:
package com.hankcs.strings;//: strings/Concatenation.java
public class Concatenation
{
public static void main(String[] args)
{
String mango = "mango";
String s = "abc" + mango + "def" + 47;
System.out.println(s);
}
} /* Output:
abcmangodef47
*///:~
先编译后反编译出来的结果:
/* Decompiled through IntelliJad */
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packfields(3) packimports(3) splitstr(64) radix(10) lradix(10)
// Source File Name: Concatenation.java
package com.hankcs.strings;
public class Concatenation
{
public Concatenation()
{
}
public static void main(String args[])
{
String mango = "mango";
String s = (new StringBuilder()).append("abc").append(mango).append("def").append(47).toString();
System.out.println(s);
}
}
反编译出来的结果跟原始代码几乎一摸一样,只不过编译的时候String被编译器替换为性能更高的StringBuilder。也许从反编译后的代码可以看出Java编译器的一些优化效果。