java class 文件修改,java修改class文件

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

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

ec2a501b8c393f48160b840ee49169ee.png

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

440776c555d8c76d6d5a535aa0af591d.png

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 }

标签:java,jclasslib,uInfo,System,修改,import,infos,class,out

来源: https://www.cnblogs.com/markleilei/p/13666306.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值