使用JBE(Java Bytecode Editor)修改Java位元組碼
阿新 • • 發佈:2019-02-20
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就好了。