您的位置:首页 > 编程语言 > Java开发

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

2016-11-08 17:37 405 查看


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就好了。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  aspose