java修改class文件


最近因為工作需要修改class文件中一個變量的值,特此記錄

 

1、首先使用bytecode viewer打開class文件(下載地址:鏈接:https://pan.baidu.com/s/1fo6SWTfoNZ5usEQU_R4JmA    提取碼:zecz)

 

 

 2、找到要修改的變量所在的地址

 

 

 3、創建一個java工程、並且將jclasslib.jar導入、執行以下代碼即可

 

 1 package cc.cc.c;
 2  
 3 import java.io.*;
 4 import org.gjt.jclasslib.io.ClassFileWriter;
 5 import org.gjt.jclasslib.structures.CPInfo;
 6 import org.gjt.jclasslib.structures.ClassFile;
 7 import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
 8  
 9 public class Main {
10     public static void main(String[] args) throws Exception {
11  
12         String filePath = "C:\\Main.class";
13         FileInputStream fis = new FileInputStream(filePath);
14         DataInput di = new DataInputStream(fis);
15         ClassFile cf = new ClassFile();
16         cf.read(di);
17         CPInfo[] infos = cf.getConstantPool();
18  
19         int count = infos.length;
20         for (int i = 0; i < count; i++) {
21             if (infos[i] != null) {
22                 System.out.print(i);
23                 System.out.print(" = ");
24                 System.out.print(infos[i].getVerbose());
25                 System.out.print(" = ");
26                 System.out.println(infos[i].getTagVerbose());
27                 if (i == 21) {//剛剛找到的是21位置
28                     ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i]; //剛剛那里是CONSTANT_Utf-8_info所以這里要用這個
29                     uInfo.setBytes("baidu".getBytes());
30                     infos[i] = uInfo;
31                 }
32             }
33         }
34         //這種方式也可以,一樣的
35 /*        if(infos[count] != null) {
36             ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i]; //剛剛那里是CONSTANT_Utf-8_info所以這里要用這個
37             uInfo.setBytes("baidu".getBytes());
38             infos[count] = uInfo;
39         }*/
40         
41         cf.setConstantPool(infos);
42         fis.close();
43         File f = new File(filePath);
44         ClassFileWriter.writeToFile(f, cf);
45     }
46 }

 

 本修改方式參考了https://blog.csdn.net/betterandroid/article/details/14520667


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM