通過修改位元組修改方法體

來源:互聯網
上載者:User

標籤:des   style   blog   http   java   color   

先貼出樣本中的代碼:

public class Test{    public static void main(String[] args){    System.out.println("123");    System.out.println("345");    }        public void m1(){        System.out.println("m1");    }        public void m2(){        System.out.println("m2");    }}

Test2中先後調用了Test的m1,m2方法,此處通過修改位元組碼刪除對m1方法的調用。

public class Test2{    public static void main(String[] args){        System.out.println("test2");        Test t1 = new Test();        t1.m1();        t1.m2();        }}

 

1、找到相對應的方法調用的位元組碼指令,通過JclassLib或者在命令列通過javap -verbose Test2.class來查看。

此處為16行和17行的aload_1和invokespecial #7,點擊此處#7,可確定調用的方法為Test.m1(),如下所示:

此處控制台內容沒有全部顯示

 

貼出命令列中未截出的main函數中的方法調用位元組碼指令

 

2、通過虛擬機器位元組碼指令集去查詢對應的16進位位元組碼為:2B B6 00 07,此處00 07為B6(調用樣本方法)的參數,即為調用Test的m1方法。

3、在UE中選中後右鍵進行選中16進位插入/刪除,刪除對應的位元組碼。此處選擇刪除,要刪除的位元組數即為4

 

4、在刪除對應的位元組碼後,仍有3處需修改。

     4.1 此Code屬性對一個的attribute_length,在原值的基礎上減4

      4.2 修改此Code屬性對應的code_length,從19修改為15,同樣見。

      43 修改此Code屬性對應的LinerNumberTable中的對應的位元組碼行號,因位元組碼減少了,如不修改會報錯

如所示,將00 18和 00 14此兩次大於所刪除的位元組碼行號(此處為15和16)的兩處行號分別減4。儲存,OK!重新運行java Test2,如所示,上面異常是在沒有修改位元組碼行號記錄表時所報的異常。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.