Fork me on GitHub

类加载中的验证

验证过程是确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的安全。
虚拟机如果不检查输入的字节流,可能会导致有害的字节流被加载而使系统奔溃。
如果验证到输入的字节流不符合Class文件格式的约束,虚拟机就会抛出一个java.lang.VerifyError异常或者是其子类异常。
验证的过程又分为四个小的过程:文件格式验证,元数据验证,字节码验证,符号引用验证。
1. 文件格式的验证包含如下:
是否是以魔数0xCAFFBABE开头
主次版本号是在当前虚拟机的处理范围内。
指向常量的各种索引值是否不存在。
CONSTANT_Utf8_info型的常量是否有不符合UTF8编码的数据
等等
格式验证时基于字节流操作的,只有通过格式验证,字节流才会进入内存的方法区中进行存储。
2. 元数据验证是对字节码描述的信息进行语义分析,以保证其描述信息符合java规范,验证的过程包含如下:
类是否有父类。
类是否继承了不被允许继承的类
类如果不是抽象类是否实现了其父类或接口之中要求实现的所有方法
3. 字节码验证通过对数据流和控制流分析,确定程序语义是否符合逻辑。


最新评论

    还没有人评论...

当当

友情链接

Powered by Python. Copyright © 2017.

鄂ICP备17010875号. All rights reserved.