本申請涉及計算機技術(shù)領(lǐng)域,尤其涉及一種基于信號處理機制的反調(diào)試方法和裝置。
背景技術(shù):
隨著移動互聯(lián)網(wǎng)產(chǎn)業(yè)的快速發(fā)展,移動應(yīng)用程序呈井噴式爆發(fā),其中,基于安卓系統(tǒng)開發(fā)的安卓應(yīng)用程序也越來越多,為便于描述下文將安卓應(yīng)用程序簡稱為應(yīng)用程序。
由于安卓系統(tǒng)本身具有開源特性,應(yīng)用程序非常容易遭受木馬的侵襲和被盜版,應(yīng)用程序正逐漸取代電腦端程序成為黑客攻擊的主要對象。
現(xiàn)有技術(shù)中,應(yīng)用程序攻擊者可以利用調(diào)試器跟蹤應(yīng)用程序的運行,查看、修改應(yīng)用程序的內(nèi)存代碼和數(shù)據(jù),分析目標應(yīng)用程序的程序邏輯,從而可以對應(yīng)用程序進行攻擊和破解。
技術(shù)實現(xiàn)要素:
本申請實施例提供一種基于信號處理機制的反調(diào)試方法,用于解決現(xiàn)有技術(shù)中應(yīng)用程序攻擊者可以利用調(diào)試器對目標應(yīng)用進行攻擊和破解的問題。
本申請實施例還提供一種基于信號處理機制的反調(diào)試裝置,用于解決現(xiàn)有技術(shù)中應(yīng)用程序攻擊者可以利用調(diào)試器對目標應(yīng)用進行攻擊和破解的問題。
本申請實施例采用下述技術(shù)方案:
一種基于信號處理機制的反調(diào)試方法,包括:
通過應(yīng)用程序的主進程創(chuàng)建監(jiān)控進程;
通過所述監(jiān)控進程捕獲狀態(tài)信號,所述狀態(tài)信號中包含所述主進程的進程狀態(tài);
若確定所述狀態(tài)信號中包含的進程狀態(tài)是預(yù)設(shè)狀態(tài),則終止所述主進程,所述預(yù)設(shè)狀態(tài),為所述應(yīng)用程序被外部進程調(diào)試或被外部進程試圖調(diào)試的狀態(tài)。
優(yōu)選的,所述狀態(tài)信號,由所述監(jiān)控進程通過目標應(yīng)用程序接口捕獲。
優(yōu)選的,所述目標應(yīng)用程序接口,采用下述方式接收所述狀態(tài)信號:
通過鉤子函數(shù)獲取操作系統(tǒng)發(fā)出的信號;
通過所述目標應(yīng)用程序接口捕獲所述信號中的所述狀態(tài)信號。
優(yōu)選的,在通過目標應(yīng)用程序接口接收所述狀態(tài)信號后,所述方法還包括:
通過預(yù)設(shè)的系統(tǒng)宏定義函數(shù)確定所述狀態(tài)信號中包含的進程狀態(tài)。
優(yōu)選的,所述監(jiān)控進程由所述應(yīng)用程序的主進程通過fork()函數(shù)創(chuàng)建。
一種基于信號處理機制的反調(diào)試裝置,包括:
進程創(chuàng)建單元,用于通過應(yīng)用程序的主進程創(chuàng)建監(jiān)控進程;
信號捕獲單元,用于通過所述監(jiān)控進程捕獲狀態(tài)信號,所述狀態(tài)信號中包含所述主進程的進程狀態(tài);
進程終止單元,用于若確定所述狀態(tài)信號中包含的進程狀態(tài)是預(yù)設(shè)狀態(tài),則終止所述主進程,所述預(yù)設(shè)狀態(tài),為所述應(yīng)用程序被外部進程調(diào)試或被外部進程試圖調(diào)試的狀態(tài)。
優(yōu)選的,所述狀態(tài)信號,由所述監(jiān)控進程通過目標應(yīng)用程序接口捕獲。
優(yōu)選的,所述目標應(yīng)用程序接口,采用下述方式接收所述狀態(tài)信號:
通過鉤子函數(shù)獲取操作系統(tǒng)發(fā)出的信號;
通過所述目標應(yīng)用程序接口捕獲所述信號中的所述狀態(tài)信號。
優(yōu)選的,在通過目標應(yīng)用程序接口接收所述狀態(tài)信號后,所裝置還包括:
狀態(tài)確定單元,用于通過預(yù)設(shè)的系統(tǒng)宏定義函數(shù)確定所述狀態(tài)信號中包含的進程狀態(tài)。
優(yōu)選的,所述監(jiān)控進程由所述應(yīng)用程序的主進程通過fork()函數(shù)創(chuàng)建。
本申請實施例采用的上述至少一個技術(shù)方案能夠達到以下有益效果:
本申請中,由于能夠通過應(yīng)用程序的主進程創(chuàng)建監(jiān)控進程,通過該監(jiān)控進程捕獲狀態(tài)信號,該狀態(tài)信號中包含應(yīng)用程序主進程的進程狀態(tài),并在確定狀態(tài)信號中包含的進程狀態(tài)是預(yù)設(shè)狀態(tài)時,即應(yīng)用程序被外部進程調(diào)試或試圖調(diào)試時,終止該主進程。這樣當(dāng)有其他外部進程調(diào)試或試圖調(diào)試該應(yīng)用程序的主進程時,便可以通過監(jiān)控進程確定應(yīng)用程序主進程的進程狀態(tài),進而終止應(yīng)用程序的主進程,避免攻擊者對該應(yīng)用程序進程進行惡意攻擊和破解。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1為本申請實施例提供的基于信號處理機制的反調(diào)試方法的實施流程示意圖;
圖2為本申請實施例提供的基于信號處理機制的反調(diào)試裝置的結(jié)構(gòu)示意圖。
具體實施方式
為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本申請具體實施例及相應(yīng)的附圖對本申請技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
以下結(jié)合附圖,詳細說明本申請各實施例提供的技術(shù)方案。
如背景技術(shù)所述,由于安卓系統(tǒng)本身具有開源特性,安卓應(yīng)用程序攻擊者為獲取安卓應(yīng)用程序中包含的數(shù)據(jù),往往會對安卓應(yīng)用程序進行惡意攻擊,安卓軟件逆向技術(shù)也逐漸被這些攻擊者惡意利用。在安卓軟件逆向技術(shù)中,安卓調(diào)試技術(shù)是一個非常重要的組成部分,通過進行安卓應(yīng)用程序的調(diào)試,可以得到安卓應(yīng)用程序的運行流程,推斷出安卓應(yīng)用程序的基本原理,通??梢苑浅m樌铱焖俚乩@過一些登錄限制或功能限制,獲取到一些用戶的私密信息,具有較大的危害。
攻擊者在對應(yīng)用程序進行調(diào)試時,通常是對應(yīng)用程序?qū)?yīng)的進程進行調(diào)試,從廣義上而言,進程是一個具有一定獨立功能的程序關(guān)于某個數(shù)據(jù)集合的幾次運行活動,它是操作系統(tǒng)動態(tài)執(zhí)行的基本單元,在傳統(tǒng)的操作系統(tǒng)中,進程既是基本的分配單元,也是基本的執(zhí)行單元。由于每個進程都有自己的地址空間,通常包括文本區(qū)域(textregion)、數(shù)據(jù)區(qū)域(dataregion)和堆棧(stackregion),其中,文本區(qū)域存儲處理器執(zhí)行的代碼,數(shù)據(jù)區(qū)域存儲變量和進程執(zhí)行期間使用的動態(tài)分配的內(nèi)存,堆棧區(qū)域存儲著進程活動過程調(diào)用的指令和本地變量,因此一旦某個應(yīng)用程序的進程被攻擊者進行惡意攻擊和破解,便能夠獲取該應(yīng)用程序的關(guān)鍵信息和數(shù)據(jù)。
需要說明的是,本申請實施例中的調(diào)試可以是利用程序語言提供的調(diào)試功能、或者專門的調(diào)試工具來分析應(yīng)用程序的行為。
為解決現(xiàn)有技術(shù)中應(yīng)用程序攻擊者可以利用調(diào)試器對目標應(yīng)用進行惡意攻擊和破解的問題,本申請實施例提供一種基于信號處理機制的反調(diào)試的方法,該方法的執(zhí)行主體,但不限于手機、平板電腦、個人電腦(personalcomputer,pc)等能夠被配置為執(zhí)行本申請實施例提供的方法的應(yīng)用程序中的至少一種,或者該方法的執(zhí)行主體,還可以是實現(xiàn)本申請?zhí)峁┑耐ㄟ^基于信號處理機制的反調(diào)試方法的應(yīng)用程序本身。為便于描述,下文以該方法的執(zhí)行主體是應(yīng)用程序為例,對該方法的實施方式進行介紹??梢岳斫猓摲椒ǖ膱?zhí)行主體為應(yīng)用程序只是一種示例性的說明,并不應(yīng)理解為對該方法的限定。
本申請?zhí)峁┑幕谛盘柼幚頇C制的反調(diào)試方法的實現(xiàn)流程示意圖如圖1所示,包括下述步驟:
步驟11,通過應(yīng)用程序的主進程創(chuàng)建監(jiān)控進程;
本申請實施例中,主進程也可以稱為父進程,通??梢允强梢詣?chuàng)建一個或多個子進程的進程。子進程是由另一進程所創(chuàng)建的進程,子進程繼承了對應(yīng)的父進程的大部分屬性,如文件描述符。在linux系統(tǒng)中,子進程往往是系統(tǒng)調(diào)用fork()函數(shù)創(chuàng)建的產(chǎn)物。一個進程可能下屬多個子進程,但最多只能有1個父進程,而若某一進程沒有父進程,則可知該進程很可能由內(nèi)核直接生成。
在實際應(yīng)用中,進程不是憑空創(chuàng)建的,每個進程都是由其父進程衍生而來的,在linux系統(tǒng)中,父進程通??梢允褂胒ork()、vfork()或clone()等進程創(chuàng)建函數(shù)來創(chuàng)建子進程。本申請實施例中,主進程可以通過fork()函數(shù)來創(chuàng)建監(jiān)控進程。其中,fork()函數(shù)可以通過系統(tǒng)調(diào)用,創(chuàng)建一個與調(diào)用fork()函數(shù)的父進程幾乎完全相同的子進程,換言之,一個父進程調(diào)用fork()函數(shù)后,系統(tǒng)首先會給將要創(chuàng)建的監(jiān)控進程分配資源,比如存儲數(shù)據(jù)和代碼的空間,然后將調(diào)用fork()函數(shù)的父進程的所有值都復(fù)制到將要創(chuàng)建的監(jiān)控進程中,只有少數(shù)值與父進程的值不同,即相當(dāng)于克隆了一個與父進程本身相同的監(jiān)控進程。
由于安卓系統(tǒng)沒有禁止用于調(diào)試的系統(tǒng)調(diào)用,攻擊者利用惡意程序在拿到root權(quán)限的情況下,可以使用應(yīng)用程序接口(applicationprograminterface,api)對應(yīng)用程序的進程的內(nèi)存、寄存器進行修改,以達到執(zhí)行shellcode、注入惡意模塊的目的。在注入惡意模塊后,惡意模塊就可以動態(tài)地獲取內(nèi)存中的各種敏感信息,例如應(yīng)用程序用戶的用戶名和密碼等重要信息和數(shù)據(jù),為了避免這些問題,可以通過執(zhí)行以下步驟對應(yīng)用程序主進程的進程狀態(tài)進行監(jiān)控,從而阻止其他外部進程對應(yīng)用程序主進程進行調(diào)試操作。
步驟12,通過監(jiān)控進程捕獲狀態(tài)信號,該狀態(tài)信號中包含主進程的進程狀態(tài);
由于linux系統(tǒng)中的信號可以根據(jù)功能進行區(qū)分,而對應(yīng)于不同功能的信號則可以通過與該功能對應(yīng)的應(yīng)用程序接口來捕獲,監(jiān)控進程捕獲狀態(tài)信號,則可以通過目標應(yīng)用程序接口捕獲該狀態(tài)信號,具體可以先通過鉤子函數(shù)獲取操作系統(tǒng)發(fā)出的信號,再通過目標應(yīng)用程序接口捕獲獲取到的信號中的狀態(tài)信號。
其中,狀態(tài)信號,由監(jiān)控進程通過目標應(yīng)用程序接口捕獲,在實際應(yīng)用中,可以通過waitpid()接口函數(shù)來捕獲狀態(tài)信號。waitpid()接口函數(shù)中的變量往往有參數(shù)pid、status和options,其中,pid為進程識別碼,status為進程結(jié)束狀態(tài)值,options為額外的選項。waitpid()會暫時停止目前進程的執(zhí)行,直到有信號來到或進程結(jié)束。如果在調(diào)用waitpid()時,進程已經(jīng)結(jié)束,則waitpid()會立即返回該進程結(jié)束的狀態(tài)值。該進程的結(jié)束狀態(tài)值會由參數(shù)status返回,該進程的進程識別碼pid也會一起返回。如果不在意進程的結(jié)束狀態(tài)值,則參數(shù)status可以設(shè)置為null。
參數(shù)pid為進程識別碼,該進程識別碼為被捕獲進程的進程識別碼,其數(shù)值意義可以定義為:當(dāng)pid<-1時,則可以表明被捕獲進程的進程識別碼為pid絕對值的任何進程;當(dāng)pid=-1時,則可以表明被捕獲進程為任何進程;當(dāng)pid=0時,則可以表明被捕獲進程的進程組識別碼與目前進程相同的任何進程;當(dāng)pid>0時,則可以表明被捕獲進程的進程識別碼為pid的進程。
參數(shù)options提供了一些額外的選項來控制waitpid(),參數(shù)option可以為0或可以用"|"運算符把這些額外的選項連接起來使用,比如:ret=waitpid(-1,null,wnohang|wuntraced),其中,wnohang表明若pid指定的進程沒有結(jié)束,則waitpid()函數(shù)返回0,不予以等待;若結(jié)束,則返回該進程的id。wuntraced表明若進程進入暫停狀態(tài),則馬上返回,但進程的結(jié)束狀態(tài)不予以理會。如果不想使用這個參數(shù),也可以把options設(shè)為0,比如:ret=waitpid(-1,null,0)。
鉤子函數(shù),是消息處理機制的一部分,通過鉤子函數(shù)可以獲取操作系統(tǒng)發(fā)出的信號,比如應(yīng)用程序主進程或其他進程的狀態(tài)信號。在linux系統(tǒng)中,每個進程都有自己的獨立的進程空間,可以通過系統(tǒng)調(diào)用,將鉤子函數(shù)注入系統(tǒng)的進程中,每當(dāng)有特定的消息發(fā)出時,鉤子函數(shù)便可以先獲取該消息,即鉤子函數(shù)先得到控制權(quán),這時,鉤子函數(shù)既可以加工處理該消息,也可以不做處理而繼續(xù)傳遞該消息,還可以強制結(jié)束該消息的傳輸。本申請實施例中的目標應(yīng)用程序接口利用鉤子函數(shù)可以獲取系統(tǒng)中進程的消息的這一特征,通過鉤子函數(shù)獲取操作系統(tǒng)中進程發(fā)出的信號,然后,再通過目標應(yīng)用程序接口即waitpid()接口函數(shù)捕獲獲取到的信號中的狀態(tài)信號。
在通過目標應(yīng)用程序接口接收狀態(tài)信號后,為確定該狀態(tài)信號中是否包含應(yīng)用程序主進程被調(diào)試的狀態(tài),還可以通過預(yù)設(shè)的系統(tǒng)宏定義函數(shù)確定所述狀態(tài)信號中包含的進程狀態(tài)。
其中,通過預(yù)設(shè)的系統(tǒng)宏定義函數(shù)確定狀態(tài)信號中包含的進程狀態(tài),既可以通過wifexited(status)、wifsignaled(status)、wifstopped(status)等系統(tǒng)宏定義函數(shù)來確定狀態(tài)信號中包含的進程狀態(tài),也可以通過wtermsig(status)、wstopsig(status)等系統(tǒng)宏定義函數(shù)來確定進程狀態(tài)。具體而言,wifexited(status)函數(shù)可以在正常終止應(yīng)用程序主進程返回的狀態(tài)下執(zhí)行,捕獲應(yīng)用程序主進程傳送給exit或_exit參數(shù)的低八位作為進程狀態(tài);wifsignaled(status)函數(shù)可以在異常終止進程返回的狀態(tài)下執(zhí)行,捕獲應(yīng)用程序主進程終止的信號編號作為進程狀態(tài);wifstopped(status)函數(shù)可以在當(dāng)前暫停應(yīng)用程序主進程的返回的狀態(tài)下執(zhí)行,取應(yīng)用程序主進程暫停的信號編號作為進程狀態(tài)。而wtermsig(status)函數(shù)則可以用于捕獲進程因信號而中止的信號代碼,一般而言,會先通過調(diào)用wifsignaled(status)來判斷后才使用此系統(tǒng)宏定義函數(shù);wstopsig(status)函數(shù)用于捕獲引發(fā)進程暫停的信號代碼,一般而言,會先通過調(diào)用wifstopped(status)來判斷后才使用此系統(tǒng)宏定義函數(shù)。
步驟13,若確定狀態(tài)信號中包含的進程狀態(tài)是預(yù)設(shè)狀態(tài),則終止主進程。
其中,預(yù)設(shè)狀態(tài)為應(yīng)用程序被外部進程調(diào)試或者被外部進程試圖調(diào)試的狀態(tài),本申請實施例中的預(yù)設(shè)狀態(tài)表明應(yīng)用程序被外部進程調(diào)試,或者應(yīng)用程序有可能被外部進程調(diào)試,具體而言,預(yù)設(shè)狀態(tài),可以是應(yīng)用程序的進程處于非正常運行的狀態(tài),比如正在被外部進程調(diào)試的狀態(tài),或者被外部進程調(diào)試導(dǎo)致的停止狀態(tài),這兩種狀態(tài)都會為攻擊者破解和攻擊應(yīng)用程序提供便利。
為避免其他外部進程對應(yīng)用程序的主進程進行調(diào)試,以及應(yīng)用程序主進程處于停止狀態(tài)后,會被攻擊者破解,進而獲取用戶輸入的賬號、密碼等重要信息,本申請實施例在通過預(yù)設(shè)的系統(tǒng)宏定義函數(shù)確定狀態(tài)信號中包含的進程狀態(tài)是預(yù)設(shè)狀態(tài)時,則終止應(yīng)用程序主進程。
本申請中,由于能夠通過應(yīng)用程序的主進程創(chuàng)建監(jiān)控進程,通過該監(jiān)控進程捕獲狀態(tài)信號,該狀態(tài)信號中包含應(yīng)用程序主進程的進程狀態(tài),并在確定狀態(tài)信號中包含的進程狀態(tài)是預(yù)設(shè)狀態(tài)時,即應(yīng)用程序被外部進程調(diào)試或試圖調(diào)試時,終止該主進程。這樣當(dāng)有其他外部進程調(diào)試或試圖調(diào)試該應(yīng)用程序的主進程時,便可以通過監(jiān)控進程確定應(yīng)用程序主進程的進程狀態(tài),進而終止應(yīng)用程序的主進程,避免攻擊者對該應(yīng)用程序進程進行惡意攻擊和破解。
為解決現(xiàn)有技術(shù)中安卓應(yīng)用攻擊者可以利用調(diào)試器跟蹤目標應(yīng)用的運行,對應(yīng)用程序進行攻擊和破解的問題,基于與上述基于信號處理機制的反調(diào)試方法相同的發(fā)明構(gòu)思,本申請實施例還提供一種基于信號處理機制的反調(diào)試裝置,如圖2所示,包括:
進程創(chuàng)建單元21,用于通過應(yīng)用程序的主進程創(chuàng)建監(jiān)控進程;
信號捕獲單元22,用于通過所述監(jiān)控進程捕獲狀態(tài)信號,所述狀態(tài)信號中包含所述主進程的進程狀態(tài);
進程終止單元23,用于若確定所述狀態(tài)信號中包含的進程狀態(tài)是預(yù)設(shè)狀態(tài),則終止所述主進程,所述預(yù)設(shè)狀態(tài),為所述應(yīng)用程序被外部進程調(diào)試的狀態(tài)或被外部進程試圖調(diào)試的狀態(tài)。
上述裝置實施例的具體工作流程是,首先,進程創(chuàng)建單元21,通過應(yīng)用程序的主進程創(chuàng)建監(jiān)控進程,然后,信號捕獲單元22,通過所述監(jiān)控進程捕獲狀態(tài)信號,所述狀態(tài)信號中包含所述主進程的進程狀態(tài),最后,進程終止單元23,若確定所述狀態(tài)信號中包含的進程狀態(tài)是預(yù)設(shè)狀態(tài),則終止所述主進程,這樣,當(dāng)有其他外部進程調(diào)試或試圖調(diào)試該應(yīng)用程序的進程時,便可以通過監(jiān)控進程檢測到這一進程狀態(tài),進而終止該應(yīng)用程序的主進程,從而能夠避免攻擊者對該應(yīng)用程序進程進行惡意攻擊和破解。
在一種實施方式中,由于linux系統(tǒng)中的信號類別是按照功能劃分的,所述信號捕獲單元22,用于:
通過目標應(yīng)用程序接口捕獲狀態(tài)信號。
在一種實施方式中,所述信號捕獲單元22,具體用于:
通過鉤子函數(shù)獲取包含所述狀態(tài)信號的信號;
通過所述目標應(yīng)用程序接口捕獲所述信號中的狀態(tài)信號。
在一種實施方式中,在通過目標應(yīng)用程序接口接收狀態(tài)信號后,所述裝置還包括:
狀態(tài)確定單元24,用于通過預(yù)設(shè)的系統(tǒng)宏定義函數(shù)確定所述狀態(tài)信號中包含的進程狀態(tài)。
在一種實施方式中,所述進程創(chuàng)建單元21,具體用于:
通過fork()函數(shù)創(chuàng)建所述監(jiān)控進程。
本申請中,由于能夠通過應(yīng)用程序的主進程創(chuàng)建監(jiān)控進程,通過該監(jiān)控進程捕獲狀態(tài)信號,該狀態(tài)信號中包含應(yīng)用程序主進程的進程狀態(tài),并在確定狀態(tài)信號中包含的進程狀態(tài)是預(yù)設(shè)狀態(tài)時,即應(yīng)用程序被外部進程調(diào)試或試圖調(diào)試時,終止該主進程。這樣當(dāng)有其他外部進程調(diào)試或試圖調(diào)試該應(yīng)用程序的主進程時,便可以通過監(jiān)控進程確定應(yīng)用程序主進程的進程狀態(tài),進而終止應(yīng)用程序的主進程,避免攻擊者對該應(yīng)用程序進程進行惡意攻擊和破解。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本申請是參照本申請實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機可讀介質(zhì)的示例。
計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
以上僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。