[發(fā)明專利]熱補丁方法及裝置有效
| 申請?zhí)枺?/td> | 201210018144.0 | 申請日: | 2012-01-19 |
| 公開(公告)號: | CN102609241B | 公開(公告)日: | 2018-04-27 |
| 發(fā)明(設(shè)計)人: | 朱明星;阮芳芳 | 申請(專利權(quán))人: | 中興通訊股份有限公司 |
| 主分類號: | G06F9/32 | 分類號: | G06F9/32 |
| 代理公司: | 北京康信知識產(chǎn)權(quán)代理有限責(zé)任公司11240 | 代理人: | 余剛,梁麗超 |
| 地址: | 518057 廣*** | 國省代碼: | 廣東;44 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 補丁 方法 裝置 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種熱補丁方法及裝置。
背景技術(shù)
補丁技術(shù)的基本原理是將現(xiàn)有系統(tǒng)中正在運行的函數(shù)替換成補丁函數(shù),從而改變了原函數(shù)的功能,以達到修改系統(tǒng)功能,或糾正現(xiàn)有系統(tǒng)故障的目的。目前公開的補丁技術(shù)有多種方案,比較典型的技術(shù)方案有以下兩種:
補丁方案1
1.將補丁函數(shù)funcA重新編譯,生成可重定位的目標(biāo)文件fileB。
2.在目標(biāo)機中解析目標(biāo)文件fileB,提取出代碼段、data段、bss段到內(nèi)存中。
3.分析目標(biāo)機中的內(nèi)存符號表,解析出被補丁函數(shù)funcC的地址。
4.修改被補丁函數(shù)funcC的首指令為跳轉(zhuǎn)指令,跳轉(zhuǎn)到補丁函數(shù)funcA。
這樣,假設(shè)當(dāng)被補丁函數(shù)funcC被調(diào)用時,由于funcC的起始指令是一個跳轉(zhuǎn)指令,于是直接跳轉(zhuǎn)到補丁函數(shù)funcA中去執(zhí)行,返回時直接返回到被補丁函數(shù)funcC的下一條指令處,從而達到補丁函數(shù)funcA取代被補丁函數(shù)funcC的目的。
補丁方案2
1.將需要補丁函數(shù)funcA重新編譯,生成可重定位的目標(biāo)文件fileB。
2.解析目標(biāo)文件fileB,解析出補丁函數(shù)funcA的位置、尺寸等信息以及funcB引用外部符號的信息,生成補丁信息infoE。
3.將補丁信息infoE和可重定位的目標(biāo)文件fileB合在一起生成一個新的補丁文件fileF。
4.在目標(biāo)機中解析補丁文件fileF,提取目標(biāo)文件fileB的text段、data段、bss段到內(nèi)存中。
5.在目標(biāo)機種解析補丁文件fileF,提取補丁信息infoE,根據(jù)補丁信息infoE所記錄的被補丁函數(shù)funcD名稱在內(nèi)存符號表中進行檢索,找到被補丁函數(shù)funcD的地址。
6.修改被補丁函數(shù)funcD首指令為跳轉(zhuǎn)指令,跳轉(zhuǎn)到補丁函數(shù)funcA。
補丁函數(shù)的具體執(zhí)行過程和補丁方案1完全一樣,不再贅述。
目前上述兩個方案均存在如下缺陷,即無法支持需要進行長跳轉(zhuǎn)的函數(shù),至少需要兩條指令實現(xiàn)長跳轉(zhuǎn),可能導(dǎo)致程序中斷,甚至系統(tǒng)故障。
發(fā)明內(nèi)容
本發(fā)明提供了一種熱補丁方法及裝置,以至少解決相關(guān)技術(shù)中,補丁技術(shù)實現(xiàn)從被補丁函數(shù)重定位到補丁函數(shù)的長跳轉(zhuǎn)至少需要兩條指令,可能導(dǎo)致程序中斷,甚至系統(tǒng)故障的問題。
根據(jù)本發(fā)明的一個方面,提供了一種熱補丁方法,包括:確定調(diào)用指令與補丁函數(shù)之間的距離超過短跳轉(zhuǎn)指令能夠跳轉(zhuǎn)的范圍;將調(diào)用指令替換為帶索引值的非法指令,其中索引值對應(yīng)于補丁函數(shù)。
優(yōu)選地,將調(diào)用指令替換為帶索引值的非法指令包括:確定用于執(zhí)行替換操作的指令屬于長跳轉(zhuǎn)指令;獲取用于執(zhí)行替換操作的指令中的用于控制PC指針轉(zhuǎn)移過程的指令;將用于控制PC指針轉(zhuǎn)移過程的指令替換為帶索引值的非法指令。
優(yōu)選地,獲取用于執(zhí)行替換操作的指令中的用于控制PC指針轉(zhuǎn)移過程的指令包括:在用于執(zhí)行替換操作的指令中搜索長跳轉(zhuǎn)指令,得到用于控制PC指針轉(zhuǎn)移過程的指令。
優(yōu)選地,在將調(diào)用指令替換為帶索引值的非法指令之前,上述方法還包括:確定被補丁函數(shù)是靜態(tài)函數(shù);確定被補丁函數(shù)所屬的文件。
優(yōu)選地,確定被補丁函數(shù)所屬的文件包括:在映像文件的符號表中查找被補丁函數(shù)所屬的文件的符號;遍歷符號表,查找到與被補丁函數(shù)名稱相同的符號;記錄查找到的符號在符號表中的下標(biāo)。
優(yōu)選地,在將調(diào)用指令替換為帶索引值的非法指令之后,上述方法還包括:目標(biāo)機在執(zhí)行與非法指令對應(yīng)的異常處理函數(shù)的過程中,根據(jù)索引值獲取補丁函數(shù)的地址;目標(biāo)機將異常處理函數(shù)的返回地址修改為補丁函數(shù)地址。
根據(jù)本發(fā)明的另一方面,提供了一種熱補丁裝置,包括:第一確定模塊,用于確定調(diào)用指令與補丁函數(shù)之間的距離超過短跳轉(zhuǎn)指令能夠跳轉(zhuǎn)的范圍;替換模塊,用于將調(diào)用指令替換為帶索引值的非法指令,其中索引值對應(yīng)于補丁函數(shù)。
優(yōu)選地,替換模塊包括:確定子模塊,用于確定用于執(zhí)行替換操作的指令屬于長跳轉(zhuǎn)指令;獲取子模塊,用于獲取用于執(zhí)行替換操作的指令中的用于控制PC指針轉(zhuǎn)移過程的指令;替換子模塊,用于將用于控制PC指針轉(zhuǎn)移過程的指令替換為帶索引值的非法指令。
優(yōu)選地,獲取子模塊包括:搜索單元,用于在用于執(zhí)行替換操作的指令中搜索長跳轉(zhuǎn)指令,得到用于控制PC指針轉(zhuǎn)移過程的指令。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于中興通訊股份有限公司,未經(jīng)中興通訊股份有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210018144.0/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 上一篇:一種望遠(yuǎn)鏡
- 下一篇:一種高可靠單向閥





