JBE
JBE(Java Bytecode Editor)是一個Java位元組碼編輯工具,而且是開源的,該項目是基于jclasslib ej-technologies(https://github.com/ingokegel/jclasslib)位元組碼檢視工具和Apache Jakarta項目。
下載下傳完成後解壓即可使用

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