jclasslib 修改常量,修改import等比较容易。
但是修改方法,我自己没有找到有好用的api,可能是自己没有找到
使用javaasist 或者 asm 都可以修改方法。
相对比较简单。
jclasslib 简单的例子
public static void main(String[] args) throws Exception {
String root = System.getProperty("user.dir");
File sourceFile = new File(root,"WelcomeBean.class");
FileInputStream fis = new FileInputStream(sourceFile);
DataInput di = new DataInputStream(fis);
ClassFile cf = new ClassFile();
cf.read(di);
CPInfo[] infos = cf.getConstantPool();
FieldInfo[] fArr = cf.getFields();
MethodInfo[] mArr = cf.getMethods();
AttributeInfo[] aArr = cf.getAttributes();
String superClassName = cf.getSuperClassName();
String myClassName = cf.getThisClassName();
System.out.println("superClassName:" + superClassName);
System.out.println("myClassName:" + myClassName);
System.out.println("ConstantPool size:" + infos.length);
System.out.println("FieldInfo size:" + fArr.length);
System.out.println("AttributeInfo size:" + aArr.length);
System.out.println("MethodInfo size:" + mArr.length);
int count = infos.length;
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 == 59){
ConstantUtf8Info info = (ConstantUtf8Info)infos[i];
info.setString("444444444");
}
}
}
cf.setConstantPool(infos);
count = mArr.length;
for(int i=0;i<count;i++){
MethodInfo info = mArr[i];
String name = info.getName();
if(name.equals("isSuperMan")){
String msg = "return false;";
}
}
fis.close();
ClassFileWriter.writeToFile(sourceFile, cf);
}
修改字节码 jclasslib
原创
©著作权归作者所有:来自51CTO博客作者莫建坡的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:ruby 语法学习 教程
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
IDEA安装jclasslib查看字节码
安装jclasslib插件
java 侧边栏 -
字节码编辑器JClassLIb下载教程
下载地址:https://github.com/ingokegel/jclasslib/releases不同的系统下载不同的软件即可。
jclasslib github 系统下载 下载地址 -
jclasslib :java class字节码jvm指令分析
比如下载6.0.3注意:上述下载链接是针对Linux操作系统的,win系统请下载exe文件。
jvm linux 服务器 构造器 初始化方法 -
Android 修改字节码文件 asm字节码修改
asm是字节码增强技术,通过asm可以生成新的class文件,也可以动态的修改即将要装载入jvm的类信息。
Android 修改字节码文件 Java 字节码 类文件