你的位置:首页 > 软件开发 > Java > 实例探索Class文件

实例探索Class文件

发布时间:2015-10-16 10:00:03
class文件是指以.class为文件后缀的Java虚拟机可装载文件。无论该class文件是在linux上进行编译的,还是在windows环境下编译的,无论虚拟机是在何种平台下实现和运行的,class文件使得Java虚拟机可以正确的读取、解释所有的class文件。 在分析和研究c ...

实例探索Class文件

 class文件是指以.class为文件后缀的Java虚拟机可装载文件。无论该class文件是在linux上进行编译的,还是在windows环境下编译的,无论虚拟机是在何种平台下实现和运行的,class文件使得Java虚拟机可以正确的读取、解释所有的class文件。 在分析和研究class文件之前,先提出有一些问题:

1.类/接口(class文件也可能定义的是接口,所以还是不要理解为类文件为好)内有哪些内容?

2.以上内容分别保存在class文件的什么地方?

3.这些内容在加载过程中又如何被读取和解析?

4.这些内容加载后又会被解析成为什么样的数据结构保存在虚拟机中?

5.这些数据结构在虚拟机的运行过程中又是如何被使用的?

扩展问题:

6.如何防止class文件被劫持?

7.如何防止class文件被反编译?

 

class文件的组织结构定义如下:

ClassFile{magic            u4,minor_version        u2,major_version        u2,constant_pool_count      u2,constant_pool        cp_info*constant_pool_count,access_flags         u2,this_class          u2,super_class         u2,interface_count       u2,interfaces          u2 * interface_count,fields_count         u2,fields           field_info * fields_count,methods_count        u2,methods           method_info * methods_count,attributes_count       u2,attributes          attributes_info * attributes_count}
这里只实现了一个接口,就是5号常量池,即全限定名”TestInterface”所定义的接口

8.fields_count/fields(字段数和字段) 该属性的 该属性的 其生成的class文件如下: 其InnerClasses属性内容为: 其中匿名内部类Runnable的全限定名为InnerClassTest$1,由于其不是一个成员嵌套类(该类是局部嵌套类),其outer_class_info_index 为0,由于该类是一个匿名内部类,其inner_name_index为0(即简单名称为空) 在subClass的class文件中也有着如下的InnerClasses属性: 可以看出,每个作为外围类的内部类的类都将保存在该外围类的CONSTANT_Class常量池中,并有一个inner_class_info结构加以描述 

原标题:实例探索Class文件

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录