IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 通过jclasslib修改class文件 -> 正文阅读

[开发工具]通过jclasslib修改class文件

问题描述:在开发中遇到使用第三方jar时想要修改里边某个class文件的情况
解决方法:
通过jclasslib直接修改class文件

安装jclasslib

可以通过下载jclasslib软件来安装(不推荐)
在IEDA插件中搜索安装jclasslib Bytecode Viewer(推荐)

查看修改源码的信息

将jar包内要修改的class文件拖到IDEA中
点击IDEA工具栏中:View => Show Bytecode With Jclasslib
jclasslib页面主要有Constant Pool、Interfaces、Fields、Methods、Attributes
在这里插入图片描述
在Methods下找到对应的方法,点击code再点击右侧的bytecode
在这里插入图片描述

点击#23 依次点击到最终位置,显示的是常量池第109个常量

通过代码修改class文件

package com.logan.functions.controller;
import java.io.*;

import org.gjt.jclasslib.io.ClassFileWriter;
import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.Constant;
import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;

public class Test {

    public static void main(String[] args) throws Exception {
        String filePath = "D:\\CaptchaUtil.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 == 109){
                    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("image/png");
                    infos[i] = uInfo;
                }
            }
        }
        cf.setConstantPool(infos);
        fis.close();
        File f = new File(filePath);
        ClassFileWriter.writeToFile(f, cf);
    }
}

执行代码是可能会缺少部分jar,缺少的jar包可以在IDEA安装插件的目录下找得到
一般路径为:C:\Users\用户名\.IntelliJIdea2019.1\config\plugins\jclasslib\lib

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-07-16 11:30:25  更:2021-07-16 11:31:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 13:26:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码