十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Java代码的编译与反编译
我们提供的服务有:网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、兰州ssl等。为超过千家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的兰州网站制作公司
2017-02-21Hollis数盟
一、什么是编译
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
二、什么是反编译
计算机软件反向工程(Reverseengineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。反编译作为自己开发软件时的参考,或者直接用于自己的软件产品中。
三、Java类的编译与反编译
我们在最初学习Java的时候,会接触到两个命令:javac和java,那个时候我们就知道,javac是用来编译Java类的,就是将我们写好的helloworld.java文件编译成helloworld.class文件。
class文件打破了C或者C++等语言所遵循的传统,使用这些传统语言写的程序通常首先被编译,然后被连接成单独的、专门支持特定硬件平台和操作系统的二进制文件。通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作。而Javaclass文件是可以运行在任何支持Java虚拟机的硬件平台和操作系统上的二进制文件。
那么反编译呢,就是通过helloworld.class文件得到java文件(或者说是程序员能看懂的Java文件)
四、什么时候会用到反编译
1、我们只有一个类的class文件,但是我们又看不懂Java的class文件,那么我们可以把它反编译成我们可以看得懂的文件。
2、学习Java过程中,JDK的每个版本都会加入越来越多的语法糖,有些时候我们想知道Java一些实现细节,我们可以借助反编译。
五、反编译工具
1、javap
2、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即可查看源码
查了些资料回答是:
rational rose 中对java代码怎样进行逆向工程,得到类图??
添加变量ClassPahth到windows环境中,
CLASSPATH=C:\Program Files\Java\j2re1.4.1_04\lib\rt.jar
然后转换路径为:
1.点击Tools- Java/J2ee- Reverse Engineer,调出Java Reverse Engineer对话框。
2、在此页面添加要进行逆向工程的Java文件,并选中,然后点击Reverse按钮即可
但是,我点“add” 都没有反应。希望有心人能帮帮忙,非常感谢谢谢!(下面就是我按照步骤打开的窗口)
常用的是StarUML,其他一些UML软件,如Rational Rose都是可以的,即可正向生成,也可以逆向生成
rose帮助位于 HELPCONTENTSROSE JAVAHOW TO REVERSE ENGINEER FROM JAVA SOURCE TO ROSE
反向工程就是通过java代码生成或者更新一个模型的过程。你可以用ROSE对以下文件进行反向
A.Java source code (.java files)
B.Java bytecodes (.class files)
C.zip, .cab, and .jar files
1. Open the model you want to create or update.
打开一个你刚创建或者想更新的模型
新建一个class diagram(如果你还不会,那么这篇文章就别看了)
2.单击Tools Java/J2EE Reverse Engineer
那么现在大家可以想象一下rose会怎么做,刚才是选择了图,创建目标路径,生成代码,那么
现在是否指定路径读文件生成图呢,you can say that again!!
在出现的界面上选择一个classpath(如果已经存在)当然,你也可以通过edit classpath按钮新建一个(新建路径的界面刚才讲过了,不再累赘),然后选择这个classpath,更改下面的filter下拉列表,更改目标文件类型(注意不仅仅三行,可以滚动的,对rose的界面真是垃圾这一点又深有体会了),我们这里选择.java,如果这个classptah下存在.java文件,那么就会被列出来 。
注意:你可以通过 add添加选中的文件,也可以通过add all添加所有列出来的,更可以通过 add recursive 递归添加这个路径下所有的文件和子目录下所有文件等等。可以看到rose并不会自动列出甚至显示有没有子目录(无人性) 从添加好的文件里选择你想反向的文件,点Reverse 开始创建或者更新无论成功还是失败都会警告,并有log。有错你就改到没错为止。
假设你成功了,点击done结束反向,回到rose主界面。 (来源:)