这个类用于修改java中class字节码中的常量池。需要jclasslib.jar
可以使用jd-gui和字节码查看器确定要修改的内容
http://www.ej-technologies.com/download/jclasslib/files.html
参考
http://wenku.baidu.com/view/2aeb2abec77da26925c5b02b.html
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import org.gjt.jclasslib.io.ClassFileWriter;
import org.gjt.jclasslib.structures.CPInfo;
import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
public class Test {
public static void main(String[] args) throws Exception {
String filePath="d:/myFolder/com/example/test.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;
for(int i =0;i<count;i++){
if(infos[i]!=null){
System.out.println(i+" = "+infos[i].getVerbose()+" = "+infos[i].getTagVerbose());
if(i == 1){
ConstantUtf8Info uInfo=(ConstantUtf8Info)infos[i];
uInfo.setString(" oh my lady gaga ");
}
}
}
cf.setConstantPool(infos);
fis.close();
File f=new File(filePath+"c");
ClassFileWriter.writeToFile(f, cf);
}
}