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

 更新时间:2021年02月26日 14:46:14   作者:还你二月花  
这篇文章主要介绍了IDEA利用jclasslib 修改class文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

idea安装jclasslib-bytecode-viewer插件

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

在这里插入图片描述

准备好class文件

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

使用jclasslib

view–>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>


到此这篇关于IDEA利用jclasslib 修改class文件的实现的文章就介绍到这了,更多相关IDEA jclasslib 修改class内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中generic实例详解

    java中generic实例详解

    这篇文章主要介绍了java中generic实例详解,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 关于jd-gui启动报This program requires Java 1.8+的错误问题及解决方法

    关于jd-gui启动报This program requires Java 1.8+的错误问题及解决方法

    最近,在Mac使用上JD-GUI启动时总是报错,接下来通过本文给大家介绍关于jd-gui启动报this program requires Java 1.8+的错误问题及解决方法,需要的朋友可以参考下
    2022-05-05
  • J2SE基础之下载eclipse并创建项目

    J2SE基础之下载eclipse并创建项目

    本文给大家介绍的是最流行的java 集成开发环境IDE eclipse的使用方法,非常的简单,有需要的小伙伴可以参考下
    2016-05-05
  • MyBatis-Plus Sequence主键的实现

    MyBatis-Plus Sequence主键的实现

    这篇文章主要介绍了MyBatis-Plus Sequence主键的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 反对使用Spring封装的多线程类原因

    反对使用Spring封装的多线程类原因

    这篇文章主要介绍了反对使用Spring封装的多线程类原因,文章围绕主题展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Java IO异常如何处理详析

    Java IO异常如何处理详析

    异常就是Java程序在运行过程中出现的错误,下面这篇文章主要给大家介绍了关于Java IO异常如何处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • 百度Java面试题 前200页精选(中)

    百度Java面试题 前200页精选(中)

    这篇文章主要为大家分享了Java面试资源中篇,百度“Java面试题”前200页都在这里了,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • SpringBoot项目在IntelliJ IDEA中如何实现热部署

    SpringBoot项目在IntelliJ IDEA中如何实现热部署

    spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。,这篇文章主要介绍了SpringBoot项目在IntelliJ IDEA中如何实现热部署,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • RocketMQ producer同步发送单向发送源码解析

    RocketMQ producer同步发送单向发送源码解析

    这篇文章主要为大家介绍了RocketMQ producer同步发送单向发送源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • java中如何对Map的key顺序排序

    java中如何对Map的key顺序排序

    大家都知道Map排序的方式有很多种,下面这篇文章主要给大家介绍了关于java中如何对Map的key顺序排序的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11

最新评论