Java程序设计知识与技能(二)
源自:赛迪网 乡村格调
代码的安全性概述
下图显示了Java技术的运行环境及其加强代码安全性的方法。
Java源程序文件通过“编译”,在你的感觉中,就好象是将它们从程序员编写的文本文件格式转换成了一组字节码。字节码被存储在 .class文件中。
构成Java软件程序的字节码在运行时被加载、校验并在解释器中运行。当运行applets时,字节码可被下载,然后由建于浏览器中的JVM进行解释。解释器具备两种功能,一是执行字节码,二是对底层硬件做适当调用。
在一些使用Java技术的运行环境中,部分校验过的字节码被编译成原始机器码并直接运行于硬件平台。这就使Java软件代码能够以C或C++接近的速度运行,只是在加载时, 因为要编译成原始机器码而略有延迟。
注意--SUN MicrosystemsTM通过采用新的技术,使Java虚拟机的性能已经有了进一步的提高。这种新型虚拟机被称为HotSpotTM虚 拟机,它具备了使Java编程语言能象编译C++一样快速运行的潜力。HotSpot虚拟机对操作系统具有本地多线程支持能力,而不是虚拟多线程。因而, HotSpot虚拟机可保证对一个应用程序来说,并不一定有代码才能使用这一能力。HotSpot技术解决了性能与移植性之间的难题。
执行三大任务:
加载代码
校验代码
执行代码
Java运行环境
一个Java技术的运行环境可运行为JVM编译的代码并执行如下三大任务:
- 加载代码-由类加载器执行
- 校验代码-由字节码校验器执行
- 执行代码-由运行时的解释器执行
类加载器
类加载器为程序的执行加载所需要的全部类。类加载器将局部文件系统的类名空间与来自网络源的类名空间相分离,以增加安全性。由于局部类总是首先加载,因而可限制任何“特洛依木马”的应用。
当全部类被加载后,可执行文件的存储器格式被确定。这时,特定的存储器地址被分配给符号引用并创建检索表格。由于存储器格式在运行时出现,因而Java技术解释器增加了保护以防止对限制代码区的非法进入。
字节码校验
可保证
- 代码符合JVM规范
- 代码不破坏系统完整性
- 代码不会引起操作数栈上溢或下溢
- 所有操作代码的参数类型的准确性
无非法数据转换(整数到指针的转换)
字节码校验器
Java软件代码在实际运行之前要经过几次测试。JVM将代码输入一个字节码校验器以测试代码段格式并进行规则检查--检查伪造指针、违反对象访问权限或试图改变对象类型的非法代码。
注意----所有源于网络的类文件都要经过字节码校验器
校验过程
字节码校验器对程序代码进行四遍校验,这可以保证代码符合JVM规范并且不破坏系统的完整性。如果校验器在完成四遍校验后未返回出错信息,则下列各点可被保证:
- 类符合JVM规范的类文件格式
- 无访问限制违例
- 代码未引起操作数栈上溢或下溢
- 所有操作代码的参数类型将总是正确的
- 无非法数据转换发生,如将整数转换为对象引用
- 对象域访问是合法的