java程序来解析class文件实现反编译

java程序来解析class文件实现反编译

ID:8891306

大小:40.50 KB

页数:8页

时间:2018-04-10

java程序来解析class文件实现反编译_第1页
java程序来解析class文件实现反编译_第2页
java程序来解析class文件实现反编译_第3页
java程序来解析class文件实现反编译_第4页
java程序来解析class文件实现反编译_第5页
资源描述:

《java程序来解析class文件实现反编译》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、[B01][java程序解析class文件]Type:[B01][Solution]Submit:[abc@163.com][2012.11.06][V1.00]From:http://blog.163.com/jtf975/blog/static/18135128720112612517429/我们都知道,Java编译器负责将.java文件编译成.class文件,class文件存储的是java字节码,与.java文件无关(只要你愿意写一个编译器,也可以将别的语言写的源代码编译成.class文件),本文预备具体解剖class

2、文件的内部结构,并且把class文件结构读取并显示出来。  Class文件的格式由JVM规范规定,一共有以下部分:  1.magicnumber,必须是0xCAFEBABE,用于快速识别是否是一个class文件。  2.version,包括major和minor,假如版本号超过了JVM的识别范围,JVM将拒尽执行。  3.constantpool,常量池,存放所有用到的常量。  4.accessflag,定义类的访问权限。  5.thisclass和superclass,指示如何找到thisclass和superclass。

3、  6.inte***ces,存放所有inte***ces。  7.fields,存放所有fields。  8.methods,存放所有methods。  9.attributes,存放所有attributes。  先写一个Test.java:  packageexample.test;  publicfinalclassTestClass{  publicintid=;  publicvoidtest(){}}然后编译,放在C:DocumentsandSettingsAdministrator桌面解析class文件

4、TestClass.java。  我们用Java来读取和分析class,ClassAnalyzer的功能便是读取Test.class,分析结构,然后显示出来,DOS下显示的内容比较少,我们通过StringBuffer最后输出到txt文件,实现由文件到文件的转变:packageorg.edeye.common.util;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.DataInputStream;impor

5、tjava.io.DataOutputStream;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;publicclassClassAnalyzer{publicstaticStringBuffersb=newStringBuffer();publicstaticbyte[]analyzeConstant_tag;publicstaticString[]analyzeConstant_utf8;pub

6、licstaticDataOutputStreamdataout;publicstaticStringdesk="C:\Users\k\Desktop\";publicstaticStringmyClass=desk+"test1.class";publicstaticStringmyClassTmp=myClass+".tmp";publicstaticvoidmain(String[]args){DataInputStreaminput=null;try{FileOutputStreamout=newFileOu

7、tputStream(myClassTmp);BufferedOutputStreambuffout=newBufferedOutputStream(out);dataout=newDataOutputStream(buffout);input=newDataInputStream(newBufferedInputStream(newFileInputStream(myClass)));//获取文件大小FileSize(newDataInputStream(newBufferedInputStream(newFileInpu

8、tStream(myClass))));//解析数据analyze(input);}catch(Exceptione){System.out.println("解析失败!");}finally{try{input.close();dataout.close();}catch(Excepti

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

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

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