欢迎来到天天文库
浏览记录
ID:8891306
大小:40.50 KB
页数:8页
时间:2018-04-10
《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
此文档下载收益归作者所有