工程供应商App开发如何提升项目管理效率与透明度
751
2023-02-09
IDEA利用jclasslib 修改class文件的实现
idea安装jclasslib-bytecode-viewer插件
file–>settings–>plugis ,搜索安装jclasslib-bytecode-viewer,重启idea。
准备好class文件
把要修改的class文件用idea打开。
使用jclasslib
view–>showhttp:// bytecode with jclasslib.
常量池,使用过滤器过滤文本。WygVYs找到对应的指向数字。
使用下列代码更改内容。
package com.yys.screendisplay.controller;
import java.io.*;
import com.sun.org.apache.bcel.internal.classfile.ConstantString;
import org.gjt.jclasslib.io.ClassFileWriter;
import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.Constant;
import org.gjt.jclasslib.structures.constants.ConstantDoubleInfo;
import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
import org.gjt.jclasslib.structures.constants.ConstantStringInfo;
public class Test {
public static void main(String[] args) throws Exception {
String filePath = "C:\\Users\\HMS\\Desktop\\AppService.class";
FileInputStream fis = new FileInputStream(filePath);
DataInput di = new DataInputStream(fis);
ClassFile cf = new ClassFile();
cf.read(di);
Constant[] infos = cf.getConstantPool();
int count = infos.length;
for (int i = 0; i < count; i++) {
if (infos[i] != null) {
if(i==1813){
System.out.print(i);
System.out.print(" = ");
System.out.print(infos[i].getVerbose());
System.out.print(" = ");
System.out.println(infos[i]);
System.out.println(infos[i].getClass().getSimpleName());
ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i];//根据对应的类型转换
uInfo.setString("");
infos[i]=uInfo;
}
}
}
cf.setConstantPool(infos);
fis.close();
File f = new File(filePath);
ClassFileWriter.writeToFile(f, cf);
}
}
其他
对应的jar包可以在idea安装的插件里面找。
报java.lang.ClassNotFoundException: kotlin.jvm.internal.Reflection,加上
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~