在Eclipse中新建一个test类,通过IO流来修改class中的值
- import java.io.*;
- import org.gjt.jclasslib.io.ClassFileWriter;
- import org.gjt.jclasslib.structures.CPInfo;
- import org.gjt.jclasslib.structures.ClassFile;
- import org.gjt.jclasslib.structures.constants.ConstantDoubleInfo;
- import org.gjt.jclasslib.structures.constants.ConstantIntegerInfo;
- import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
- public class Test {
- public static void main(String[] args) throws Exception {
- String filePath = "E:\\download\\ExpService.class";
- FileInputStream fis = new FileInputStream(filePath);
- DataInput di = new DataInputStream(fis);
- ClassFile cf = new ClassFile();
- cf.read(di);
- CPInfo[] infos = cf.getConstantPool();
- int count = infos.length;
- System.out.println(count);
- for (int i = 0; i < count; i++) {
- if (infos[i] != null) {
- System.out.print(i);
- System.out.print(" = ");
- System.out.print(infos[i].getVerbose());
- System.out.print(" = ");
- System.out.println(infos[i].getTagVerbose());
- if (i == 10) {
- //ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i];
- //uInfo.setBytes("400".getBytes());
- ConstantIntegerInfo uInfo=(ConstantIntegerInfo) infos[i];
- uInfo.setInt(400);;
- infos[i] = uInfo;
- }
- }
- }
- cf.setConstantPool(infos);
- fis.close();
- File f = new File(filePath);
- ClassFileWriter.writeToFile(f, cf);
- }
- }
所需工具下载地址:
1.java反编译查看器:
2.Java字节码查看器:
最后再来一个强大的可以直接在里面修改class文件中的值,比jclasslib好用。