实例探索class文件-java开发java经验技巧

实例探索class文件-java开发java经验技巧

ID:30887721

大小:478.19 KB

页数:21页

时间:2019-01-03

实例探索class文件-java开发java经验技巧_第1页
实例探索class文件-java开发java经验技巧_第2页
实例探索class文件-java开发java经验技巧_第3页
实例探索class文件-java开发java经验技巧_第4页
实例探索class文件-java开发java经验技巧_第5页
资源描述:

《实例探索class文件-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实例探索Class文件-编程开发技术实例探索Class文件原文出处:iceAeternaclass文件是指以.class为文件后缀的Java虚拟机町装载文件。无论该class文件是在linux上进行编译的,还是在windows环境下编译的,无论虚拟机是在何种平台下实现和运行的,class文件使得Java虚拟机可以正确的读取、解释所有的class文件。在分析和研究class文件之前,先提出有一些问题:1.类/接口(class文件也可能定义的是接口,所以还是不要理解为类文件为好)内有哪些内容?2.以上内容分别

2、保存在class文件的什么地方?3.这些内容在加载过程屮又如何被读取和解析?4.这些内容加载后乂会被解析成为什么样的数据结构保存在虚拟机中?5.这些数据结构在虚拟机的运行过程•11又是如何被使用的?扩展问题:6.如何防止class文件被劫持?7.如何防止class文件被反编译?class文件的组织结构定义如下:ClassFile{magicminor_versionmajorversionconstantpoolcountconstant_poolacccss_flagsthis_classsupercl

3、assinterfacecountinterfacesficlds_countfieldsu4,u2,u2,u2,cp_info*constant_pool_count,u2,u2,u2,u2,u2*interface_count,u2,fieldinfo*fieldscount,methods_countmethodsattributes_countattributesu2,methodinfo*methods_count,u2,attributes_info*attributes_count以如下程序

4、为例,对生成的class文件进行分析://Testinterface,javapublicinterfaceTestinterface{???publicvoidinterface_method();//TestClass.javapublicclassTestClassimplementsTestinterface{???privateintprivate_global二3;???publicintpublic_global;???privatestaticfinalintsfi=127;???publ

5、icstaticfinalStringsfs="teststrings";???privateStringBuiIdersb;999•••???publicvoidmethodi(){???????privatc_global=public_global*2;???????sb.append(private_global);???}999•••???publicvoidmethod_2(intpub){???????public_global=pub;???}???publicvoidmethod_2(i

6、ntpub,booleanflag){???????inttmp=5;???????public_global=pub*2+tmp;???}999•••???©Override???publicvoidinterface_method(){???????mcthod_l();???}999•••}1.magic(魔数)值为0xcafebabe,没有特别的意义,放在文件头并选取用來标记改文件是一个class文件。■QI??:CAFEBABE000000320035070002010009;

7、2.minor_

8、version/major_version(次版本号和主版本号)00000000h:CAFEBABE0000003200弓5070002010009;次版本号和主版本号分别为0X0000和0X0032(50),即主版本号位50,次版本号为03.constant_pool_count/constant_pool(常量池数量和常量池)常量池保存了文件中类或接口相关的一切常量,字面常量(直接量),如文字字符串、final变量值,以及符号引用,如类或接口的全限定名、方法或字段的简单名称和描述符。其屮,全限定名用以

9、在当前命名空间内唯一标志类或接口,在java语言屮如java.lang.Object,在class文件中,会将'•’用'/'取代,即表示为java/lang/Objcct简单名称就是简单的方法名或变量名的字符吊,如java.lang.Object的成员方法wait()的简单名称为”wait”。而只有简单名称是无法唯一确定调用的方法是哪一个,由于Java语言的特性,方法可能被重写或重载,所以还需要根据方法的返回值、参数数量、类型

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。