欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種向目標進程內注入Java字節(jié)碼的方法及裝置的制造方法

文檔序號:8339505閱讀:529來源:國知局
一種向目標進程內注入Java字節(jié)碼的方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及計算機進程注入技術,尤其涉及一種向目標進程內注入Java字節(jié)碼的方法。
【背景技術】
[0002]計算機編程中的注入技術是指將一個二進制文件,比如Iinux上的so文件和windows上的dll文件,注入到目標進程中,以實現(xiàn)對目標進程功能的擴展。另一方面,隨著計算機技術的發(fā)展,虛擬機技術得到了廣泛的應用。然而對于那些需要依賴于虛擬機運行的字節(jié)碼,就很難采用上述的方法注入到目標進程中。

【發(fā)明內容】

[0003]有鑒于此,有必要提供一種向目標進程內注入Java字節(jié)碼的方法及裝置,其能將Java字節(jié)碼注入到目標進程當中。
[0004]一種向目標進程內注入Java字節(jié)碼的方法,所述目標進程運行在一個宿主操作系統(tǒng)上,所述宿主操作系統(tǒng)上還運行有虛擬機,所述方法包括:
[0005]通過所述宿主操作系統(tǒng)提供的系統(tǒng)調用修改所述目標進程的寄存器以加載一個二進制共享庫,所述二進制共享庫內包括隨加載被自動啟動的函數(shù);以及
[0006]通過所述二進制共享庫內自動啟動的函數(shù)將指定路徑的包含Java字節(jié)碼的文件加載到所述虛擬機中,并調用所述Java字節(jié)碼內的入口函數(shù)。
[0007]—種向目標進程內注入Java字節(jié)碼的裝置,所述目標進程運行在一個宿主操作系統(tǒng)上,所述宿主操作系統(tǒng)上還運行有虛擬機,所述裝置包括:
[0008]本地注入模塊,用于通過所述宿主操作系統(tǒng)提供的系統(tǒng)調用修改所述目標進程的寄存器以加載一個~■進制共孕庫;以及
[0009]Java字節(jié)碼加載模塊,其隨所述二進制共享庫加載而被調用,用于將指定路徑的包含Java字節(jié)碼的文件加載到所述虛擬機中,并調用所述Java字節(jié)碼內的入口函數(shù)。
[0010]根據(jù)上述的方法及裝置,可以實現(xiàn)向目標進程內注入依賴于虛擬機以及運行在虛擬機上的類庫的Java字節(jié)碼,提升了目標進程的功能。
[0011]為讓本發(fā)明的上述和其他目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附圖式,作詳細說明如下。
【附圖說明】
[0012]圖1為一個運行有虛擬機的計算機的結構框圖。
[0013]圖2為第一實施例提供的向目標進程內注入Java字節(jié)碼的方法流程圖。
[0014]圖3為安卓設備的結構框圖。
[0015]圖4為第二實施例提供的向目標進程內注入Java字節(jié)碼的方法流程圖。
[0016]圖5為第三實施例提供的向目標進程內注入Java字節(jié)碼的裝置結構框圖。
[0017]圖6為第四實施例提供的向目標進程內注入Java字節(jié)碼的裝置結構框圖。
【具體實施方式】
[0018]為更進一步闡述本發(fā)明為實現(xiàn)預定發(fā)明目的所采取的技術手段及功效,以下結合附圖及較佳實施例,對依據(jù)本發(fā)明的【具體實施方式】、結構、特征及其功效,詳細說明如后。
[0019]圖1為一個運行有虛擬機的計算機的結構框圖??梢岳斫?,此處的計算機包括個人電腦、服務器、智能手機、平板電腦等各種具有存儲器、處理器架構的計算設置。如圖1所示,計算機100包括:存儲器102、處理器104以及其他硬件106??梢岳斫?,圖1所示的結構僅為示意,其并不對計算機100的結構造成限定。例如,計算機100還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。
[0020]存儲器102可用于存儲軟件程序以及模塊,處理器104通過運行存儲在存儲器102內的軟件程序以及模塊,從而執(zhí)行各種功能應用以及數(shù)據(jù)處理。存儲器102可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器102可進一步包括相對于處理器104遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至漏洞檢測服務器100。上述網絡的實例包括但不限于互聯(lián)網、企業(yè)內部網、局域網、移動通信網及其組合。
[0021]其他硬件106例如可包括顯示器、鍵盤、網卡、音頻電路等等,其一般用于提供輸入/輸出或者與其他設備交換數(shù)據(jù)的功能。
[0022]上述的軟件程序以及模塊例如可包括:操作系統(tǒng)內核122、JVMl24, Java類庫126以及Java應用程序128。操作系統(tǒng)內核122直接控制各種硬件,其具體的,例如為可為Windows操內容或者Linux內核。JVM124運行在系統(tǒng)內核122上,其實質上是一個虛構出來的計算機,通過在操作系統(tǒng)內核122上仿真模擬各種計算機功能來實現(xiàn)的。JVM124 —般包括一套字節(jié)碼指令集、一組寄存器、一個棧、一個垃圾回收堆和一個存儲方法域。JVMl24屏蔽了與具體操作系統(tǒng)平臺相關的信息,使Java程序只需生成在Java虛擬機上運行的目標代碼(字節(jié)碼),就可以在多種平臺上不加修改地運行。JVM124在執(zhí)行字節(jié)碼時,實際上最終還是把字節(jié)碼解釋成具體平臺上的機器指令執(zhí)行。Java類庫126是為了編程方便而提供的公共類庫,Java類庫126內可提供各種接口,以提供不同的功能,這些接口可被應用程序層引用。Java應用程序128是基于Java類庫的各種接口實現(xiàn)的具有各種功能的應用程序。
[0023]進一步地,上述軟件程序以及模塊還可包括:本地二進制共享庫130以及Java本地接口(Java Native Interface, JNI) 132。本地二進制共享庫130例如可為Windows系統(tǒng)下的.dll文件以及Linux系統(tǒng)下的.so文件。JNI132用于在不同JVM實現(xiàn)間提供一個標準接口,從而使Java應用可以使用本地二進制共享庫130,擴充了原有JVM124的功能。
[0024]第一實施例
[0025]本實施例提供一種向目標進程內注入Java字節(jié)碼的方法,參閱圖2,上述的方法包括以下步驟:
[0026]步驟S101、通過宿主操作系統(tǒng)提供的系統(tǒng)調用修改所述目標進程的寄存器以加載一個二進制共享庫。
[0027]在計算機系統(tǒng)中,程序代碼運行的兩種模式,一種是用戶模式,一種是內核模式。應用層的應用程序運行在用戶模式下,而設備驅動程序和文件系統(tǒng)運行在內核模式。在用戶模式下運行的程序受到嚴格的管理,不會破壞系統(tǒng)級應用。而在內核模式下運行的程序可以對電腦有完全的訪問權。系統(tǒng)調用就是運行在內核模式下的代碼為運行在用戶模式下的代碼提供服務。
[0028]以Linux系統(tǒng)為例,其系統(tǒng)調用通過int80h實現(xiàn),用系統(tǒng)調用來區(qū)分入口函數(shù)。操作系統(tǒng)實現(xiàn)系統(tǒng)調用的基本過程是:應用程序調用庫函數(shù)(API) ;API將系統(tǒng)調用號存入EAX,然后通過中斷調用使系統(tǒng)進入內核態(tài);內核中的中斷處理函數(shù)根據(jù)系統(tǒng)調用號,調用對應的內核函數(shù)(系統(tǒng)調用);系統(tǒng)調用完成相應功能,將返回值存入EAX,返回到中斷處理函數(shù);中斷處理函數(shù)返回到API中;API將EAX返回給應用程序。
[0029]應用程序調用系統(tǒng)調用的過程是:把系統(tǒng)調用的編號存入EAX;把函數(shù)參數(shù)存入其它通用寄存器;觸發(fā)0x80號中斷(int0x80 )。
[0030]具體地,在Linux系統(tǒng)中,可以通過ptrace函數(shù)修改目標進程的寄存器,以調用dlopen函數(shù)。而dlopen函數(shù)是用來加載二進制共享庫的。在其他操作系統(tǒng)中,具體的命令可能會不一樣,但是其原理及過程是類似的。
[0031]所述的二進制共享庫例如可為圖1所示的二進制共享庫130,其內包括自動啟動的函數(shù)。在一個實例中,上述的自動啟動是通過全局變量來實現(xiàn)的。例如,在c/c++語言里,某個二進制共享庫(動態(tài)鏈接庫)被dlopen加載時,全局變量要被自動初始化,這時任意一個初始化時的函數(shù)調用都可以作為入口函數(shù),在這個入口函數(shù)就可以完成所有需要的事件。
[0032]步驟S102,所述二進制共享庫將指定路徑的包含Java字節(jié)碼的文件加載到虛擬機中,并調用所述Java字節(jié)碼內的入口函數(shù)。
[0033]如上所述,在二進制共享庫被加載后,其內自動啟動的函數(shù)被啟動,啟動后即執(zhí)行步驟S102,將指定路徑的包含Java字節(jié)碼的文件加載到虛擬機中,并可通過JNI132調用加載的Java字節(jié)碼內包含的入口函數(shù)。從而Java字節(jié)碼內的指令被執(zhí)行,這些Java字節(jié)碼內的指令可以使用Java類庫內的各種接口,從而實現(xiàn)基于Java類庫的各種功能,即執(zhí)行步驟 S103。
[0034]根據(jù)本實施例的方法,可以實現(xiàn)向目標進程內注入依賴于虛擬機以及運行在虛擬機上的類庫的Java字節(jié)碼,提升了目標進程的功能。
[0035]第二實施例
[0036]本實施例提供一種向目標進程內注入Java字節(jié)碼的方法,其與第一實施例的方法相似,其不同之處在于,本實施例的方法是應用于運行安卓(Android)操作系統(tǒng)的設備上。
[0037]參閱圖3,其為一個Android設備的架構示意圖。如圖3所示,Android設備200包括:存儲器102、處理器104以及其他硬件106,其與圖1所示相似,可一并參以上述描述。
[0038]圖3的存儲器102內的軟件程序以及模塊例如可包括:Linux內核222、Delvik虛擬機224、Android框架226以及Android應用程序228。Linux內核122直接控制各種硬件。Delvik 虛擬機(Delvik Virtual Machine,DVM) 224 運行在系統(tǒng)內核 222 上。JVMl24是一種堆棧機器,而DVM224則是寄存器機。
當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
宜春市| 右玉县| 新巴尔虎左旗| 什邡市| 兴义市| 丰顺县| 建平县| 安西县| 元江| 达尔| 文成县| 休宁县| 广东省| 马龙县| 田东县| 连江县| 浦县| 会昌县| 崇仁县| 太湖县| 木兰县| 桃园县| 溧阳市| 碌曲县| 正定县| 湘阴县| 中宁县| 德清县| 固阳县| 泰来县| 开原市| 哈密市| 高要市| 西昌市| 宝鸡市| 栾川县| 广西| 南安市| 绍兴县| 磐安县| 张家口市|