使用JBE(Java Bytecode Editor)修改Java字节码




JBE

JBE(Java Bytecode Editor)是一个Java字节码编辑工具,而且是开源的,该项目是基于jclasslib ej-technologies(
https://github.com/ingokegel/jclasslib)字节码查看工具和Apache Jakarta项目。JBE下载地址:
http://set.ee/jbe/


下载完成后解压即可使用 




点击jbe. bat(Windows)或jbe.sh(Linux)即可运行JBE。src目录下的是JBE的源码。

使用示例

测试环境说明 

Java环境:jdk1.8 

使用工具:IDEA、JBE

1.新建一个Test源码如下:

public class Test {

    public void a(){
        System.out.println("run Test a function");
    }

    public static void main(String[] args) {
        new Test().a();
    }

}


2.按Ctrl+Shift+F9编译Test.java,IDEA会把.class文件生成在out目录下 



3.用JBE打开(File——Open class file)Test.class 



在左边可以看到该类的常量池(Constant Pool)、字段(Fields)、方法(Method)等信息。点击XXX方法,选择[0] Code查看该方法的字节码。在右边可以看到方法的字节码,点击Code Editor可编辑字节码.

4.修改方法字节码(字节码看不懂?不会写怎么办?这里分享个方法,我们可以通过IDEA、Eclipse编写java源码,编译成.class,通过JBE打开就可以得到想要的字节码了,再把字节码拷贝、粘贴到要修改的地方就好了)。

比如:我这里要把new Test().a();字节码改成Test2.a()。

Test2.java源码:

public class Test2 {

    public static void a(){
        System.out.println("run Test2 a function");
    }
}


(1)首先我新建一个Demo类,并编写了我想要的源码并编译。 



(2)这里用的是IDEA,.class就在out目录下。通过JBE打开out目录下的Demo.class 




红框中的就是我想要的字节码

(3)然后把得到的字节码拷贝替换掉new Test().a();的字节码。最后点Save method保存修改的字节码。 

new Test().a();的字节码: 




修改后: 



5.最后,测试是否修改成功,打开命令行工具,执行java Test,输出如果是”run Test2 a function”,而不是”run Test a function”就成功了。 



如果是修改jar文件中的.class文件。因为jar其实也是个zip文件,所以把修改后的.class替换掉原来jar中的.class,然后重新压缩并修改后缀为jar就好了。


  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郡麟天下

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值