文档章节

class文件检查器学习记录

 一天两天的天
发布于 2016/11/25 10:52
字数 763
阅读 5
收藏 0

java文件编译成class文件,在编译期 jvm进行了文件检查

1,结构检查;扫描class文件是不是一个符合虚拟机规范的class文件结构,如:模数,版本号等。如果class遵守了class文件规范,那么它将被编译成方法区内(基于实现的)内部数据结构。(第二第三第四次扫描不是针对class文件结构的二进制进行,而是在方法区上进行的)

2,数据类型语义检查;这次检查每个组成部分,确认它们是否是其所属类的实例,它们的结构是否正确,例如方法描述符(它的方法返回类型,参数,参数类型,个数)在class文件中被存储为一个字符串,这个字符串必须符合特定的上下文无关文法。检查器对每个组成部分进行检查的目的之一就是,为了每个方法描述符都是符合特定语法的,格式正确的字符串。另外,class文件检验器检查这个类本身是否符合特定条件,这些都是java编程语言规定的。例如:规定这个类除了Object以外的所有类,都必须有一个超类。在本次检查中,检验器还检查final类有没有被子类化,final方法有没有被覆盖。还要检查常量池条目是否合法,并且常量池的所有索引都必须指向类型的常量池条目。也就是说,class文件检验器在运行时检查一些java语言应该在编译期遵守的强制规定。

3,字节码验证;当成功进行了前两项检查后,本次扫描是虚拟机针对字节流进行分析,这些字节流代表类的方法,也就是存放在方法区里的类型信息。它必须保证局部变量在赋予合适的值前不会被访问,并且类的字段必须被赋予正确的值和类型。类的方法被调用时传入的参数的正确性等。当整个检验过程完成后,他就能保证这个字节流能够安全的运行。(在1,2,3项检查中,class文件检验器将保证class文件的结构合理性,符合java编程语言的规范,并且包含的字节码都能被虚拟机安全的执行,如果有错,将抛出错误)

4,符号引用验证;本次检查,虚拟机会追踪那些引用-从被验证的class文件到被引用的class文件,以确保该引用的正确性。因为本次检查会检查到本class以外的其他类,所以本次检查还涉及到类的装载(java类是延迟加载)如果该引用不能被正确装载,将抛出NoClassDefFoundError错误

                                                                                                                 摘自《深入java虚拟机》第二版

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 1
码字总数 763
作品 0
江北
java安全沙箱(二)之.class文件检验器

java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器...

xionghuiCoder
2015/09/04
0
0
Java基础-Java编译详解

Java基础-Java编译详解 Java源代码编译过程 Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过...

xjt2016
2016/12/27
30
0
《JAVA编程思想》学习笔记——第十四章 类型信息

运行时类型信息使得你可以在程序运行时发现和使用类型信息。 主要有两种方式:一种是"传统的"RTTI, 它假定我们在编译时已经知道了所有的类型;另一种是"反射"机制,它允许我们在运行时发现和使...

lixiaocheng18
2017/03/30
0
0
JAVA高级编程之类加载-反射-动态代理

Java高级编程之类加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载 就是指将class文件读入内存,并为之创建一个...

清枫_小天
2016/07/16
0
0
osgi学习博客收藏

使用场景:http://www.blogjava.net/BlueDavy/archive/2009/04/29/268227.html 动态化介绍:http://www.blogjava.net/BlueDavy/archive/2009/04/29/268227.html 在Spring DM中使用Annotatio......

卢瑶
2016/08/16
13
0

没有更多内容

加载失败,请刷新页面

加载更多

可爱的python测试开发库(python测试开发工具库汇总)

欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 相关书籍下载 测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接 selenium - web UI自动化测试。 链...

python测试开发人工智能安全
今天
2
0
Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部