Java如何修改.class文件变量
最近遇到了一个问题,一份很老的代码要修改里面的变量,源码早就和开发者一起不知去向,其中引用了一些jar包导致无法直接编译,只能直接修改.class文件
idea安装jclasslib-bytecode-viewer插件
标准方式安装插件
准备要修改的.class文件
这里我们写一个简单的java方法
/**
*@Description:
*@author:wei.wang
*@since:2020/9/511:18
*@history:1.2020/9/5createdbywei.wang
*/
publicclassHelloWorld{
publicstaticvoidmain(String[]args){
Stringword="HelloWorld";
System.out.println(word);
}
}
查找要修改的变量
打开要修改的.class文件,点击view->ShowBytecodeWithJclasslib,在ConstantsPool中使用Textfilter功能找到要修改的内容,我们发现有一个String类型常量,指向23,点击23就能看到要修改的内容
修改.class文件中的变量
23是要修改的内容
/**
*@Description:
*@author:wei.wang
*@since:2020/9/419:42
*@history:1.2020/9/4createdbywei.wang
*/
importjava.io.*;
importorg.gjt.jclasslib.io.ClassFileWriter;
importorg.gjt.jclasslib.structures.CPInfo;
importorg.gjt.jclasslib.structures.ClassFile;
importorg.gjt.jclasslib.structures.constants.ConstantUtf8Info;
publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
StringfilePath="F:\\GitCode\\zero\\test111\\target\\classes\\HelloWorld.class";
FileInputStreamfis=newFileInputStream(filePath);
DataInputdi=newDataInputStream(fis);
ClassFilecf=newClassFile();
cf.read(di);
CPInfo[]infos=cf.getConstantPool();
intcount=infos.length;
System.out.println(count);
for(inti=0;i
执行结果
可以看到已经修改完成
publicclassHelloWorld{
publicHelloWorld(){
}
publicstaticvoidmain(String[]args){
Stringword="HelloWorldHELLOWORLD";
System.out.println(word);
}
}
以上就是Java如何修改.class文件变量的详细内容,更多关于Java修改文件变量的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。