使用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就好了。
相关文章推荐
- 使用ASM反编译Java bytecode得到其汇编码全部类
- 使用AndBug调试Android Java Bytecode
- android 安全讲座第二层 使用AndBug调试Android Java Bytecode
- 使用AndBug调试Android Java Bytecode
- Android应用逆向工程之java bytecode修改实例
- 使用AndBug调试Android Java Bytecode
- Java字节码(Java bytecode)
- java字节码理解——Java bytecode:翻译和解读
- 使用AndBug调试Android Java Bytecode
- java中this关键字的使用(code)
- EDITOR-CALL语句的使用:修改abap内表的内容
- 从头认识java-16.4 nio的读与写(ByteBuffer的使用)
- 使用ASM实现AOP(2) -- 玩转 ASM-Bytecode
- 关于java web项目使用log4j / 当装了两个tomcat后,如何修改tomcat端口
- ICSharpCode.TextEditor使用及扩展
- Error:Error converting bytecode to dex: Cause: java.lang.RuntimeException: Exception parsing classes
- 关于VS Code使用code runner编译运行java出现报错乱码的问题
- java----基本数据类型精度的研究与使用(char,byte,int等)
- 在使用Java的Properties时,修改数值后会发生顺序的改变
- Java使用dom4j读取xml时报错:org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence