如何防止JAVA程序源代码被反编译Java认证考试

文章作者 100test 发表时间 2010:01:02 16:12:50
来源 100Test.Com百考试题网


  我们都知道JAVA是一种解析型语言,这就决定JAVA文件编译后不是机器码,而是一个字节码文件,也就是CLASS文件。而这样的文件是存在规律的,经过反编译工具是可以还原回来的。例如Decafe、FrontEnd,YingJAD和Jode等等软件。下面是《Nokia中Short数组转换算法》

  类中Main函数的ByteCode:

  0 ldc #16

  2 invokestatic #18

  5 astore_1

  6 return

  其源代码是:short [] pixels = parseImage("/ef1s.png").

  我们通过反编译工具是可以还原出以上源代码的。而通过简单的分析,我们也能自己写出源代码的。

  第一行:ldc #16

  ldc为虚拟机的指令,作用是:压入常量池的项,形式如下

  ldc index

  这个index就是上面的16,也就是在常量池中的有效索引,当我们去看常量池的时候,我们就会找到index为16的值为String_info,里面存了/ef1s.png.

  所以这行的意思就是把/ef1s.pn作为一个String存在常量池中,其有效索引为16。

  第二行:2 invokestatic #18

  invokestatic为虚拟机指令,作用是:调用类(static)方法,形式如下

  invokestatic indexbyte1 indexbyte2

  其中indexbyte1和indexbyte2必须是在常量池中的有效索引,而是指向的类型必须有Methodref标记,对类名,方法名和方法的描述符的引用。

  所以当我们看常量池中索引为18的地方,我们就会得到以下信息:

  Class Name : cp_info#1

  Name Type : cp_info#19

  1 和19都是常量池中的有效索引,值就是右边


相关文章


java认证辅导:构造方法的继承Java认证考试
java23种设计模式中常用的九种Java认证考试
JAVA线程池的简单实现及优先级设置Java认证考试
java表格组建的使用Java认证考试
如何防止JAVA程序源代码被反编译Java认证考试
java如何通过googlemapapi实现地址解析Java认证考试
使用Servlet上下文实现侦听器Java认证考试
Java多线程优化之偏向锁原理分析Java认证考试
Java相对路径 绝对路径总结Java认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛