一、编译
编译就是把高级语言变成计算机可以识别的2进制语言(1和0)。
编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:
*词法分析、*语法分析、语义检查和中间代码生成、代码优化、目标代码生成。
主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
1.1 简单编译命令
javac TestMain.java
1.2 依赖其它jar包的编译命令
多个jar包以逗号隔开
javac -cp D:\yy\yy.jar,D\xx\xx.jar test.java
把所有jar包都放在C:\test\libs下
javac -Djava.ext.dirs=C:\test\libs test.java
二、运行
2.1 简单运行命令
java TestMain
执行时报错:错误: 找不到或无法加载主类 TestMain
报错分析:java中完整的类名应该是包名+类名 即:java 包名.类名
2.2 依赖其它jar包的运行命令
java -cp D:\yy\yy.jar,D\xx\xx.jar test
把所有jar包都放在C:\test\libs下
java -Djava.ext.dirs=C:\test\libs test
当前目录下依赖helloant.jar 以及 lib目录下所有, example包名 Hello类名
java -cp helloant.jar;lib/*; example.Hello
2.3 class文件生成jar文件后的运行
生成jar文件(先编译生成class文件)
jar cvf 自定义名称.jar 类名.class
运行该jar文件
java –jar 自定义名称.jar
报错 自定义名称.jar中没有主清单属性
打开.jar文件中的MANIFEST.MF文件,若没有Main-Class这一行,则添加Main-Class:类名(注意类名前面必须有一个空格)
2.4 依赖其它jar包的jar文件运行
不修改命令,修改MANIFEST.MF文件
增加Class-Path: jar包位置,多个jar包之间空格隔开
Class-Path: libs/jar1.jar libs/jar2.jar libs/jar3.jar
三、反编译
计算机软件反向工程(Reverse engineering)也称为计算机软件还原工程,
是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,
以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素以及源代码。
3.1 反编译-jad
解压 jad158g.win.zip可用 jad.exe 放入jdk\bin目录下
jad常用命令:
jad -o -r -sjava -dsrc GetWorkInterface.class
在当前目录生成 src\包目录\GetWorkInterface.java文件
-r表示保持原始package结构
-dsrc表示output目录为当前的src目录
-sjava表示反编译后的后缀为.java
jad -p GetWorkInterface.class > GetWorkInterface.java
在当前目录生成 GetWorkInterface.java文件
jad -o -a GetWorkInterface.class > GetWorkInterface.java
输出带字节码注释和源码的(最常用)
3.2 反编译-javap
javap 常用命令:
javap -verbose WorklistServiceImpl
javap -verbose GetWorkInterface >> 1.txt
3.3 反编译-JD-GUI
GUI界面,拉入class、jar文件即显示
3.4 反编译-procyon-decompiler
命令行界面
procyon-decompiler常用命令
java -jar C:\log\procyon-decompiler-0.5.30.jar C:\log\Test.class
java -jar C:\log\procyon-decompiler-0.5.30.jar C:\log\Test.class -o C:\log
3.5 反编译-luyten
luyten是Procyon的GUI,只需要下载luyten即可,不用下载Procyon
luyten是图形化界面,通过File直接打开class文件即可显示源码
3.6 反编译-CFR
CFR常用命令
java -jar C:\log\cfr-0.150.jar C:\log\Test.class
java -jar C:\log\cfr-0.150.jar C:\log\Test.class --outputdir C:\log
3.7 反编译-Eclipse插件
在官网下载插件的jar包
然后将jar包放到eclipse的plugins目录下
再打开Eclipse,Eclipse->Window->Preferences->Java,此时你会发现会比原来多了一个JadClipse的选项,单击,在Path to decompiler中输入你刚才放置jad.exe的位置,也可以制定临时文件的目录。
当然在JadClipse下还有一些子选项,如Debug,Directives等,按照默认配置即可。
基本配置完毕后,我们可以查看一下class文件的默认打开方式:Eclipse->Window->Preferences->General->Editors->File Associations我们可以看到class文件的打开方式有两个,JadClipse和Eclipse自带的Class File Viewer,而JadClipse是默认的。
全部配置完成,下面我们可以查看源码了,选择需要查看的类,按F3即可查看源码