`
lingqi1818
  • 浏览: 249340 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

class文件检验器

阅读更多
和classloader一起class文件检验器保证装载的class文件内容有正确的内部结构,并且这些class文件相互间协调一致。如果class文件检验器在class文件中发现了问题,它将抛出异常。
class文件检验器的必要性:
由于class文件实质上是一个字节序列,所以虚拟机无法分辨class是正常的java编译器生成的,还是黑客产生的。class文件检验器可以确保class文件的安全使用。

class文件检验器对class进行独立的4趟扫描来完成操作。分别如下:
1.class文件的结构检验
在类被装载的时候进行,主要检查class文件的内部结构,证明被安全的编译。比如是否以4个同样的字节开头,尾部是否有被加上附加的东西等等。

(2,3趟主要在连接过程中进行,确认类型数据遵循java语言规范,以及确保字节码的完整性)
2.类型数据的语义检查
查看每个组成部分结构是否正确,比如字符是否符合上下文,final方法是否被子类覆盖等等。

3.字节码验证
确保任何路径的在字节码流中都得到正确的操作码,但不会试图检测所有的安全问题。比如有些不确定问题。

4.符号引用验证
虚拟机将追踪那些引用,从被验证的class文件到被引用的class文件。
大多数java虚拟机采用了延迟装载的方式,只有在被装载的类找不到该引用才会抛出NoClassDefFoundError,否则及时发现不能找到引用类也不抛出异常。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics