首页 / 软件开发 / JAVA / 谈谈JAVA程序的反编译
谈谈JAVA程序的反编译2011-01-23如今JAVA语言在全世界范围正如火如荼般的流行,它广范地应用在INTERNET的数据库、多媒体、CGI、及动态网页的制作方面。1999年在美国对JAVA程序员的需求量首次超过C++!作者因最近分析一些JAVA程序,对JAVA的反编译进行了一番了解,下面将我所了解的情况作以下介绍,希望对JAVA爱好者有所帮助。JAVA是采用一种称做“字节编码”的程序结构,分为小程序(嵌入到HTML文件中)和应用程序(直接在命令状态下执行)两种类型。无论哪种结构,一旦用JAVAC 命令编译后,均变成后缀为CLASS的同名可执行文件。这种文件是不可阅读的代码。经查阅了SUN公司的JDK(JDK1.1.3)文档资料后,我找到了一个据称是可反编译JAVA的JAVAP文件(EXE),这个文件位于JDKBIN 下面,经按说明使用后,感到失望,原来这个“反编译”仅可反编译出JAVA程序的数据区(定义)、若干方法和类的引用等。这里我用了一个简单例子来说明问题。JAVA的源程序hello_java.java如下:import java.applet.*;import java.awt.*;public class hello_java extends Applet{public void paint(Graphics g){g.drawString("Hello Java!
",20,20);}}经用反编译命令:javap -c -package -public -private hello_java hello.java得到的反编译结果(hello.java)如下:(有关javap命令的选择参数请见其使用说明,这里-c表示选择了反编译)Compiled from hello_java.javapublic synchronized class hello_java extends java.applet.Applet/* ACC_SUPER bit set */{public void paint(java.awt.Graphics);public hello_java();