欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

IDEA利用jclasslib 修改class文件的实现

时间:2023-03-09 12:09:22|栏目:JAVA代码|点击:

idea安装jclasslib-bytecode-viewer插件

file?C>settings?C>plugis ,搜索安装jclasslib-bytecode-viewer,重启idea。

在这里插入图片描述

准备好class文件

把要修改的class文件用idea打开。

使用jclasslib

view?C>show bytecode with jclasslib.
常量池,使用过滤器过滤文本。找到对应的指向数字。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

使用下列代码更改内容。

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安装的插件里面找。

默认在c盘的用户下

报java.lang.ClassNotFoundException: kotlin.jvm.internal.Reflection,加上

<dependency>
 <groupId>com.fasterxml.jackson.module</groupId>
  <artifactId>jackson-module-kotlin</artifactId>
 <version>2.9.4.1</version>
</dependency>


上一篇:解析rainbond以应用为中心的架构设计原理

栏    目:JAVA代码

下一篇:GraalVM native-image编译后quarkus的超音速启动

本文标题:IDEA利用jclasslib 修改class文件的实现

本文地址:http://www.codeinn.net/misctech/227119.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有