專利名稱::動(dòng)態(tài)打補(bǔ)丁的方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種動(dòng)態(tài)打補(bǔ)丁的方法和裝置。
背景技術(shù):
:通常,對(duì)補(bǔ)丁目標(biāo)代碼打補(bǔ)丁的方案是先離線將補(bǔ)丁代碼編譯并鏈接為以絕對(duì)地址開始的補(bǔ)丁鏡像文件、隨后生成補(bǔ)丁目標(biāo)代碼所包含的函數(shù)與補(bǔ)丁鏡像文件所包含的補(bǔ)丁函數(shù)的相對(duì)應(yīng)的替換關(guān)系;再將補(bǔ)丁鏡像文件加載到設(shè)備后,根據(jù)替換關(guān)系將補(bǔ)丁目標(biāo)代碼包含的函數(shù)的入口指令修改為一條跳轉(zhuǎn)指令跳轉(zhuǎn)到補(bǔ)丁代碼的補(bǔ)丁函數(shù)入口,執(zhí)行補(bǔ)丁代碼,從而完成對(duì)補(bǔ)丁目標(biāo)代碼打補(bǔ)丁。
發(fā)明內(nèi)容本發(fā)明涉及一種動(dòng)態(tài)打補(bǔ)丁的方法,其包括將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng);通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化;將所述目標(biāo)代碼的執(zhí)行跳轉(zhuǎn)到所述補(bǔ)丁代碼的執(zhí)行。此外,本發(fā)明還涉及ー種動(dòng)態(tài)打補(bǔ)丁的裝置,其包括包括加載單元,用于將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng);重定位和鏈接單元,用于通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化;跳轉(zhuǎn)單元,用于將所述目標(biāo)代碼的執(zhí)行跳轉(zhuǎn)到所述補(bǔ)丁代碼的執(zhí)行。本發(fā)明提供的技術(shù)方案,在離線階段事先將補(bǔ)丁制作為可重定位的鏡像文件,比如標(biāo)準(zhǔn)的可執(zhí)行的鏈接格式(ExecutableandLinkingFormat,簡(jiǎn)稱ELF)目標(biāo)文件,而不是制作為絕對(duì)定位的文件;可以在設(shè)備中激活補(bǔ)丁時(shí),根據(jù)動(dòng)態(tài)分配到的空間地址和鏡像文件中的符號(hào)表信息,對(duì)補(bǔ)丁中的符號(hào)段中的函數(shù)和全局變量的符號(hào)重新賦值、代碼段重定位。不需要為補(bǔ)丁鏡像文件預(yù)先劃分好空間,因此補(bǔ)丁鏡像文件的伸縮性好。此外,本發(fā)明實(shí)施例提供的方法和裝置支持對(duì)動(dòng)態(tài)加載模塊的函數(shù)打補(bǔ)丁。同時(shí),借助本發(fā)明實(shí)施例提供的方法和裝置能夠?qū)崿F(xiàn)ー個(gè)補(bǔ)丁鏡像文件適配多個(gè)版本鏡像。另外,借助本發(fā)明實(shí)施例提供的方法和裝置還能夠?qū)崿F(xiàn)對(duì)補(bǔ)丁鏡像文件進(jìn)ー步打補(bǔ)丁。下面借助實(shí)施例結(jié)合以下附圖進(jìn)ー步闡述本發(fā)明。其中圖I示出了本發(fā)明實(shí)施例提供的一種動(dòng)態(tài)打補(bǔ)丁的方法的示例性流程圖;圖2示出了本發(fā)明實(shí)施例提供的另ー種動(dòng)態(tài)打補(bǔ)丁的方法的示例性流程圖;圖3示出了本發(fā)明實(shí)施例提供的另ー種動(dòng)態(tài)打補(bǔ)丁的方法的示例性流程圖;圖4示出了本發(fā)明實(shí)施例提供的另ー種動(dòng)態(tài)打補(bǔ)丁的方法的示例性流程圖;圖5示出了本發(fā)明的ー個(gè)具體實(shí)施例的動(dòng)態(tài)打補(bǔ)丁的方法的示例性流程圖;圖6示出了本發(fā)明實(shí)施例提供的一種動(dòng)態(tài)打補(bǔ)丁的裝置的示意性框圖。具體實(shí)施例方式在下文中將結(jié)合附圖對(duì)本發(fā)明的示范性實(shí)施例進(jìn)行描述。為了清楚和簡(jiǎn)明起見,在說明書中并未描述實(shí)際實(shí)施方式的所有特征。然而,應(yīng)該了解,在開發(fā)任何這種實(shí)際實(shí)施方式的過程中可以做出很多特定于實(shí)施方式的決定,以便實(shí)現(xiàn)開發(fā)人員的具體目標(biāo),并且這些決定可能會(huì)隨著實(shí)施方式的不同而有所改變。在此,還需要說明的一點(diǎn)是,為了避免因不必要的細(xì)節(jié)而模糊了本發(fā)明,在附圖中僅僅示出了與根據(jù)本發(fā)明的方案密切相關(guān)的裝置結(jié)構(gòu),而省略了與本發(fā)明關(guān)系不大的其他細(xì)節(jié)。在描述本發(fā)明實(shí)施例提供的動(dòng)態(tài)打補(bǔ)丁的方式時(shí)會(huì)涉及如下術(shù)語當(dāng)前系統(tǒng)、目標(biāo)代碼、補(bǔ)丁代碼和補(bǔ)丁鏡像文件。在本文中,當(dāng)前系統(tǒng)可以理解為目標(biāo)代碼和補(bǔ)丁代碼等所運(yùn)行的硬件設(shè)備諸如通信系統(tǒng)的硬件設(shè)備、個(gè)人計(jì)算機(jī)、個(gè)人數(shù)字設(shè)備等等,或也可以理解為軟件環(huán)境,諸如計(jì)算機(jī)操作系統(tǒng)、專用操作系統(tǒng)等等。出于描述的便利的原因,本文中使用的術(shù)語“目標(biāo)代碼”理解為待打補(bǔ)丁的程序或代碼,而術(shù)語“補(bǔ)丁代碼”理解為用于打補(bǔ)丁的程序或代碼。術(shù)語“補(bǔ)丁鏡像文件”理解為基于一定的格式將補(bǔ)丁代碼編譯后的生成的文件。在圖I中示出了本發(fā)明實(shí)施例提供的一種動(dòng)態(tài)打補(bǔ)丁的方法的示例性流程圖。所述方法包括110,本發(fā)明實(shí)施例提供的一種動(dòng)態(tài)打補(bǔ)丁的方法開始運(yùn)行。120,將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng)。在此需要說明的是,可重定位的補(bǔ)丁鏡像文件理解為對(duì)補(bǔ)丁代碼預(yù)處理之后生成的鏡像文件,其中該預(yù)處理在本
技術(shù)領(lǐng)域:
中通常也理解為離線處理,即當(dāng)前系統(tǒng)外的處理。在此,預(yù)處理可以包括對(duì)代碼進(jìn)行編譯和鏈接等等。編譯就是通常所言的利用編譯程序從源語言編寫的源程序產(chǎn)生目標(biāo)程序的過程,而鏈接是指在電子計(jì)算機(jī)程序的各模塊之間傳遞參數(shù)和控制命令,并把它們組成一個(gè)可執(zhí)行的整體的過程。通常,補(bǔ)丁鏡像文件包括ネト丁初始化入口函數(shù)、補(bǔ)丁函數(shù)、文本段、字符段、數(shù)據(jù)段、重定位段等等,在此并不逐一列舉而是僅僅談及該方法所涉及的相關(guān)內(nèi)容。在此,補(bǔ)丁鏡像文件可以是可執(zhí)行的鏈接格式(ELF)目標(biāo)文件,并且以各種編程語言以函數(shù)為單位來編輯。130,通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化。對(duì)于本領(lǐng)域技術(shù)人員而言,重定位理解為,將程序或代碼的邏輯地址空間變換成當(dāng)前系統(tǒng)的內(nèi)存中的實(shí)際物理地址空間的過程。重定位包括動(dòng)態(tài)重定位和靜態(tài)重定位。在本發(fā)明實(shí)施例中尤其是涉及動(dòng)態(tài)重定位。也就是說,在補(bǔ)丁鏡像文件裝入當(dāng)前系統(tǒng)之后,只有在當(dāng)前系統(tǒng)調(diào)用補(bǔ)丁鏡像文件時(shí)才動(dòng)態(tài)地將邏輯地址(也稱為相對(duì)地址)轉(zhuǎn)換為物理地址(也稱為絕對(duì)地址)。鏈接則是指從一個(gè)對(duì)象指向另ー個(gè)對(duì)象的連接關(guān)系。在此對(duì)象可以理解為例如補(bǔ)丁鏡像文件、補(bǔ)丁代碼和目標(biāo)代碼等等中的各種函數(shù)、符號(hào)和全局變量等等。重定位和鏈接所述補(bǔ)丁鏡像文件就是針對(duì)補(bǔ)丁鏡像文件進(jìn)行配置,使之與當(dāng)前系統(tǒng)建立連接關(guān)系(也稱為映射關(guān)系),從而完成所述補(bǔ)丁代碼的初始化。140,將所述目標(biāo)代碼的執(zhí)行跳轉(zhuǎn)到所述補(bǔ)丁代碼的執(zhí)行。在當(dāng)前系統(tǒng)調(diào)用目標(biāo)代碼時(shí),當(dāng)前系統(tǒng)根據(jù)130中建立的連接關(guān)系調(diào)用補(bǔ)丁代碼并且執(zhí)行,從而目標(biāo)代碼的執(zhí)行被通過補(bǔ)丁代碼的執(zhí)行而取代。由此,實(shí)現(xiàn)了動(dòng)態(tài)打補(bǔ)丁的過程。在本發(fā)明實(shí)施例提供的動(dòng)態(tài)打補(bǔ)丁的過程可以與補(bǔ)丁鏡像文件所加載的當(dāng)前系統(tǒng)的硬件配置和軟件配置無關(guān)地運(yùn)行。該過程也無需手工配置補(bǔ)丁鏡像文件。通過將補(bǔ)丁鏡像文件動(dòng)態(tài)加載到當(dāng)前系統(tǒng),能夠支持補(bǔ)丁鏡向文件加載到任意動(dòng)態(tài)分配的空間。通過動(dòng)態(tài)加載使補(bǔ)丁代碼所需的空間根據(jù)需要來進(jìn)行分配,而不需要為補(bǔ)丁鏡像文件預(yù)先劃分好空間,從而可以實(shí)現(xiàn)空間的任意伸縮。通過補(bǔ)丁鏡像文件動(dòng)態(tài)加載到當(dāng)前系統(tǒng),使補(bǔ)丁鏡像文件與當(dāng)前系統(tǒng)的硬件環(huán)境和軟件環(huán)境無關(guān),因此本發(fā)明實(shí)施例提供的方法能夠支持對(duì)動(dòng)態(tài)加載模塊的函數(shù)打補(bǔ)丁。圖2示出了本發(fā)明實(shí)施例提供的另ー種動(dòng)態(tài)打補(bǔ)丁的方法的示例性流程圖。如圖2所示,根據(jù)本實(shí)施例的動(dòng)態(tài)打補(bǔ)丁的方法在210開始。220,將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng)。220可以參考圖I所示的120來執(zhí)行。如圖2所示,所述220,將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng)具體可以包括221,在所述當(dāng)前系統(tǒng)中,為所述補(bǔ)丁鏡像文件中的文本段和數(shù)據(jù)段分配運(yùn)行空間,并且將所述文本段和數(shù)據(jù)段的內(nèi)容拷貝到所述運(yùn)行空間;222,為所述補(bǔ)丁鏡像文件中的符號(hào)段分配符號(hào)空間,并且將所述符號(hào)段的內(nèi)容拷貝到所述符號(hào)空間。在此需要說明的是,在此對(duì)221和222的編號(hào)并不含有步驟執(zhí)行順序方面的含義。230,通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化。230可以參考圖I所示的130來執(zhí)行。240,將所述目標(biāo)代碼的執(zhí)行跳轉(zhuǎn)到所述補(bǔ)丁代碼的執(zhí)行。240可以參考圖I所示的140來執(zhí)行。在此實(shí)施例中,所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的函數(shù)的地址等于所述函數(shù)的地址加上所述函數(shù)在符號(hào)段的實(shí)際加載地址;所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的全局變量的地址等于所述全局變量的地址加上所述全局變量在符號(hào)段的實(shí)際加載地址。而對(duì)于補(bǔ)丁鏡像文件中未涉及的函數(shù)、全局變量,函數(shù)、全局變量的符號(hào),以在當(dāng)前系統(tǒng)的符號(hào)表中函數(shù)、全局變量,函數(shù)、全局變量的所述符號(hào)的地址賦值給所述未涉及的函數(shù)、全局變量,函數(shù)、全局變量的符號(hào)。可選地,如圖3所示,所述通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化具體包括331,以所述運(yùn)行空間的地址作為起始絕對(duì)地址,對(duì)所述符號(hào)段中的函數(shù)和全局變量的符號(hào)賦值;332,通過所述補(bǔ)丁鏡像文件的重定位段中包含的指令對(duì)所述補(bǔ)丁代碼進(jìn)行重定位;333,調(diào)用特定的補(bǔ)丁初始化入口函數(shù)來初始化所述補(bǔ)丁代碼。此外可選地,如圖4所示,所述通過所述補(bǔ)丁鏡像文件的重定位段中包含的指令對(duì)所述補(bǔ)丁代碼進(jìn)行重定位具體包括4321,修改所述目標(biāo)代碼的函數(shù)入口指令以跳轉(zhuǎn)到所述補(bǔ)丁代碼的補(bǔ)丁函數(shù);4322,將所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的函數(shù)和全局變量的信息添加到當(dāng)前系統(tǒng)中。圖5示出了根據(jù)本發(fā)明的動(dòng)態(tài)打補(bǔ)丁的方法的ー個(gè)具體實(shí)施例的示例性流程圖。在該方法中包括501,本發(fā)明實(shí)施例提供的一種動(dòng)態(tài)打補(bǔ)丁的方法開始運(yùn)行;502,在當(dāng)前系統(tǒng)中,為包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件中的文本段和數(shù)據(jù)段分配運(yùn)行空間,并且將所述文本段和數(shù)據(jù)段的內(nèi)容拷貝到所述運(yùn)行空間;503,為所述補(bǔ)丁鏡像文件中的符號(hào)段分配符號(hào)空間,并且將所述符號(hào)段的內(nèi)容拷貝到所述符號(hào)空間;504,以所述運(yùn)行空間的地址作為起始絕對(duì)地址,對(duì)所述符號(hào)段的函數(shù)和全局變量的符號(hào)賦值;505,修改所述目標(biāo)代碼的函數(shù)入口指令以跳轉(zhuǎn)到所述補(bǔ)丁代碼的補(bǔ)丁函數(shù);506,將所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的的函數(shù)和全局變量的信息添加到當(dāng)前系統(tǒng)中;507,調(diào)用特定的補(bǔ)丁初始化入口函數(shù);508,將所述目標(biāo)代碼的執(zhí)行跳轉(zhuǎn)到所述補(bǔ)丁代碼的執(zhí)行。在此需要指出的是,本具體實(shí)施例不應(yīng)該理解為限制性,而僅僅是為了對(duì)本發(fā)明的理解更為清楚和準(zhǔn)確示例性地示出了本發(fā)明實(shí)施例的動(dòng)態(tài)打補(bǔ)丁的方法的流程圖。該具體實(shí)施例中所涉及的術(shù)語及其相關(guān)含義與根據(jù)圖I至圖4所闡述的動(dòng)態(tài)打補(bǔ)丁的方法中涉及的術(shù)語及其相關(guān)含義相同,在此出于清楚的原因而不再贅述。本發(fā)明的該具體實(shí)施例提供的動(dòng)態(tài)打補(bǔ)丁的過程可以與補(bǔ)丁鏡像文件所加載的當(dāng)前系統(tǒng)的硬件配置和軟件配置無關(guān)地運(yùn)行。從而,該過程也無需手工配置補(bǔ)丁鏡像文件。由于補(bǔ)丁鏡像文件被動(dòng)態(tài)加載到當(dāng)前系統(tǒng),所以本發(fā)明的該具體實(shí)施例提供的動(dòng)態(tài)打補(bǔ)丁的方法能夠支持補(bǔ)丁鏡向文件加載到任意動(dòng)態(tài)分配的空間。由此,實(shí)現(xiàn)了補(bǔ)丁代碼所需的空間根據(jù)需要進(jìn)行分配,從而不需為補(bǔ)丁鏡像文件預(yù)先劃分好空間,并且因此可以實(shí)現(xiàn)空間的任意伸縮。通過補(bǔ)丁鏡像文件動(dòng)態(tài)加載到當(dāng)前系統(tǒng),使補(bǔ)丁鏡像文件與當(dāng)前系統(tǒng)的硬件環(huán)境和軟件環(huán)境無關(guān),因此本發(fā)明的該具體實(shí)施例提供的動(dòng)態(tài)打補(bǔ)丁的方法能夠支持對(duì)動(dòng)態(tài)加載模塊的函數(shù)打補(bǔ)丁。在下文中,將結(jié)合圖6并且參照根據(jù)本發(fā)明實(shí)施例提供的動(dòng)態(tài)打補(bǔ)丁的方法來闡述根據(jù)本發(fā)明提供的動(dòng)態(tài)打補(bǔ)丁的裝置。圖6示出了本發(fā)明實(shí)施例提供的一種動(dòng)態(tài)打補(bǔ)丁的裝置的示意性框圖,用于實(shí)現(xiàn)本發(fā)明圖I所提供的動(dòng)態(tài)打補(bǔ)丁方法。如圖6所示,該動(dòng)態(tài)打補(bǔ)丁的裝置600包括加載單元610,用于將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng);重定位和鏈接單元620,用于通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化;跳轉(zhuǎn)單元630,用于將所述目標(biāo)代碼的執(zhí)行跳轉(zhuǎn)到所述補(bǔ)丁代碼的執(zhí)行。所述加載單元610具體可用于在所述當(dāng)前系統(tǒng)中,為所述補(bǔ)丁鏡像文件中的文本段和數(shù)據(jù)段分配運(yùn)行空間,并且將所述文本段和數(shù)據(jù)段的內(nèi)容拷貝到所述運(yùn)行空間;為所述補(bǔ)丁鏡像文件中的符號(hào)段分配符號(hào)空間,并且將所述符號(hào)段的內(nèi)容拷貝到所述符號(hào)空間。所述重定位和鏈接單元620具體可用于以所述運(yùn)行空間的地址作為起始絕對(duì)地址,對(duì)所述符號(hào)段的函數(shù)和全局變量的符號(hào)賦值;通過所述補(bǔ)丁鏡像文件的重定位段中包含的指令對(duì)所述補(bǔ)丁代碼進(jìn)行重定位;調(diào)用特定的補(bǔ)丁初始化入口函數(shù)來初始化所述補(bǔ)丁代碼。所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的函數(shù)的地址等于所述函數(shù)的地址加上所述函數(shù)在符號(hào)段的實(shí)際加載地址;所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的全局變量的地址等于所述全局變量的地址加上所述全局變量在符號(hào)段的實(shí)際加載地址。對(duì)于補(bǔ)丁鏡像文件中未涉及的函數(shù)和全局變量的符號(hào),以在當(dāng)前系統(tǒng)的符號(hào)表中函數(shù)和全局變量的所述符號(hào)的地址賦值給所述未涉及的函數(shù)和全局變量的符號(hào)。具體而言,根據(jù)本發(fā)明的實(shí)施例的動(dòng)態(tài)打補(bǔ)丁的方法中相關(guān)術(shù)語同樣也適用于根據(jù)本發(fā)明的實(shí)施例的動(dòng)態(tài)打補(bǔ)丁的裝置。所述重定位和鏈接單元620在通過所述補(bǔ)丁鏡像文件的重定位段中包含的指令對(duì)所述補(bǔ)丁代碼進(jìn)行重定位時(shí),具體用于修改所述目標(biāo)代碼的函數(shù)入口指令以跳轉(zhuǎn)到所述補(bǔ)丁代碼的補(bǔ)丁函數(shù);將所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的函數(shù)和全局變量的信息添加到當(dāng)前系統(tǒng)中。在針對(duì)上述本發(fā)明實(shí)施例的動(dòng)態(tài)打補(bǔ)丁的方法所闡述的技術(shù)優(yōu)點(diǎn)和技術(shù)效果同樣也適用于本發(fā)明實(shí)施例的動(dòng)態(tài)打補(bǔ)丁的裝置,因此在此不再贅述。本領(lǐng)域技術(shù)人員應(yīng)該理解,本發(fā)明實(shí)施例中裝置模塊的劃分為功能劃分,實(shí)際具體結(jié)構(gòu)可以為上述功能模塊的拆分或合井。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲(chǔ)于ー計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。權(quán)利要求的內(nèi)容記載的方案也是本發(fā)明實(shí)施例的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。權(quán)利要求1.一種動(dòng)態(tài)打補(bǔ)丁的方法,其特在在于,包括將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng);通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化;將所述目標(biāo)代碼的執(zhí)行跳轉(zhuǎn)到所述補(bǔ)丁代碼的執(zhí)行。2.根據(jù)權(quán)利要求I所述的動(dòng)態(tài)打補(bǔ)丁的方法,其特征在于,所述將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng),具體包括在所述當(dāng)如系統(tǒng)中,為所述補(bǔ)丁鏡像文件中的文本段和數(shù)據(jù)段分配運(yùn)行空間,并且將所述文本段和數(shù)據(jù)段的內(nèi)容拷貝到所述運(yùn)行空間;為所述補(bǔ)丁鏡像文件中的符號(hào)段分配符號(hào)空間,并且將所述符號(hào)段的內(nèi)容拷貝到所述符號(hào)空間。3.根據(jù)權(quán)利要求I或2所述的動(dòng)態(tài)打補(bǔ)丁的方法,其特征在于,所述通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化,具體包括以所述運(yùn)行空間的地址作為起始絕對(duì)地址,對(duì)所述符號(hào)段中的函數(shù)和全局變量的符號(hào)賦值;通過所述補(bǔ)丁鏡像文件的重定位段中包含的指令對(duì)所述補(bǔ)丁代碼進(jìn)行重定位;調(diào)用特定的補(bǔ)丁初始化入ロ函數(shù)來初始化所述補(bǔ)丁代碼。4.根據(jù)權(quán)利要求3所述的動(dòng)態(tài)打補(bǔ)丁的方法,其特征在干,所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的函數(shù)的地址等于所述函數(shù)的地址加上所述函數(shù)在符號(hào)段的實(shí)際加載地址;所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的全局變量的地址等于所述全局變量的地址加上所述全局變量在符號(hào)段的實(shí)際加載地址。5.根據(jù)權(quán)利要求3或4所述的動(dòng)態(tài)打補(bǔ)丁的方法,其特征在于,所述通過所述補(bǔ)丁鏡像文件的重定位段中包含的指令對(duì)所述補(bǔ)丁代碼進(jìn)行重定位,具體包括修改所述目標(biāo)代碼的函數(shù)入口指令以跳轉(zhuǎn)到所述補(bǔ)丁代碼的補(bǔ)丁函數(shù);將所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的函數(shù)和全局變量的信息添加到當(dāng)前系統(tǒng)中。6.一種動(dòng)態(tài)打補(bǔ)丁的裝置,其特征在于,包括加載單元,用于將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng);重定位和鏈接單元,用于通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化;跳轉(zhuǎn)單元,用于將所述目標(biāo)代碼的執(zhí)行跳轉(zhuǎn)到所述補(bǔ)丁代碼的執(zhí)行。7.根據(jù)權(quán)利要求6所述的動(dòng)態(tài)打補(bǔ)丁的裝置,其特征在于,所述加載単元具體用于在所述當(dāng)如系統(tǒng)中,為所述補(bǔ)丁鏡像文件中的文本段和數(shù)據(jù)段分配運(yùn)行空間,并且將所述文本段和數(shù)據(jù)段的內(nèi)容拷貝到所述運(yùn)行空間;為所述補(bǔ)丁鏡像文件中的符號(hào)段分配符號(hào)空間,并且將所述符號(hào)段的內(nèi)容拷貝到所述符號(hào)空間。8.根據(jù)權(quán)利要求6或7所述的動(dòng)態(tài)打補(bǔ)丁的裝置,其特征在于,所述重定位和鏈接單元具體用于以所述運(yùn)行空間的地址作為起始絕對(duì)地址,對(duì)所述符號(hào)段的函數(shù)和全局變量的符號(hào)賦值;通過所述補(bǔ)丁鏡像文件的重定位段中包含的指令對(duì)所述補(bǔ)丁代碼進(jìn)行重定位;調(diào)用特定的補(bǔ)丁初始化入ロ函數(shù)來初始化所述補(bǔ)丁代碼。9.根據(jù)權(quán)利要求8所述的動(dòng)態(tài)打補(bǔ)丁的裝置,其特征在于,所述重定位和鏈接單元在通過所述補(bǔ)丁鏡像文件的重定位段中包含的指令對(duì)所述補(bǔ)丁代碼進(jìn)行重定位時(shí),具體用于修改所述目標(biāo)代碼的函數(shù)入口指令以跳轉(zhuǎn)到所述補(bǔ)丁代碼的補(bǔ)丁函數(shù);將所述補(bǔ)丁鏡像文件中包含的在所述目標(biāo)代碼中不存在的函數(shù)和全局變量的信息添加到當(dāng)前系統(tǒng)中。全文摘要本發(fā)明的實(shí)施例公開了動(dòng)態(tài)打補(bǔ)丁的方法和裝置。該動(dòng)態(tài)打補(bǔ)丁的方法包括將包含補(bǔ)丁代碼的可重定位的補(bǔ)丁鏡像文件動(dòng)態(tài)加載到待打補(bǔ)丁的目標(biāo)代碼所處的當(dāng)前系統(tǒng);通過重定位和鏈接所述補(bǔ)丁鏡像文件將所述補(bǔ)丁代碼初始化;將所述目標(biāo)代碼的執(zhí)行跳轉(zhuǎn)到所述補(bǔ)丁代碼的執(zhí)行。文檔編號(hào)G06F9/445GK102722387SQ201210170368公開日2012年10月10日申請(qǐng)日期2012年5月29日優(yōu)先權(quán)日2012年5月29日發(fā)明者丁厚永申請(qǐng)人:華為技術(shù)有限公司