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

一種在線補丁激活的方法及裝置與流程

文檔序號:12176356閱讀:241來源:國知局
一種在線補丁激活的方法及裝置與流程

本發(fā)明涉及計算機技術(shù)領(lǐng)域,具體涉及一種在線補丁激活的方法和裝置。



背景技術(shù):

在操作系統(tǒng)中,跳轉(zhuǎn)指令可以改變程序執(zhí)行流程,例如在線補丁,在線補丁的目的是在不丟失程序舊版本的情況下使用補丁函數(shù)代替程序舊版本中待打補丁的函數(shù),用于修復程序舊版本的缺陷或增強舊版本的功能。其基本原理是將程序舊版本中待打補丁函數(shù)的入口位置處的指令替換為跳轉(zhuǎn)指令,當操作系統(tǒng)執(zhí)行到程序舊版本待打補丁函數(shù)入口時,跳轉(zhuǎn)指令將使得操作系統(tǒng)跳轉(zhuǎn)到補丁函數(shù)入口處,執(zhí)行補丁函數(shù)。

目前,實現(xiàn)在線補丁激活的方法有很多,其中,一種具體的實現(xiàn)方法為長跳轉(zhuǎn)方法,長跳轉(zhuǎn)方法可以通過寄存器實現(xiàn),首先將目標地址寫入寄存器,然后跳轉(zhuǎn)到寄存器中的目標地址執(zhí)行新的指令,但是該長跳轉(zhuǎn)方法需要多條指令才能完成跳轉(zhuǎn)。

從上可知,使用長跳轉(zhuǎn)方法實現(xiàn)在線補丁激活,需要替換程序舊版本待打補丁函數(shù)入口處的多條指令,如果在指令替換時某些線程正在或?qū)⒁獔?zhí)行這些被替換指令的部分或全部,則可能造成線程執(zhí)行未知指令,引起操作系統(tǒng)異常。



技術(shù)實現(xiàn)要素:

本發(fā)明實施例提供了一種在線補丁激活的方法和裝置,能夠在激活在線補丁的過程中提高操作系統(tǒng)的安全性。

本發(fā)明實施例的第一方面公開了一種在線補丁激活的方法,所述方法包括:

定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令;將包含補丁函數(shù)地址的信息寫入跳轉(zhuǎn)表,并獲取所述信息在所述跳轉(zhuǎn)表中的索引;將所述跳轉(zhuǎn)表地址寫入寄存器;獲取所述待打補丁函數(shù)的第一條入口指令的長度,并構(gòu)造一條長度小于或等于所述待打補丁函數(shù)的第一條入口指令長度的短指令,所述短指令包含所述寄存器的標識和所述索引;將所述待打補丁函數(shù)的第一條入口指令替換為所述短指令,使得所述待打補丁函數(shù)被調(diào)用時,所述短指令被執(zhí)行,所述補丁函數(shù)被激活。

結(jié)合第一方面,在第一方面的第一種實現(xiàn)方式中,所述將包含補丁函數(shù)地址的信息寫入跳轉(zhuǎn)表包括:

將所述補丁函數(shù)地址寫入跳轉(zhuǎn)表;

獲取所述信息在所述跳轉(zhuǎn)表中的索引包括:

獲取所述補丁函數(shù)地址在所述跳轉(zhuǎn)表中的索引。

結(jié)合第一方面,在第一方面的第二種實現(xiàn)方式中,所述將包含補丁函數(shù)地址的信息寫入跳轉(zhuǎn)表包括:

將跳轉(zhuǎn)到所述補丁函數(shù)的地址的跳轉(zhuǎn)指令寫入跳轉(zhuǎn)表;

獲取所述信息在所述跳轉(zhuǎn)表中的索引包括:

獲取所述跳轉(zhuǎn)指令在所述跳轉(zhuǎn)表中的索引。

結(jié)合第一方面或第一方面的第一種實現(xiàn)方式或第一方面的第二種實現(xiàn)方式,在第一方面的第三種實現(xiàn)方式中,所述跳轉(zhuǎn)表用于存儲至少一條包含補丁函數(shù)地址的信息。

本發(fā)明實施例的第二方面公開了一種在線補丁激活的裝置,所述裝置包括:

定位單元,用于定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令;寫入單元,將包含所述補丁函數(shù)地址的信息寫入跳轉(zhuǎn)表,將所述跳轉(zhuǎn)表地址寫入寄存器,所述補丁函數(shù)地址是由所述定位單元定位的;獲取單元,用于獲取所述寫入單元寫入的信息在所述跳轉(zhuǎn)表中的索引;獲取所述定位單元定位的待打補丁函數(shù)的第一條入口指令的長度;構(gòu)造單元,用于構(gòu)造一條長度小于或等于所述待打補丁函數(shù)的第一條入口指令長度的短指令,所述短指令包含所述寄存器的標識和所述索引,所述待打補丁函數(shù)的第一條入口指令是由所述定位單元定位的;替換單元,用于將所述待打補丁函數(shù)的第一條入口指令替換為所述構(gòu)造單元構(gòu)造的短指令;執(zhí)行單元,用于在所述待打補丁函數(shù)被調(diào)用時,執(zhí)行替換單元替換的短指令,激活所述補丁函數(shù)。

結(jié)合第二方面,在第二方面的第一種實現(xiàn)方式中,所述寫入單元具體用于:

將定位單位定位的所述補丁函數(shù)的地址寫入跳轉(zhuǎn)表;

所述獲取單元具體用于:

獲取所述補丁函數(shù)定制在所述跳轉(zhuǎn)表中的索引。

結(jié)合第二方面,在第二方面的第二種實現(xiàn)方式中,所述寫入單元具體用于:

將可以跳轉(zhuǎn)到補丁函數(shù)的地址的跳轉(zhuǎn)指令寫入跳轉(zhuǎn)表;

所述獲取單元具體用于:

獲取所述跳轉(zhuǎn)指令定制在所述跳轉(zhuǎn)表中的索引。

從上可知,使用本發(fā)明實施例提供的在線補丁激活的方法和裝置,可以在只替換程序舊版本待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

附圖說明

為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為本發(fā)明一個實施例提供的在線補丁激活的方法流程圖;

圖2為本發(fā)明另一個實施例提供的在線補丁激活的方法流程圖;

圖3為本發(fā)明另一個實施例提供的在線補丁激活的方法流程圖;

圖4為本發(fā)明一個實施例提供的在線補丁激活的裝置結(jié)構(gòu)圖;

圖5為本發(fā)明另一個實施例提供的在線補丁激活的裝置結(jié)構(gòu)圖;

圖6為本發(fā)明另一個實施例提供的在線補丁激活的裝置結(jié)構(gòu)圖;

圖7為本發(fā)明另一個實施例提供的在線補丁激活的裝置結(jié)構(gòu)圖;

圖8為本發(fā)明另一個實施例提供的在線補丁激活的裝置結(jié)構(gòu)圖;

圖9為本發(fā)明另一個實施例提供的在線補丁激活的裝置結(jié)構(gòu)圖。

具體實施方式

下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

圖1描述了本發(fā)明實施例的一種在線補丁激活的方法,該方法描述的是短指令替換程序中待打補丁函數(shù)入口處第一條指令的過程,該方法具體包括:

101、定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令。

在線補丁是指程序運行中不需要重啟程序而生效的補丁,廣泛應用于各類軟件。在待打補丁程序運行時,在線補丁激活線程定位補丁函數(shù)地址以及該程序中待打補丁函數(shù)的第一條入口指令。其中,在線補丁激活線程可以是程序內(nèi)部的線程,也可以是一個用于激活補丁的應用程序的線程。

102、將包含補丁函數(shù)地址的信息寫入跳轉(zhuǎn)表,并獲取該信息在該跳轉(zhuǎn)表中的索引。

跳轉(zhuǎn)表是在線補丁激活線程在內(nèi)存中開辟的一塊空間,可以記錄包含補丁函數(shù)地址的信息。其中,包含補丁函數(shù)地址的信息可以是補丁函數(shù)地址,也可以跳轉(zhuǎn)到補丁函數(shù)地址的跳轉(zhuǎn)指令。使用跳轉(zhuǎn)表可以實現(xiàn)多個補丁函數(shù)同時激活。

獲取該信息在該跳轉(zhuǎn)表中的索引。將包含補丁函數(shù)地址的信息寫入跳轉(zhuǎn)表后,獲取該信息在該跳轉(zhuǎn)表中的索引或者序號??梢酝ㄟ^該序號或者索引定位該信息在該跳轉(zhuǎn)表中的位置。

103、將該跳轉(zhuǎn)表地址寫入寄存器中。

將跳轉(zhuǎn)表地址寫入寄存器中,無論跳轉(zhuǎn)表放置在內(nèi)存中什么位置,都可以通過訪問寄存器,讀取跳轉(zhuǎn)表的地址,再通過跳轉(zhuǎn)表獲得各個包含補丁函數(shù)地址的信息。其中,可以將跳轉(zhuǎn)表的首地址寫入寄存器中,寄存器可以是基址寄存器。

104、獲取該待打補丁函數(shù)的第一條入口指令的長度,并構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引。

在不同操作系統(tǒng)中,實現(xiàn)相同功能的指令的長度也有可能是不同的。獲取該待打補丁函數(shù)的第一條入口指令的長度,構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引。其中,在該短指令被執(zhí)行時,可以獲取寄存器中的跳轉(zhuǎn)表首地址,通過跳轉(zhuǎn)表的首地址和索引便可以定位補丁函數(shù)入口地址。

在跳轉(zhuǎn)表只有一張的時候,可以通過一個基址寄存器記錄該跳轉(zhuǎn)表的首地址,在短指令中可以寫包含補丁函數(shù)地址的信息在跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,就會去默認的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合該信息在該跳轉(zhuǎn)表中的索引就可以定位補丁函數(shù)的入口。其中,跳轉(zhuǎn)表可存儲一定量的包含補丁函數(shù)地址的信息,例如跳轉(zhuǎn)表可以存儲10條該信息,從而使得索引的長度較短。

在跳轉(zhuǎn)表有多張時,需要通過多個基址寄存器來記錄多張?zhí)D(zhuǎn)表的首地址,在短指令中就需要寫入跳轉(zhuǎn)表所對應的基址寄存器和包含補丁函數(shù)地址的信息在該跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,通過短指令中的記錄的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合包含補丁函數(shù)地址的信息在跳轉(zhuǎn)表中的索引定位補丁函數(shù)入口。

該短指令通過基址寄存器實現(xiàn)了長跳轉(zhuǎn),由于該短指令小于或等于待打補丁函數(shù)入口處第一條指令長度,可保證順利實現(xiàn)在線補丁的激活。

105、將該待打補丁函數(shù)的第一條入口指令替換為該短指令,使得該待打補丁函數(shù)被調(diào)用時,該短指令被執(zhí)行,該補丁函數(shù)被激活。

由于程序中待打補丁函數(shù)的入口處有很多條指令,如果要替換多條指令,那么在替換過程中,可能出現(xiàn)某些需要替換的指令在被某些線程執(zhí)行,則可能造成線程執(zhí)行未知指令,引起操作系統(tǒng)異常。

將程序中待打補丁函數(shù)入口處的第一條指令替換為該短指令,該短指令的長度不超過該第一條入口指令的長度,那么在替換過程中不會影響到其他指令,可以保證在線補丁順利激活,也可以保證操作系統(tǒng)安全運行。其中,該短指令中的寄存器標識和索引都較短,可以保證該短指令的長度不超過該第一條入口指令的長度。

在該待打補丁函數(shù)被調(diào)用時,作為該待打補丁函數(shù)入口處第一條指令的短指令被執(zhí)行,該短指令會被解析,根據(jù)解析的內(nèi)容去訪問默認的或者短指令記錄的基址寄存器,獲取該基址寄存器中存儲的跳轉(zhuǎn)表首地址,根據(jù)該跳轉(zhuǎn)表首地址和該短指令中記錄的包含補丁函數(shù)地址的信息在跳轉(zhuǎn)表中的索引,獲得補丁函數(shù)入口地址,跳轉(zhuǎn)到補丁函數(shù)入口,并執(zhí)行函數(shù)補丁,使得補丁函數(shù)被激活。

從上可知,使用本發(fā)明實施例提供的在線補丁激活的方法,可以在只替換程序中待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

圖2描述了本發(fā)明實施例的一種在線補丁激活的方法,該方法描述的是短指令替換程序中待打補丁函數(shù)入口處第一條指令的過程,該方法具體包括:

201、定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令。

在線補丁是指程序運行中不需要重啟程序而生效的補丁,廣泛應用于各類軟件。在待打補丁程序運行時,在線補丁激活線程定位補丁函數(shù)的地址以及該程序中待打補丁函數(shù)的第一條入口指令。其中,在線補丁激活線程可以是程序內(nèi)部的線程,也可以是一個用于激活補丁的應用程序的線程。

202、將補丁函數(shù)地址寫入跳轉(zhuǎn)表,并獲取該補丁函數(shù)地址在該跳轉(zhuǎn)表中的索引。

跳轉(zhuǎn)表是在線補丁激活線程在內(nèi)存中開辟的一塊空間,可以記錄補丁函數(shù)地址。使用跳轉(zhuǎn)表可以實現(xiàn)多個補丁函數(shù)同時激活。

獲取該補丁函數(shù)地址在該跳轉(zhuǎn)表中的索引。將該補丁函數(shù)地址寫入跳轉(zhuǎn)表后,獲取該補丁函數(shù)地址在該跳轉(zhuǎn)表中的索引或者序號。可以通過該序號或索引定位該補丁函數(shù)地址在該跳轉(zhuǎn)表中的位置。

203、將該跳轉(zhuǎn)表地址寫入寄存器中。

將跳轉(zhuǎn)表地址寫入寄存器中,無論跳轉(zhuǎn)表放置在內(nèi)存中什么位置,都可以通過訪問寄存器,讀取跳轉(zhuǎn)表的地址,再通過跳轉(zhuǎn)表獲得各個補丁函數(shù)地址。其中,可以將跳轉(zhuǎn)表的首地址寫入寄存器中,寄存器可以是基址寄存器。

204、獲取該待打補丁函數(shù)的第一條入口指令的長度,并構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引。

在不同操作系統(tǒng)中,實現(xiàn)相同功能的指令的長度也有可能是不同的。獲取該待打補丁函數(shù)的第一條入口指令的長度,構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引。其中,在該短指令被執(zhí)行時,可以獲取寄存器中的跳轉(zhuǎn)表首地址,通過跳轉(zhuǎn)表的首地址和索引便可以定位補丁函數(shù)入口地址。

在跳轉(zhuǎn)表只有一張的時候,可以通過一個基址寄存器記錄該跳轉(zhuǎn)表的首地址,在短指令中可以寫補丁函數(shù)地址在跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,就會去默認的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合該索引就可以定位補丁函數(shù)的入口。其中,跳轉(zhuǎn)表可存儲一定量的補丁函數(shù)地址,例如一張?zhí)D(zhuǎn)表可以存儲5條或10條補丁函數(shù)地址,從而使得索引的長度較短。

在跳轉(zhuǎn)表有多張時,需要通過多個基址寄存器來記錄多張?zhí)D(zhuǎn)表的首地址,在短指令中就需要寫入跳轉(zhuǎn)表所對應的基址寄存器和補丁函數(shù)地址該跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,通過短指令中的記錄的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合補丁函數(shù)地址在跳轉(zhuǎn)表中的索引定位補丁函數(shù)入口。

該短指令通過基址寄存器實現(xiàn)了長跳轉(zhuǎn),由于該短指令小于或等于待打補丁函數(shù)入口處第一條指令長度,可保證順利實現(xiàn)在線補丁的激活。

205、將該待打補丁函數(shù)的第一條入口指令替換為該短指令,使得該待打補丁函數(shù)被調(diào)用時,該短指令被執(zhí)行,該補丁函數(shù)被激活。

由于程序中待打補丁函數(shù)的入口處有很多條指令,如果要替換多條指令,那么在替換過程中,可能出現(xiàn)某些需要替換的指令在被某些線程執(zhí)行,則可能造成線程執(zhí)行未知指令,引起操作系統(tǒng)異常。

將程序中待打補丁函數(shù)入口處的第一條指令替換為該短指令,該短指令的長度不超過該第一條入口指令的長度,那么在替換過程中不會影響到其他指令,可以保證在線補丁順利激活,也可以保證操作系統(tǒng)安全運行。其中,該短指令中的寄存器標識和索引都較短,可以保證該短指令的長度不超過該第一條入口指令的長度。

在該待打補丁函數(shù)被調(diào)用時,作為該待打補丁函數(shù)入口處第一條指令的短指令被執(zhí)行,該短指令會被解析,根據(jù)解析的內(nèi)容去訪問默認的或者短指令記錄的基址寄存器,獲取該基址寄存器中存儲的跳轉(zhuǎn)表首地址,根據(jù)該跳轉(zhuǎn)表首地址和該短指令中記錄的補丁函數(shù)地址在跳轉(zhuǎn)表中的索引,獲得補丁函數(shù)入口地址,跳轉(zhuǎn)到補丁函數(shù)入口,并執(zhí)行函數(shù)補丁,使得補丁函數(shù)被激活。

從上可知,使用本發(fā)明實施例提供的在線補丁激活的方法,可以在只替換程序中待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

圖3描述了本發(fā)明實施例的另一種在線補丁激活的方法,該方法具體包括:

301、定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令。

在線補丁是指程序運行中不需要重啟程序而生效的補丁,廣泛應用于各類軟件。在待打補丁程序的運行時,在線補丁激活線程定位補丁函數(shù)的地址以及該程序中待打補丁函數(shù)的第一條入口指令。其中,在線補丁激活線程可以是程序內(nèi)部的線程,也可以是一個用于激活補丁的應用程序的線程。

302、將跳轉(zhuǎn)到補丁函數(shù)地址的跳轉(zhuǎn)指令寫入跳轉(zhuǎn)表,并獲取該跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引。

跳轉(zhuǎn)表是在線補丁激活線程在內(nèi)存中開辟的一塊空間,可以存儲跳轉(zhuǎn)到補丁函數(shù)地址的跳轉(zhuǎn)指令。使用跳轉(zhuǎn)表可以實現(xiàn)多個補丁函數(shù)同時激活。

獲取該跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引。將該跳轉(zhuǎn)指令寫入跳轉(zhuǎn)表后,獲取該跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引或者序號??梢酝ㄟ^該序號或索引定位該跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的位置。

303、將該跳轉(zhuǎn)表地址寫入寄存器中。

將跳轉(zhuǎn)表地址寫入寄存器中,無論跳轉(zhuǎn)表放置在內(nèi)存中什么位置,都可以通過訪問寄存器,讀取跳轉(zhuǎn)表的地址,再通過跳轉(zhuǎn)表獲得各跳轉(zhuǎn)指令。其中,可以將跳轉(zhuǎn)表的首地址寫入寄存器中,寄存器可以是基址寄存器。

304、獲取該待打補丁函數(shù)的第一條入口指令的長度,并構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引。

在不同操作系統(tǒng)中,實現(xiàn)相同功能的指令的長度也有可能是不同的。獲取該待打補丁函數(shù)的第一條入口指令的長度,構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引。其中,在該短指令被執(zhí)行時,可以獲取寄存器中的跳轉(zhuǎn)表首地址,通過跳轉(zhuǎn)表的首地址和索引便可以定位補丁函數(shù)入口地址。

在跳轉(zhuǎn)表只有一張的時候,可以通過一個基址寄存器記錄該跳轉(zhuǎn)表的首地址,在短指令中可以寫跳轉(zhuǎn)指令在跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,就會去默認的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合該跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引就可以定位補丁函數(shù)的入口。其中,跳轉(zhuǎn)表可存儲一定量的跳轉(zhuǎn)指令,從而使得索引的長度較短,例如每個跳轉(zhuǎn)表最多記錄10條指令。在跳轉(zhuǎn)表有多張時,需要通過多個基址寄存器來記錄多張?zhí)D(zhuǎn)表的首地址,在短指令中就需要寫入跳轉(zhuǎn)表所對應的基址寄存器和跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,通過短指令中的記錄的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合包含跳轉(zhuǎn)指令在跳轉(zhuǎn)表中的索引定位補丁函數(shù)入口。

該短指令通過基址寄存器實現(xiàn)了長跳轉(zhuǎn),由于該短指令小于待打補丁函數(shù)入口處第一條指令長度,可保證順利實現(xiàn)在線補丁的激活。

305、將該待打補丁函數(shù)的第一條入口指令替換為該短指令,使得該待打補丁函數(shù)被調(diào)用時,該短指令被執(zhí)行,該補丁函數(shù)被激活。

由于程序中待打補丁函數(shù)的入口處有很多條指令,如果要替換多條指令,那么在替換過程中,可能出現(xiàn)某些需要替換的指令在被某些線程執(zhí)行,則可能造成線程執(zhí)行未知指令,引起操作系統(tǒng)異常。

將程序中待打補丁函數(shù)入口處的第一條指令替換為該短指令,該短指令的長度不超過該第一條入口指令的長度,那么在替換過程中不會影響到其他指令,可以保證在線補丁順利激活,也可以保證操作系統(tǒng)安全運行。其中,該短指令中的寄存器標識和索引都較短,可以保證該短指令的長度不超過該第一條入口指令的長度。

在該待打補丁函數(shù)被調(diào)用時,作為該待打補丁函數(shù)入口處第一條指令的短指令被執(zhí)行,該短指令會被解析,根據(jù)解析的內(nèi)容去訪問默認的或者短指令記錄的基址寄存器,獲取該基址寄存器中存儲的跳轉(zhuǎn)表首地址,根據(jù)該跳轉(zhuǎn)表首地址和該短指令中記錄的跳轉(zhuǎn)指令在跳轉(zhuǎn)表中的索引,獲得跳轉(zhuǎn)指令,再根據(jù)跳轉(zhuǎn)指令跳轉(zhuǎn)到補丁函數(shù)入口,并執(zhí)行函數(shù)補丁,使得補丁函數(shù)被激活。

從上可知,使用本發(fā)明實施例提供的在線補丁激活的方法,可以在只替換程序中待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

圖4描述了本發(fā)明實施例的一種在線補丁激活的裝置,該裝置具體包括:

定位單元401、寫入單元402、獲取單元403、構(gòu)造單元404、替換單元405、執(zhí)行單元406。

定位單元401,用于定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令。

在待打補丁程序的運行時,定位單元401定位補丁函數(shù)的地址以及待打補丁函數(shù)的入口地址,以便可以通過后續(xù)的操作使得待打補丁函數(shù)的第一條入口指令與補丁函數(shù)地址發(fā)生關(guān)聯(lián)。

寫入單元402,用于在定位單元401定位補丁函數(shù)的地址時,將包含該補丁函數(shù)地址的信息寫入跳轉(zhuǎn)表,將該跳轉(zhuǎn)表地址寫入寄存器,該補丁函數(shù)地址是由定位單元401定位的。

在定位單元401定位補丁函數(shù)的地址時,寫入單元402將包含補丁函數(shù)地址的信息寫入跳轉(zhuǎn)表,再將該跳轉(zhuǎn)表的地址寫入寄存器。其中包含補丁函數(shù)地址的信息可以是補丁函數(shù)地址,也可以是跳轉(zhuǎn)到補丁函數(shù)地址的跳轉(zhuǎn)指令。無論跳轉(zhuǎn)表放置在內(nèi)存中什么位置,都可以通過訪問寄存器,讀取跳轉(zhuǎn)表的地址,再通過跳轉(zhuǎn)表獲得各個補丁函數(shù)的入口地址。其中,可以將跳轉(zhuǎn)表的首地址寫入寄存器中,寄存器可以是基址寄存器。其中,該跳轉(zhuǎn)表可以用來存儲至少一個補丁函數(shù)的地址,可以實現(xiàn)多個在線補丁同時激活。

獲取單元403,用于獲取寫入單元402寫入的包含補丁函數(shù)地址的信息在該跳轉(zhuǎn)表中的索引;獲取定位單元401定位的待打補丁函數(shù)的第一條入口指令的長度。

獲取單元403獲取寫入單元402寫入的包含補丁函數(shù)地址的信息在該跳轉(zhuǎn)表中的索引。將該信息寫入跳轉(zhuǎn)表后,獲取該信息在該跳轉(zhuǎn)表中的索引或者序號。可以通過該序號定位該信息在該跳轉(zhuǎn)表中的位置。

獲取單元403獲取定位單元401定位的待打補丁函數(shù)的第一條入口指令的長度。在不同操作系統(tǒng)中,實現(xiàn)相同功能的指令的長度也有可能是不同的,因此需要獲取該待打補丁函數(shù)的第一條入口指令的長度。

構(gòu)造單元404,用于構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引,該待打補丁函數(shù)的第一條入口指令是由該定位單元定位的。

構(gòu)造單元404構(gòu)造一條可以實現(xiàn)長跳轉(zhuǎn)的短指令,該短指令包含該寄存器的標識和該索引,可通過該寄存器的標識獲取寄存器中的跳轉(zhuǎn)表首地址,通過跳轉(zhuǎn)表的首地址和該索引便可以定位補丁函數(shù)入口地址。其中,該短指令的長度小于或者等于該待打補丁函數(shù)的第一條入口指令長度。

在跳轉(zhuǎn)表只有一張的時候,可以通過一個基址寄存器記錄該跳轉(zhuǎn)表的首地址,在短指令中可以寫包含補丁函數(shù)地址的信息在跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,就會去默認的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合該信息在該跳轉(zhuǎn)表中的索引就可以定位補丁函數(shù)的入口。其中,跳轉(zhuǎn)表可存儲一定量的包含補丁函數(shù)地址的信息,從而使得索引的長度較短。在跳轉(zhuǎn)表有多張時,需要通過多個基址寄存器來記錄多張?zhí)D(zhuǎn)表的首地址,在短指令中就需要寫入跳轉(zhuǎn)表所對應的基址寄存器和包含補丁函數(shù)地址的信息在該跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,通過短指令中的記錄的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合包含補丁函數(shù)地址的信息在跳轉(zhuǎn)表中的索引定位補丁函數(shù)入口。

該短指令通過基址寄存器實現(xiàn)了長跳轉(zhuǎn),由于該短指令小于待打補丁函數(shù)入口處第一條指令長度,可保證順利實現(xiàn)在線補丁的激活。

替換單元405,用于將該待打補丁函數(shù)入口位置處的第一條指令替換為構(gòu)造單元404構(gòu)造的短指令。

由于待打補丁函數(shù)入口處有很多條指令,如果需要替換多條指令,那么在替換過程中,可能出現(xiàn)某些需要替換的指令在被某些線程執(zhí)行,則可能造成線程執(zhí)行未知指令,引起操作系統(tǒng)異常。

替換單元405將待打補丁函數(shù)入口處的第一條指令替換為構(gòu)造單元404構(gòu)造的短指令,該短指令的長度不超過該第一條指令的長度,那么在替換過程中不會影響到其他指令,可以保證在線補丁順利激活,也可以保證操作系統(tǒng)安全運行。

執(zhí)行單元406,用于在該待打補丁函數(shù)被調(diào)用時,執(zhí)行替換單元405替換的短指令,激活補丁函數(shù)。

在該待打補丁函數(shù)被調(diào)用時,作為該待打補丁函數(shù)入口處第一條指令的短指令被執(zhí)行,該短指令會被解析,根據(jù)解析的內(nèi)容去訪問默認的或者短指令記錄的基址寄存器,獲取該基址寄存器中存儲的跳轉(zhuǎn)表首地址,根據(jù)該跳轉(zhuǎn)表首地址和該短指令中記錄的包含補丁函數(shù)地址的信息在跳轉(zhuǎn)表中的索引,獲得補丁函數(shù)入口地址,跳轉(zhuǎn)到補丁函數(shù)入口,并執(zhí)行函數(shù)補丁,使得補丁函數(shù)被激活。

從上可知,使用本發(fā)明實施例提供的在線補丁激活的裝置,可以在只替換程序舊版本待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

圖5描述了本發(fā)明實施例的一種在線補丁激活的裝置,該裝置具體包括:

定位單元501,第一寫入單元502、獲取單元503、構(gòu)造單元504、替換單元505、執(zhí)行單元506。

定位單元501,用于定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令。

在待打補丁程序的運行時,定位單元501定位補丁函數(shù)的地址以及待打補丁函數(shù)的入口地址,以便可以通過后續(xù)的操作使得待打補丁函數(shù)的第一條入口指令與補丁函數(shù)地址發(fā)生關(guān)聯(lián)。

第一寫入單元502,用于在定位單元501定位補丁函數(shù)的地址時,將補丁函數(shù)地址寫入跳轉(zhuǎn)表,將該跳轉(zhuǎn)表地址寫入寄存器。

在定位單元501定位補丁函數(shù)的地址時,第一寫入單元502將該補丁函數(shù)地址寫入跳轉(zhuǎn)表,再將該跳轉(zhuǎn)表的地址寫入寄存器。其中,無論跳轉(zhuǎn)表放置在內(nèi)存中什么位置,都可以通過訪問寄存器,讀取跳轉(zhuǎn)表的地址,再通過跳轉(zhuǎn)表獲得各個補丁函數(shù)的入口地址。其中,可以將跳轉(zhuǎn)表的首地址寫入寄存器中,寄存器可以是基址寄存器。其中,該跳轉(zhuǎn)表可以用來存儲至少一個補丁函數(shù)的地址,可以實現(xiàn)多個在線補丁同時激活。

獲取單元503,用于獲取第一寫入單元502寫入的該補丁函數(shù)地址在該跳轉(zhuǎn)表中的索引;獲取定位單元501定位的待打補丁函數(shù)的第一條入口指令的長度。

各個程序的補丁函數(shù)地址在跳轉(zhuǎn)表的索引可以確定各個補丁函數(shù)地址在該跳轉(zhuǎn)表的位置,通過該跳轉(zhuǎn)表的首地址和各個補丁函數(shù)地址的索引,可以確定各個補丁函數(shù)在內(nèi)存中的具體位置。

獲取第一寫入單元502寫入的補丁函數(shù)地址在該跳轉(zhuǎn)表中的索引。將該補丁函數(shù)地址寫入跳轉(zhuǎn)表后,獲取該補丁函數(shù)地址在該跳轉(zhuǎn)表中的索引或者序號??梢酝ㄟ^該序號定位該補丁函數(shù)地址在該跳轉(zhuǎn)表中的位置。

獲取定位單元501定位的待打補丁函數(shù)的第一條入口指令的長度。在不同操作系統(tǒng)中,實現(xiàn)相同功能的指令的長度也有可能是不同的,因此需要獲取該待打補丁函數(shù)的第一條入口指令的長度。

構(gòu)造單元504,用于構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引,該待打補丁函數(shù)的第一條入口指令是由該定位單元定位的。

構(gòu)造單元504構(gòu)造一條可以實現(xiàn)長跳轉(zhuǎn)的短指令,該短指令包含該寄存器的標識和該索引,可通過該寄存器的標識獲取寄存器中的跳轉(zhuǎn)表首地址,通過跳轉(zhuǎn)表的首地址和該索引便可以定位補丁函數(shù)入口地址。其中,該短指令的長度小于或者等于該待打補丁函數(shù)的第一條入口指令長度。

在跳轉(zhuǎn)表只有一張的時候,可以通過一個基址寄存器記錄該跳轉(zhuǎn)表的首地址,在短指令中可以寫補丁函數(shù)地址在跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,就會去默認的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合補丁函數(shù)地址在該跳轉(zhuǎn)表中的索引就可以定位補丁函數(shù)的入口。其中,跳轉(zhuǎn)表可存儲一定量的補丁函數(shù)地址,從而使得索引的長度較短。在跳轉(zhuǎn)表有多張時,需要通過多個基址寄存器來記錄多張?zhí)D(zhuǎn)表的首地址,在短指令中就需要寫入跳轉(zhuǎn)表所對應的基址寄存器和補丁函數(shù)地址在該跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,通過短指令中的記錄的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合補丁函數(shù)地址在跳轉(zhuǎn)表中的索引定位補丁函數(shù)入口。

該短指令通過基址寄存器實現(xiàn)了長跳轉(zhuǎn),由于該短指令小于或等于待打補丁函數(shù)入口處第一條指令長度,可保證順利實現(xiàn)在線補丁的激活。

替換單元505,用于將該待打補丁函數(shù)入口位置處的第一條指令替換為構(gòu)造單元504構(gòu)造的短指令。

由于待打補丁函數(shù)入口處有很多條指令,如果需要替換多條指令,那么在替換過程中,可能出現(xiàn)某些需要替換的指令在被某些線程執(zhí)行,則可能造成線程執(zhí)行未知指令,引起操作系統(tǒng)異常。

替換單元505,將待打補丁函數(shù)入口處的第一條指令替換為構(gòu)造單元504構(gòu)造的短指令,該短指令的長度不超過該第一條指令的長度,那么在替換過程中不會影響到其他指令,可以保證在線補丁順利激活,也可以保證操作系統(tǒng)安全運行。

執(zhí)行單元506,用于在該待打補丁函數(shù)被調(diào)用時,執(zhí)行替換單元505替換的短指令,激活補丁函數(shù)。

在該待打補丁函數(shù)被調(diào)用時,作為該待打補丁函數(shù)入口處第一條指令的短指令被執(zhí)行,該短指令會被解析,根據(jù)解析的內(nèi)容去訪問默認的或者短指令記錄的基址寄存器,獲取該基址寄存器中存儲的跳轉(zhuǎn)表首地址,根據(jù)該跳轉(zhuǎn)表首地址和該短指令中記錄的補丁函數(shù)地址在跳轉(zhuǎn)表中的索引,獲得補丁函數(shù)入口地址,跳轉(zhuǎn)到補丁函數(shù)入口,并執(zhí)行函數(shù)補丁,使得補丁函數(shù)被激活。

從上可知,使用本發(fā)明實施例提供的在線補丁激活的裝置,可以在只替換程序待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

圖6描述了本發(fā)明實施例的一種在線補丁激活的裝置,該裝置具體包括:

定位單元601、第二寫入單元602、獲取單元603、構(gòu)造單元604、替換單元605、跳轉(zhuǎn)單元606。

定位單元601,用于定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令。

在待打補丁程序的運行時,定位單元601定位補丁函數(shù)的地址以及待打補丁函數(shù)的入口地址,以便可以通過后續(xù)的操作使得待打補丁函數(shù)的第一條入口指令與補丁函數(shù)地址發(fā)生關(guān)聯(lián)。

第二寫入單元602,用于在定位單元601定位補丁函數(shù)的地址時,將跳轉(zhuǎn)到補丁函數(shù)地址的跳轉(zhuǎn)指令寫入跳轉(zhuǎn)表,將該跳轉(zhuǎn)表地址寫入寄存器。

在定位單元601定位補丁函數(shù)的地址時,第一寫入單元602將跳轉(zhuǎn)到補丁函數(shù)地址的跳轉(zhuǎn)指令寫入跳轉(zhuǎn)表,再將該跳轉(zhuǎn)表的地址寫入寄存器。其中,無論跳轉(zhuǎn)表放置在內(nèi)存中什么位置,都可以通過訪問寄存器,讀取跳轉(zhuǎn)表的地址,再通過跳轉(zhuǎn)表獲得各個跳轉(zhuǎn)指令。其中,可以將跳轉(zhuǎn)表的首地址寫入寄存器中,寄存器可以是基址寄存器。其中,該跳轉(zhuǎn)表可以用來存儲至少一個跳轉(zhuǎn)指令,可以實現(xiàn)多個在線補丁同時激活。

獲取單元603,用于獲取第二寫入單元602寫入的跳轉(zhuǎn)到該補丁函數(shù)地址的跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引;獲取定位單元601定位的待打補丁函數(shù)的第一條入口指令的長度。

獲取第二寫入單元602寫入的跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引。將該跳轉(zhuǎn)指令寫入跳轉(zhuǎn)表后,獲取該跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引或者序號。可以通過該序號或該索引定位該跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的位置。

獲取定位單元601定位的待打補丁函數(shù)的第一條入口指令的長度。在不同操作系統(tǒng)中,實現(xiàn)相同功能的指令的長度也有可能是不同的,因此需要獲取該待打補丁函數(shù)的第一條入口指令的長度。

構(gòu)造單元604,用于構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引,該待打補丁函數(shù)的第一條入口指令是由該定位單元定位的。

構(gòu)造單元604構(gòu)造一條可以實現(xiàn)長跳轉(zhuǎn)的短指令,該短指令包含該寄存器的標識和該索引,可通過該寄存器的標識獲取寄存器中的跳轉(zhuǎn)表首地址,通過跳轉(zhuǎn)表的首地址和該索引便可以定位跳轉(zhuǎn)指令,再通過跳轉(zhuǎn)指令定位補丁函數(shù)的地址。其中,該短指令的長度小于或者等于該待打補丁函數(shù)的第一條入口指令長度。

在跳轉(zhuǎn)表只有一張的時候,可以通過一個基址寄存器記錄該跳轉(zhuǎn)表的首地址,在短指令中可以寫跳轉(zhuǎn)到補丁函數(shù)地址的跳轉(zhuǎn)指令在跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,就會去默認的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引就可以定位補丁函數(shù)的入口。其中,跳轉(zhuǎn)表可存儲一定量的跳轉(zhuǎn)指令,從而使得索引的長度較短。在跳轉(zhuǎn)表有多張時,需要通過多個基址寄存器來記錄多張?zhí)D(zhuǎn)表的首地址,在短指令中就需要寫入跳轉(zhuǎn)表所對應的基址寄存器和跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引。在該短指令被執(zhí)行時,通過短指令中的記錄的基址寄存器獲取跳轉(zhuǎn)表的首地址,結(jié)合跳轉(zhuǎn)指令在跳轉(zhuǎn)表中的索引定位補丁函數(shù)入口。

該短指令通過基址寄存器實現(xiàn)了長跳轉(zhuǎn),由于該短指令小于或等于待打補丁函數(shù)入口處第一條指令長度,可保證順利實現(xiàn)在線補丁的激活。

替換單元605,用于將該待打補丁函數(shù)入口位置處的第一條指令替換為構(gòu)造單元604構(gòu)造的短指令。

由于待打補丁函數(shù)入口處有很多條指令,如果需要替換多條指令,那么在替換過程中,可能出現(xiàn)某些需要替換的指令在被某些線程執(zhí)行,則可能造成線程執(zhí)行未知指令,引起操作系統(tǒng)異常。

替換單元605將待打補丁函數(shù)入口處的第一條指令替換為構(gòu)造單元604構(gòu)造的短指令,該短指令的長度不超過該第一條指令的長度,那么在替換過程中不會影響到其他指令,可以保證在線補丁順利激活,也可以保證操作系統(tǒng)安全運行。

執(zhí)行單元606,用于在該待打補丁函數(shù)被調(diào)用時,執(zhí)行替換單元605替換的短指令,激活補丁函數(shù)。

在該待打補丁函數(shù)被調(diào)用時,作為該待打補丁函數(shù)入口處第一條指令的短指令被執(zhí)行,該短指令會被解析,根據(jù)解析的內(nèi)容去訪問默認的或者短指令記錄的基址寄存器,獲取該基址寄存器中存儲的跳轉(zhuǎn)表首地址,根據(jù)該跳轉(zhuǎn)表首地址和該短指令中記錄的跳轉(zhuǎn)指令在跳轉(zhuǎn)表中的索引,獲得補丁函數(shù)入口地址,跳轉(zhuǎn)到補丁函數(shù)入口,并執(zhí)行函數(shù)補丁,使得補丁函數(shù)被激活。

從上可知,使用本發(fā)明實施例提供的在線補丁激活的裝置,可以在只替換程序待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

圖7描述了本發(fā)明另一個實施例提供的運行驅(qū)動設備的結(jié)構(gòu),包括至少一個處理器701(例如CPU),存儲器702,內(nèi)存703和至少一個通信總線704,用于實現(xiàn)這些裝置之間的連接通信。處理器701用于執(zhí)行存儲器702中存儲的可執(zhí)行模塊,例如計算機程序。存儲器702可能包含高速隨機存取存儲器(RAM:Random Access Memory),也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。通過至少一個處理器訪問內(nèi)存中的地址。

在一些實施方式中,存儲器702存儲了程序7021,程序7021可以被處理器701執(zhí)行,這個程序包括:定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令;將包含補丁函數(shù)地址的信息寫入跳轉(zhuǎn)表,并獲取該信息在該跳轉(zhuǎn)表中的索引;將該跳轉(zhuǎn)表地址寫入寄存器;獲取該待打補丁函數(shù)的第一條入口指令的長度,并構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引;將該待打補丁函數(shù)的第一條入口指令替換為該短指令,使得該待打補丁函數(shù)被調(diào)用時,該短指令被執(zhí)行,該補丁函數(shù)被激活。具體的實施步驟與圖1所示的實施例相同,此處不再贅述。

從本發(fā)明實施例提供的以上技術(shù)方案可以看出,使用本發(fā)明實施例提供的在線補丁激活的裝置,可以在只替換程序待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

圖8描述了本發(fā)明另一個實施例提供的運行驅(qū)動設備的結(jié)構(gòu),包括至少一個處理器801(例如CPU),存儲器802,內(nèi)存803和至少一個通信總線804,用于實現(xiàn)這些裝置之間的連接通信。處理器801用于執(zhí)行存儲器802中存儲的可執(zhí)行模塊,例如計算機程序。存儲器802可能包含高速隨機存取存儲器(RAM:Random Access Memory),也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。通過至少一個處理器訪問內(nèi)存中的地址。

在一些實施方式中,存儲器802存儲了程序8021,程序8021可以被處理器801執(zhí)行,這個程序包括:定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令;將補丁函數(shù)地址寫入跳轉(zhuǎn)表,并獲取該補丁函數(shù)地址在該跳轉(zhuǎn)表中的索引;將該跳轉(zhuǎn)表地址寫入寄存器;獲取該待打補丁函數(shù)的第一條入口指令的長度,并構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引;將該待打補丁函數(shù)的第一條入口指令替換為該短指令,使得該待打補丁函數(shù)被調(diào)用時,該短指令被執(zhí)行,該補丁函數(shù)被激活。具體的實施步驟與圖2所示的實施例相同,此處不再贅述。

從本發(fā)明實施例提供的以上技術(shù)方案可以看出,使用本發(fā)明實施例提供的在線補丁激活的裝置,可以在只替換程序待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

圖9描述了本發(fā)明另一個實施例提供的運行驅(qū)動設備的結(jié)構(gòu),包括至少一個處理器901(例如CPU),存儲器902,內(nèi)903,和至少一個通信總線904,用于實現(xiàn)這些裝置之間的連接通信。處理器901用于執(zhí)行存儲器902中存儲的可執(zhí)行模塊,例如計算機程序。存儲器902可能包含高速隨機存取存儲器(RAM:Random Access Memory),也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。通過至少一個處理器訪問內(nèi)存中的地址。

在一些實施方式中,存儲器902存儲了程序9021,程序9021可以被處理器901執(zhí)行,這個程序包括:定位補丁函數(shù)地址和待打補丁函數(shù)的第一條入口指令;將跳轉(zhuǎn)到補丁函數(shù)地址的跳轉(zhuǎn)指令寫入跳轉(zhuǎn)表,并獲取該跳轉(zhuǎn)指令在該跳轉(zhuǎn)表中的索引;將該跳轉(zhuǎn)表地址寫入寄存器;獲取該待打補丁函數(shù)的第一條入口指令的長度,并構(gòu)造一條長度小于或等于該待打補丁函數(shù)的第一條入口指令長度的短指令,該短指令包含該寄存器的標識和該索引;將該待打補丁函數(shù)的第一條入口指令替換為該短指令,使得該待打補丁函數(shù)被調(diào)用時,該短指令被執(zhí)行,該補丁函數(shù)被激活。具體的實施步驟與圖3所示的實施例相同,此處不再贅述。

從本發(fā)明實施例提供的以上技術(shù)方案可以看出,使用本發(fā)明實施例提供的在線補丁激活的裝置,可以在只替換程序待打補丁函數(shù)入口處第一條指令的情況下,實現(xiàn)在線補丁激活,提高了操作系統(tǒng)的安全性;進一步,由于本發(fā)明實施例提供了跳轉(zhuǎn)表,跳轉(zhuǎn)表中可以記錄多個補丁函數(shù)的信息,從而實現(xiàn)多個在線補丁同時更新,提高了用戶體驗。

需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進行。其次,本領(lǐng)域技術(shù)人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。

上述裝置和系統(tǒng)內(nèi)的各模塊之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實施例中的敘述,此處不再贅述。

本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,上述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,上述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(ROM:Read-Only Memory)或隨機存儲記憶體(RAM:Random Access Memory)等。

本文中應用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應理解為對本發(fā)明的限制。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
上杭县| 襄汾县| 宁津县| 万安县| 哈尔滨市| 福清市| 赣州市| 上林县| 那坡县| 林西县| 搜索| 广东省| 舒城县| 蕲春县| 潞西市| 深水埗区| 永靖县| 葫芦岛市| 黑龙江省| 淳安县| 金华市| 宁武县| 尖扎县| 称多县| 色达县| 五河县| 曲水县| 逊克县| 泽普县| 会东县| 黄龙县| 琼海市| 望江县| 方城县| 乐亭县| 塔城市| 阳东县| 临泉县| 陇南市| 沂南县| 三河市|