zoukankan      html  css  js  c++  java
  • java修改class文件

    最近因为工作需要修改class文件中一个变量的值,特此记录

    1、首先使用bytecode viewer打开class文件(下载地址:链接:https://pan.baidu.com/s/1fo6SWTfoNZ5usEQU_R4JmA    提取码:zecz)

     2、找到要修改的变量所在的地址

     3、创建一个java工程、并且将jclasslib.jar导入、执行以下代码即可

     1 package cc.cc.c;
     2  
     3 import java.io.*;
     4 import org.gjt.jclasslib.io.ClassFileWriter;
     5 import org.gjt.jclasslib.structures.CPInfo;
     6 import org.gjt.jclasslib.structures.ClassFile;
     7 import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
     8  
     9 public class Main {
    10     public static void main(String[] args) throws Exception {
    11  
    12         String filePath = "C:\Main.class";
    13         FileInputStream fis = new FileInputStream(filePath);
    14         DataInput di = new DataInputStream(fis);
    15         ClassFile cf = new ClassFile();
    16         cf.read(di);
    17         CPInfo[] infos = cf.getConstantPool();
    18  
    19         int count = infos.length;
    20         for (int i = 0; i < count; i++) {
    21             if (infos[i] != null) {
    22                 System.out.print(i);
    23                 System.out.print(" = ");
    24                 System.out.print(infos[i].getVerbose());
    25                 System.out.print(" = ");
    26                 System.out.println(infos[i].getTagVerbose());
    27                 if (i == 21) {//刚刚找到的是21位置
    28                     ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i]; //刚刚那里是CONSTANT_Utf-8_info所以这里要用这个
    29                     uInfo.setBytes("baidu".getBytes());
    30                     infos[i] = uInfo;
    31                 }
    32             }
    33         }
    34         //这种方式也可以,一样的
    35 /*        if(infos[count] != null) {
    36             ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i]; //刚刚那里是CONSTANT_Utf-8_info所以这里要用这个
    37             uInfo.setBytes("baidu".getBytes());
    38             infos[count] = uInfo;
    39         }*/
    40         
    41         cf.setConstantPool(infos);
    42         fis.close();
    43         File f = new File(filePath);
    44         ClassFileWriter.writeToFile(f, cf);
    45     }
    46 }

     本修改方式参考了https://blog.csdn.net/betterandroid/article/details/14520667

  • 相关阅读:
    城市的划入划出效果
    文本溢出省略解决笔记css
    长串英文数字强制折行解决办法css
    Poj 2352 Star
    树状数组(Binary Indexed Trees,二分索引树)
    二叉树的层次遍历
    Uva 107 The Cat in the Hat
    Uva 10336 Rank the Languages
    Uva 536 Tree Recovery
    Uva10701 Pre, in and post
  • 原文地址:https://www.cnblogs.com/markleilei/p/13666306.html
Copyright © 2011-2022 走看看