第 23卷第 4期 计算机应用与软件 Vol123,No. 4
2006年 4月 Computer Applications and Software Apr. 2006
收稿日期 : 2005 - 05 - 23。倪国军 ,硕士生 ,主研领域 :计算机应用
与软件工程。
Java Class文件的结构分析及其校验
倪国军 盘细平 宋 韬
(
上海市计算技术研究所 上海 200040
)
摘 要 Java是一个纯粹的面向对象语言 ,其中最重要的概念和数据结构就是类了。本文通过对 Java类文件的结构进行介绍和
分析 ,实现了一个 Java类文件的校验器。
关键词 校验器 Class文件 字节码 KVM
STRUCTURE ANALY SIS OF JAVA CLASS F ILE AND ITS VER IFICAT IO N
Ni Guojun Pan Xiping Song Tao
(
Shanghai Institute of Com puting Technology, Shanghai 200040, China
)
Abstract Java is a pure object2oriented language, and the most important concept and data structure is Class. After introducing and analy2
sing the structure of Java class file, a Verifier is implemented in this paper.
Keywords Verifier Class File ByteCode KVM
0 引 言
我们在一个嵌入式系统中实现了 Java虚拟机 ,本文根据我
们的研究 ,分析了 Java class文件的结构 ,并描述了我们实现的
类校验算法。
1 Java class类文件校验的目的和原理
Java class类文件校验器保证装载的 Class文件内容有正确
的内部结构 ,确保 Class文件中定义的类型可以安全地使用 ,并
且这些 Class文件相互协调一致。
Java文件校验器要进行四趟独立的扫描来完成它的操作 ,
每趟扫描进行的操作如下 :
1
)
Class文件的结构检查 :在类装载时进行 ,检查这个 Class
文件的内部结构 ,以保证它可以被安全地编译 。
2
)
类型数据的语义检查 :在连接过程中进行 ,确认类型数
据遵从 Java的语义。
3
)
字节码验证 :在连接过程中进行 ,校验 Class文件所包含
的所有字节码的完整性。
4
)
符号引用的验证 :在进行动态连接的过程中解析符号引
用时进行 ,确认被引用的 class或 interface、field以及 method确
实存在。
要实现一个 Java类文件的校验器 ,首先要对 Java类文件的
结构有个清晰的认识。
2 Java class类文件结构介绍和分析
编写出一个扩展名为. Java的源文件 ,在经过 Java编译器
的处理之后会产生一个或多个扩展名为. Class的类文件 ,之后
这些类文件经过虚拟机 VM
(
V irtual Machine
)
的解释就可以执
行出我们想要的结果。VM 要能够解释 Java类文件 ,就要了解
Java类文件的结构。以下将以传统 C语言的 Structure来说明它
的内部结构 ,首先 Java类文件的结构如下所示 :
Struct JavaClass {
u4 magic_number
u2 m inor_version
u2 major_version
u2 constant_pool_count
cp_info constant_pool[ constant_pool_count - 1 ]
u2 access_flag
u2 this_class
u2 super_class
u2 interfaces_count
u2 interfaces[ interfaces_count]
u2 fields_count
field_info fields[ fields_count]
u2 methods_count
method_info methods[methods_count]
u2 attributes_count
attributes_info attributes[ attributes_count]
}
其中每个字段前面修饰符中的 u代表 unsigned,后面跟的数字
表示占的字节数。
1
)
magic number
在 Java类文件最前头的 4个 bytes代表的是一个等于“CA2
FE BA BE”的 magic numbe。
2
)
m inor_version,major_version