1、目的:别人不愿意给你源代码,所以给你了一份编译好的class文件或者是一个导出的jar包或者war包。然而,我们希望可以读到源代码,所以需要将class文件编程java文件
由于主流的C的编译器都进行了代码的优化,因此把C编译生成的exe文件反编译成C代码非常困难。但是像Java、.net这样基于虚拟机技术的编程语言则反编译非常容易,Java平台下有Jad、Jode、JD等反编译器,.net平台下则有Reflector等反编译器,他们的反编译质量非常高,甚至和源代码几乎没什么差别。
2、反编译得到的几乎和源代码差不多
反编译得到的代码是非常接近于源代码,但是或多或少与源代码有一些差异的,比如一些表达式被优化掉了,比如,下面的源代码:
int i=1+1;
由于在编译过程中已经进行了优化,把“1+1”这个原始的信息丢掉了,因此反编译出来的代码只能是:
int i=2;
3、常用工具
(1) JD-GUI
JD-GUI是属于Java Decompiler项目(JD项目)下个的图形化运行方式的反编译器。
JD-Eclipse属于Java Decompiler项目(JD项目)下个Eclipse插件化运行方式的反编译插件。
JD-IntelliJ属于Java Decompiler项目(JD项目)下个Intellij插件化的运行方式的反编译插件。
JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse,Inte