一、什么是编译1、利用编译器将用源语言编写的源程序生成目标程序的过程。2.使用编译器生成目标程序的动作。编译就是把高级语言变成计算机可以识别的二进制语言。计算机只认识1和0,编译器把人们熟悉的语言换成了二进制。编译器将源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。它主要进行词法分析和语法分析,也称为源程序分析。在分析过程中,发现语法错误并给出提示信息。2、什么是反编译计算机软件逆向工程(Reverseengineering),又称计算机软件修复工程,是指对他人软件的目标程序(可执行程序)进行“逆向分析研究”,从而推导出设计要素的工作软件产品中使用的思想、原理、结构、算法、处理过程、运行方法等,在一定情况下可以推导出源代码。自己开发软件时反编译作为参考,或者直接在自己的软件产品中使用。3、Java类的编译与反编译刚开始学习Java的时候,我们会接触到两个命令:javac和java。那时候我们知道javac是用来编译Java类的,也就是把写好的helloworld.java文件编译成helloworld.class文件。类文件打破了C或C++等语言遵循的传统。用这些传统语言编写的程序通常会先被编译,然后链接成一个单独的二进制文件,专门支持特定的硬件平台和操作系统。通常,一个平台上的二进制可执行文件无法在其他平台上运行。Java类文件是一个二进制文件,可以在任何支持Java虚拟机的硬件平台和操作系统上运行。所以反编译就是通过helloworld得到java文件(或者程序员能看懂的Java文件)。如果看不懂Java类文件,那么我们可以反编译成我们看得懂的文件。2、在学习Java的过程中,每个版本的JDK都会加入越来越多的语法糖。有时候我们想知道Java的一些实现细节,可以使用反编译。五、反编译工具1、javap2、Jad:官网(翻墙破解推荐)客户端:可以从官网下载可执行文件,找到对应操作系统的对应版本,然后安装使用。因为我使用的是Linux操作系统,所以下载了Linux版的工具。工具下载完成后,会有一个执行文件。只要在执行文件所在目录下执行./jadhelloworld.class,就会在当前目录下生成。helloworld.jad文件,也就是我们非常熟悉的Java代码。Eclipse插件:下载地址在官网下载插件的jar包,然后把jar包放到eclipse的plugins目录下打开Eclipse,Eclipse->Window->Preferences->Java,在这个这时你会发现原来多了一个JadClipse的选项,点击,在Pathtodecompiler中输入刚才放置jad.exe的位置,也可以指定临时文件的目录。当然JadClipse下还有一些子选项,比如Debug、Directives等,按照默认配置即可。基本配置完成后,我们可以查看class文件的默认打开方式,Eclipse->Window->Preferences->General->Editors->FileAssociations,可以看到class文件有两种打开方式、JadClipse和Eclipse都带有ClassFileViewer,而JadClipse是默认的。所有的配置都完成了,现在我们可以查看源码了,选择要查看的类,按F3就可以查看源码了。【本文为专栏作家霍利斯原创文章,作者微信公众号Hollis(ID:hollishuang)】点此阅读更多本作者好文
