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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。