利用jclasslib修改java编译后的.class文件

来源:互联网 发布:matlab高维数据可视化 编辑:程序博客网 时间:2024/04/28 23:22

在Eclipse中新建一个test类,通过IO流来修改class中的值

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. import java.io.*;  
  2.   
  3. import org.gjt.jclasslib.io.ClassFileWriter;  
  4. import org.gjt.jclasslib.structures.CPInfo;  
  5. import org.gjt.jclasslib.structures.ClassFile;  
  6. import org.gjt.jclasslib.structures.constants.ConstantDoubleInfo;  
  7. import org.gjt.jclasslib.structures.constants.ConstantIntegerInfo;  
  8. import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;  
  9.   
  10. public class Test {  
  11.     public static void main(String[] args) throws Exception {  
  12.   
  13.         String filePath = "E:\\download\\ExpService.class";  
  14.         FileInputStream fis = new FileInputStream(filePath);  
  15.   
  16.         DataInput di = new DataInputStream(fis);  
  17.         ClassFile cf = new ClassFile();  
  18.         cf.read(di);  
  19.           
  20.         CPInfo[] infos = cf.getConstantPool();  
  21.   
  22.         int count = infos.length;  
  23.         System.out.println(count);  
  24.           
  25.         for (int i = 0; i < count; i++) {  
  26.             if (infos[i] != null) {  
  27.                 System.out.print(i);  
  28.                 System.out.print(" = ");  
  29.                 System.out.print(infos[i].getVerbose());  
  30.                 System.out.print(" = ");  
  31.                 System.out.println(infos[i].getTagVerbose());  
  32.                 if (i == 10) {  
  33.                     //ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i];  
  34.                     //uInfo.setBytes("400".getBytes());               
  35.                     ConstantIntegerInfo uInfo=(ConstantIntegerInfo) infos[i];  
  36.                     uInfo.setInt(400);;  
  37.                     infos[i] = uInfo;  
  38.                 }  
  39.             }  
  40.         }  
  41.           
  42.         cf.setConstantPool(infos);  
  43.         fis.close();  
  44.         File f = new File(filePath);  
  45.         ClassFileWriter.writeToFile(f, cf);  
  46.     }  
  47. }  

所需工具下载地址:
1.java反编译查看器:

gd-gui

2.Java字节码查看器:

jclasslib


最后再来一个强大的可以直接在里面修改class文件中的值,比jclasslib好用。

jbe

0 0