Jad其实是一个优秀的反汇编工具,在命令行下使用。Jad并不局限于IDEA,在eclipse下也有插件。这里记录一下Jad IDEA下的配置。
插件的安装很简单,请参考http://wangqiaowqo.iteye.com/blog/404272。
我想补充的是在 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编译器的一些优化效果。