亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種api的攔截方法、裝置及移動終端的制作方法

文檔序號:6373600閱讀:195來源:國知局
專利名稱:一種api的攔截方法、裝置及移動終端的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及移動終端領(lǐng)域,特別涉及ー種API (Application ProgrammingInterface,應(yīng)用程序編程接ロ)的攔截方法、裝置及移動終端。
背景技術(shù)
隨著Android(安卓)系統(tǒng)的快速發(fā)展,使用Android系統(tǒng)的終端越來越多,Android系統(tǒng)是ー個開放源代碼系統(tǒng),可以在使用Android系統(tǒng)終端內(nèi)安裝應(yīng)用,Android系統(tǒng)為該應(yīng)用提供運行環(huán)境。目前,廠商在生產(chǎn)使用Android系統(tǒng)的終端時,可以直接在終端內(nèi)內(nèi)置應(yīng)用,用戶·也可以根據(jù)自己的需要在終端內(nèi)安裝其他的應(yīng)用;這些應(yīng)用都是由相應(yīng)的廠商提供,且每個應(yīng)用在開發(fā)完成后,每個應(yīng)用的功能都固定下來了,不可以對應(yīng)用的功能進行擴展或進行修改。

發(fā)明內(nèi)容
為了能夠?qū)?yīng)用的功能進行擴展或修改,本發(fā)明提供了一種攔截函數(shù)的方法及裝置。所述技術(shù)方案如下一種應(yīng)用程序編程接ロ API的攔截方法,所述方法包括根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對所述API進程進行實時監(jiān)控;當API進程被啟動吋,根據(jù)API進程的進程標識從內(nèi)存中獲取所述API進程對應(yīng)的虛擬機實例;根據(jù)待攔截API的標識信息從所述API進程對應(yīng)的虛擬機實例中將所述待攔截的采用第一計算機語言編寫的第一 API的代碼指向地址替換為已存儲的采用第二計算機語言編寫的且與第一 API相對應(yīng)的第二 API的代碼指向地址,所述第二語言與第一代碼相區(qū)別;通過第二函數(shù)實現(xiàn)對API進程的控制。所述根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對所述API進程進行實時監(jiān)控,包括監(jiān)控系統(tǒng)對應(yīng)的虛擬機開始運行所述API進程的進程標識對應(yīng)的API進程時,則監(jiān)控出所述API進程被啟動。所述待攔截的API的標識信息至少包括所述待攔截的API所屬類的類標識和所述待攔截的API的函數(shù)標識。所述根據(jù)待攔截API的標識信息從所述API進程對應(yīng)的虛擬機實例中將所述待攔截的采用第一計算機語言編寫的第一 API的代碼指向地址替換為已存儲的采用第二計算機語言編寫的且與第一 API相對應(yīng)的第二 API的代碼指向地址,包括根據(jù)所述類標識,從所述API進程對應(yīng)的虛擬機實例中獲取所述待攔截的第一API所屬的類對應(yīng)的類結(jié)構(gòu)體;
根據(jù)所述待攔截的第一 API的函數(shù)標識,從所述類結(jié)構(gòu)體中獲取所述待攔截的第一 API對應(yīng)的函數(shù)結(jié)構(gòu)體;將所述函數(shù)結(jié)構(gòu)體中存儲的所述待攔截的第一 API的代碼指向地址替換為已存儲的第二 API的代碼指向地址。所述第二計算機語目為C語目或C++語目。一種應(yīng)用程序編程接ロ API的攔截裝置,所述裝置包括監(jiān)控模塊,用于根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對所述API進程進行實時監(jiān)控;獲取模塊,用于當API進程被啟動吋,根據(jù)API進程的進程標識從內(nèi)存中獲取所述API進程對應(yīng)的虛擬機實例;·攔截模塊,用于根據(jù)待攔截API的標識信息從所述API進程對應(yīng)的虛擬機實例中將所述待攔截的采用第一計算機語言編寫的第一 API的代碼指向地址替換為已存儲的采用第二計算機語言編寫的且與第一 API相對應(yīng)的第二 API的代碼指向地址,所述第二語言與第一代碼相區(qū)別;通過第二函數(shù)實現(xiàn)對API進程的控制。所述監(jiān)控模塊,具體用于監(jiān)控系統(tǒng)對應(yīng)的虛擬機開始運行所述API進程的進程標識對應(yīng)的API進程吋,則監(jiān)控出所述API進程被啟動。所述待攔截的API的標識信息至少包括所述待攔截的API所屬類的類標識和所述待攔截的API的函數(shù)標識。所述攔截模塊包括第一獲取單元,用于根據(jù)所述類標識,從所述API進程對應(yīng)的虛擬機實例中獲取所述待攔截的第一 API所屬的類對應(yīng)的類結(jié)構(gòu)體;第二獲取單元,用于根據(jù)所述待攔截的第一 API的函數(shù)標識,從所述類結(jié)構(gòu)體中獲取所述待攔截的第一 API對應(yīng)的函數(shù)結(jié)構(gòu)體;替換單元,用于將所述函數(shù)結(jié)構(gòu)體中存儲的所述待攔截的第一 API的代碼指向地址替換為已存儲的第二 API的代碼指向地址。一種移動終端,其特征在于,包括所述的裝置。在本發(fā)明實施例中,根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對API進程進行實時監(jiān)控;如果監(jiān)控出API進程被啟動,則根據(jù)API進程的進程標識從內(nèi)存中獲取API進程對應(yīng)的虛擬機實例;根據(jù)待攔截第一 API的標識信息從API進程對應(yīng)的虛擬機實例中將待攔截的函數(shù)的代碼指向地址替換為已存儲的第二 API對應(yīng)的代碼指向地址,實現(xiàn)攔截API。


圖I是本發(fā)明實施例I提供的ー種API的攔截方法流程圖;圖2是本發(fā)明實施例2提供的ー種API的攔截方法流程圖;圖3是本發(fā)明實施例3提供的第一種API的攔截裝置結(jié)構(gòu)示意圖;圖4是本發(fā)明實施例4提供的第二種API的攔截裝置結(jié)構(gòu)示意圖。
具體實施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進ー步地詳細描述。其中,在Android系統(tǒng)中運行的應(yīng)用包括一個或多個類,姆個類包括一個或多個API ;該應(yīng)用實現(xiàn)的功能可以分為多個步驟,每個步驟由ー個或多個API來實現(xiàn)。其中,An dr O i d系統(tǒng)中的應(yīng)用都在An dr O i d系統(tǒng)對應(yīng)的虛擬機中運行,當該應(yīng)用被啟動時,Android系統(tǒng)創(chuàng)建用于運行該應(yīng)用的進程,并在終端的內(nèi)存中為該進程構(gòu)建ー個虛擬機實例,該虛擬機實例為一個結(jié)構(gòu)體,使用該進程的進程標識來標識該虛擬機實例,該虛擬機實例中至少包括該應(yīng)用包括的每個類對應(yīng)的類結(jié)構(gòu)體,還可以包括該應(yīng)用包括的參數(shù)的類型和個數(shù),每個類對應(yīng)的類結(jié)構(gòu)體分別使用每個類的類標識進行標識,對于任一個類,該類對應(yīng)的類結(jié)構(gòu)體中至少包括該類包括的每個API對應(yīng)的函數(shù)結(jié)構(gòu)體,每個API對應(yīng)的函數(shù)結(jié)構(gòu)體分別用每個API的函數(shù)標識進行標識,對于任ー個API,該API對應(yīng)的函數(shù)結(jié)構(gòu)體內(nèi)至
少包括該API對應(yīng)的代碼指向地址,該代碼指向地址對應(yīng)ー個存儲空間,該存儲空間用于存儲實現(xiàn)該API的具體代碼,且該存儲空間為終端磁盤中的空間。其中,當該進程被啟動運行后并需要運行某API時,該進程根據(jù)該API所屬的類的類標識,從其對應(yīng)的虛擬機實例中獲取該類的對應(yīng)的類結(jié)構(gòu)體,根據(jù)該API的函數(shù)標識,從該類對應(yīng)的類結(jié)構(gòu)中獲取該API對應(yīng)的函數(shù)結(jié)構(gòu)體,從該函數(shù)結(jié)構(gòu)體中獲取該API對應(yīng)的代碼指向地址,根據(jù)該代碼指向地址調(diào)用實現(xiàn)該API的代碼,并運行實現(xiàn)該API的代碼,如此實現(xiàn)了運行該API。其中,該應(yīng)用實現(xiàn)的功能可以分為多個步驟,每個步驟由ー個或多個API來實現(xiàn),當需要對該應(yīng)用的功能進行修改或需要對該應(yīng)用的功能進行擴展時,可以通過對該應(yīng)用包括的某一個或某多個步驟進行修改,來實現(xiàn)對該應(yīng)用的功能進行修改或擴展;其中,這些步驟都是由相應(yīng)的API來實現(xiàn),對實現(xiàn)這些步驟的API進行修改,就可以實現(xiàn)對這些步驟進行修改,為了便于說明將實現(xiàn)這些步驟的API稱為待攔截的第一 API,第一 API為采用第一計算機語言編寫的Al,第一計算機語言可以為Java語言。其中,在本實施例中,技術(shù)人員可以事先開發(fā)出第二 API,第二 API可以實現(xiàn)修改后的步驟,然后通過本發(fā)明的方法來攔截用于運行該應(yīng)用的進程調(diào)用待攔截的第一 API,并使用于運行該應(yīng)用的進程來調(diào)用技術(shù)人員開發(fā)的第二 API,如此實現(xiàn)對該應(yīng)用的功能進行修改或?qū)υ搼?yīng)用的功能進行擴展;其中,第二 API為采用第二計算機語言編寫的API,第二計算機語目為C語目或C++語目等。其中,需要說明的是,運行在Android系統(tǒng)中的應(yīng)用包括的類可以為Java類,以及類包括的API可以Java API。實施例I如圖I所示,本發(fā)明實施例提供了一種攔截函數(shù)的方法,包括步驟101 :根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對API進程進行實時監(jiān)控;步驟102 :當API進程被啟動時,根據(jù)API進程的進程標識從內(nèi)存中獲取API進程對應(yīng)的虛擬機實例;步驟103 :根據(jù)待攔截API的標識信息從API進程對應(yīng)的虛擬機實例中將待攔截的采用第一計算機語言編寫的第一 API的代碼指向地址替換為已存儲的采用第二計算機語言編寫的且與第一 API相對應(yīng)的第二 API的代碼指向地址,第二語言與第一代碼相區(qū)別;通過第二函數(shù)實現(xiàn)對API進程的控制。在本發(fā)明實施例中,根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對API進程進行實時監(jiān)控;如果監(jiān)控出API進程被啟動,則根據(jù)API進程的進程標識從內(nèi)存中獲取API進程對應(yīng)的虛擬機實例;根據(jù)待攔截第一 API的標識信息從API進程對應(yīng)的虛擬機實例中將待攔截的函數(shù)的代碼指向地址替換為已存儲的第二 API對應(yīng)的代碼指向地址,實現(xiàn)攔截API。實施例2本發(fā)明實施例提供了一種攔截函數(shù)的方法?!て渲校繕藨?yīng)用為需要進行功能擴展或需要進行功能修改的應(yīng)用,可以通過對目標應(yīng)用包括的某一個或某多個步驟進行修改來實現(xiàn)對目標應(yīng)用的功能進行擴展或?qū)δ繕藨?yīng)用的功能進行修改;其中,用于實現(xiàn)這些步驟的API為待攔截的第一 API ;且技術(shù)人員事先開發(fā)出第二 API,第二 API用于實現(xiàn)修改后的步驟,通過本實施例提供的方法對用于運行目標應(yīng)用的API進程調(diào)用的待攔截的函數(shù)進行攔截,使API進程調(diào)用技術(shù)人員事先開發(fā)的第二 API,如此實現(xiàn)對目標應(yīng)用的功能進行擴展或?qū)δ繕藨?yīng)用的功能進行修改。參見圖2,該方法包括步驟201 :根據(jù)API進程的進程標識在Android系統(tǒng)對應(yīng)的虛擬機中實時對運行目標應(yīng)用的API進程進行監(jiān)控,如果監(jiān)控出API進程被啟動時,執(zhí)行步驟202 ;其中,Android系統(tǒng)中的應(yīng)用都運行在Android系統(tǒng)對應(yīng)的虛擬機中,當目標應(yīng)用被啟動吋,Android系統(tǒng)創(chuàng)建用于運行目標應(yīng)用的API進程,為API進程構(gòu)建ー個虛擬機實例,該虛擬機實例為一個結(jié)構(gòu)體,且使用API進程的進程標識來標識該虛擬機實例,API進程對應(yīng)的虛擬機實例中至少包括目標應(yīng)用包括的每個類對應(yīng)的類結(jié)構(gòu)體,每類對應(yīng)的類結(jié)構(gòu)體分別使用每個類的類標識進行標識,對于任ー個類,該類對應(yīng)的類結(jié)構(gòu)體中至少包括該類包括的每個API對應(yīng)的函數(shù)結(jié)構(gòu)體,每個API對應(yīng)的函數(shù)結(jié)構(gòu)體分別用每個API的函數(shù)標識進行標識,對于任ー個API,該API對應(yīng)的函數(shù)結(jié)構(gòu)體內(nèi)至少包括該API對應(yīng)的代碼指向地址;然后再啟動API進程,將API進程放置在Android系統(tǒng)對應(yīng)的虛擬機中,由該虛擬機來運行API進程。其中,技術(shù)人員事先配置API進程的進程標識,且API進程的進程標識可以為API進程的名稱,API進程的名稱可以為目標應(yīng)用的名稱。其中,本步驟可以具體為根據(jù)事先配置的API進程的進程標識,實時對Android系統(tǒng)對應(yīng)的虛擬機進行監(jiān)控,當監(jiān)控出Android系統(tǒng)對應(yīng)的虛擬機開始運行API進程的進程標識對應(yīng)的API進程吋,則監(jiān)控出API進程被啟動。例如,用于通話的應(yīng)用為Android系統(tǒng)提供的ー種應(yīng)用,用于通話的應(yīng)用包括兩步第一歩,根據(jù)被叫號碼進行撥號,第二步,連通主叫和被叫;第一步可以由用于實現(xiàn)撥號的API來實現(xiàn),第二步可以由用于連通通話的API來實現(xiàn);另外,需要說明的是用于通話的應(yīng)用包括一個用于通話的類,用于通話的類包括用于實現(xiàn)撥號的API和用于連通通話的 API。
假設(shè)在本實施例中,需要對用于通話的應(yīng)用實現(xiàn)的功能進行擴展,使用戶在使用用于通話的應(yīng)用進行撥打被叫號碼時,可以顯示被叫所在的地理位置,所以用于通話的應(yīng)用為目標應(yīng)用,需要對目標應(yīng)用中包括的第一步進行修改,以及待攔截的第一 API為實現(xiàn)第一歩的用于實現(xiàn)撥號的API ;其中,技術(shù)人員事先開發(fā)出ー個第二API,第二 API用于實現(xiàn)修改后的第一歩,即第二 API可以實現(xiàn)在撥打被叫號碼時,顯示被叫所在的地理位置。其中,在Android系統(tǒng)中當目標應(yīng)用被啟動時,Android系統(tǒng)創(chuàng)建ー個用于運行目標應(yīng)用的API進程,在終端的內(nèi)存中為該API進程構(gòu)建一個如表I所示的虛擬機實例,使用API進程的進程標識ProcessIDl來標識該虛擬機實例,該虛擬機實例中包括用于通話的類對應(yīng)的類結(jié)構(gòu)體,使用用于通話的類的類標識ClassIDl來標識該類結(jié)構(gòu)體,該類結(jié)構(gòu)體中包括用于實現(xiàn)撥號的API對應(yīng)的函數(shù)結(jié)構(gòu)體和用于連通通話的API對應(yīng)的函數(shù)結(jié)構(gòu)體,使用用于實現(xiàn)撥號的API的函數(shù)標識FunctionIDl來標識用于實現(xiàn)撥號的API對應(yīng)的函數(shù)結(jié)構(gòu)體,且該函數(shù)結(jié)構(gòu)體中包括用于實現(xiàn)撥號的API對應(yīng)的代碼指向地址為Addressl,使用用于連通通話的API的函數(shù)標識FunctionID2來標識用于連通通話的API對應(yīng)的函數(shù)結(jié)構(gòu)體,且該函數(shù)結(jié)構(gòu)體中包括用于連通通話的API對應(yīng)的代碼指向地址為Address2。表權(quán)利要求
1.一種應(yīng)用程序編程接口 API的攔截方法,其特征在于,所述方法包括 根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對所述API進程進行實時監(jiān)控; 當API進程被啟動時,根據(jù)API進程的進程標識從內(nèi)存中獲取所述API進程對應(yīng)的虛擬機實例; 根據(jù)待攔截API的標識信息從所述API進程對應(yīng)的虛擬機實例中將所述待攔截的采用第一計算機語言編寫的第一 API的代碼指向地址替換為已存儲的采用第二計算機語言編寫的且與第一 API相對應(yīng)的第二 API的代碼指向地址,所述第二語言與第一代碼相區(qū)別; 通過第二函數(shù)實現(xiàn)對API進程的控制。
2.如權(quán)利要求I所述的方法,其特征在于,所述根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對所述API進程進行實時監(jiān)控,包括 監(jiān)控系統(tǒng)對應(yīng)的虛擬機開始運行所述API進程的進程標識對應(yīng)的API進程時,則監(jiān)控出所述API進程被啟動。
3.如權(quán)利要求I所述的方法,其特征在于,所述待攔截的API的標識信息至少包括所述待攔截的API所屬類的類標識和所述待攔截的API的函數(shù)標識。
4.如權(quán)利要求3所述的方法,其特征在于所述根據(jù)待攔截API的標識信息從所述API進程對應(yīng)的虛擬機實例中將所述待攔截的采用第一計算機語言編寫的第一 API的代碼指向地址替換為已存儲的采用第二計算機語言編寫的且與第一 API相對應(yīng)的第二 API的代碼指向地址,包括 根據(jù)所述類標識,從所述API進程對應(yīng)的虛擬機實例中獲取所述待攔截的第一 API所屬的類對應(yīng)的類結(jié)構(gòu)體; 根據(jù)所述待攔截的第一 API的函數(shù)標識,從所述類結(jié)構(gòu)體中獲取所述待攔截的第一API對應(yīng)的函數(shù)結(jié)構(gòu)體; 將所述函數(shù)結(jié)構(gòu)體中存儲的所述待攔截的第一 API的代碼指向地址替換為已存儲的第二 API的代碼指向地址。
5.如權(quán)利要求I至4任一項權(quán)利要求所述的方法,其特征在于,所述第二計算機語言為C語g或C++語g。
6.一種應(yīng)用程序編程接口 API的攔截裝置,其特征在于,所述裝置包括 監(jiān)控模塊,用于根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對所述API進程進行實時監(jiān)控; 獲取模塊,用于當API進程被啟動時,根據(jù)API進程的進程標識從內(nèi)存中獲取所述API進程對應(yīng)的虛擬機實例; 攔截模塊,用于根據(jù)待攔截API的標識信息從所述API進程對應(yīng)的虛擬機實例中將所述待攔截的采用第一計算機語言編寫的第一 API的代碼指向地址替換為已存儲的采用第二計算機語言編寫的且與第一 API相對應(yīng)的第二 API的代碼指向地址,所述第二語言與第一代碼相區(qū)別; 通過第二函數(shù)實現(xiàn)對API進程的控制。
7.如權(quán)利要求6所述的裝置,其特征在于,所述監(jiān)控模塊,具體用于監(jiān)控系統(tǒng)對應(yīng)的虛擬機開始運行所述API進程的進程標識對應(yīng)的API進程時,則監(jiān)控出所述API進程被啟動。
8.如權(quán)利要求6所述的裝置,其特征在于,所述待攔截的API的標識信息至少包括所述待攔截的API所屬類的類標識和所述待攔截的API的函數(shù)標識。
9.如權(quán)利要求8所述的裝置,其特征在于,所述攔截模塊包括 第一獲取單元,用于根據(jù)所述類標識,從所述API進程對應(yīng)的虛擬機實例中獲取所述待攔截的第一 API所屬的類對應(yīng)的類結(jié)構(gòu)體; 第二獲取單元,用于根據(jù)所述待攔截的第一 API的函數(shù)標識,從所述類結(jié)構(gòu)體中獲取所述待攔截的第一 API對應(yīng)的函數(shù)結(jié)構(gòu)體; 替換單元,用于將所述函數(shù)結(jié)構(gòu)體中存儲的所述待攔截的第一 API的代碼指向地址替換為已存儲的第二 API的代碼指向地址。
10.一種移動終端,其特征在于,包括權(quán)利要求6至9任一項權(quán)利要求所述的裝置。
全文摘要
本發(fā)明公開了一種API的攔截方法、裝置及移動終端,屬于移動終端領(lǐng)域。所述方法包括根據(jù)API進程的進程標識在系統(tǒng)對應(yīng)的虛擬機中對所述API進程進行實時監(jiān)控;當API進程被啟動時,根據(jù)API進程的進程標識從內(nèi)存中獲取所述API進程對應(yīng)的虛擬機實例;根據(jù)待攔截API的標識信息從所述API進程對應(yīng)的虛擬機實例中將所述待攔截的采用第一計算機語言編寫的第一API的代碼指向地址替換為已存儲的采用第二計算機語言編寫的且與第一API相對應(yīng)的第二API的代碼指向地址,所述第二語言與第一代碼相區(qū)別;通過第二函數(shù)實現(xiàn)對API進程的控制。所述裝置包括監(jiān)控模塊、獲取模塊和替換模塊。本發(fā)明能夠?qū)?yīng)用的功能進行擴展或修改。
文檔編號G06F9/44GK102855138SQ20121025255
公開日2013年1月2日 申請日期2012年7月20日 優(yōu)先權(quán)日2012年7月20日
發(fā)明者張立春 申請人:騰訊科技(深圳)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1