[發明專利]補丁加載方法及裝置有效
| 申請號: | 201410033575.3 | 申請日: | 2014-01-23 |
| 公開(公告)號: | CN103744709B | 公開(公告)日: | 2017-02-15 |
| 發明(設計)人: | 劉中柱 | 申請(專利權)人: | 華為技術有限公司 |
| 主分類號: | G06F9/445 | 分類號: | G06F9/445 |
| 代理公司: | 北京同立鈞成知識產權代理有限公司11205 | 代理人: | 劉芳 |
| 地址: | 518129 廣東*** | 國省代碼: | 廣東;44 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 補丁 加載 方法 裝置 | ||
技術領域
本發明實施例涉及通信技術,尤其涉及一種補丁加載方法及裝置。
背景技術
應用程序是為了完成某項或某幾項特定任務而被開發運行于操作系統之上的計算機程序。每一個應用程序運行于獨立的進程,且擁有自己獨立的地址空間。但應用程序在應用過程中可能存在一定的缺陷,需后續維護時編寫修復該缺陷的程序作為補丁代碼,進程運行該應用程序時加載補丁代碼,以保證進程順利運行。
目前的補丁加載方案,通常先離線將補丁代碼編譯鏈接為目標文件;再以待修復軟件的符號絕對地址為依據,將目標文件制作成待修復軟件中原有函數和補丁代碼中補丁函數的替換對應關系的絕對地址鏡像文件;待絕對地址鏡像文件被加載到設備后,根據上述替換對應關系確定需要打補丁的原有函數,以及原有函數和補丁函數的地址,并將原有函數的入口指令修改為跳轉指令,跳轉到補丁函數入口處,從而實現在中央處理器(Central?Processing?Unit,簡稱:CPU)執行到原有函數時,補丁函數將被執行。
對于多版本應用程序,采用上述補丁加載方案進行補丁加載時,生成多份絕對地址鏡像文件,導致補丁代碼管理和維護的難度。
發明內容
本發明實施例提供一種補丁加載方法及裝置,以解決現有的補丁加載方案中補丁代碼管理和維護難度高的問題。
第一方面,本發明實施例提供一種補丁加載方法,包括:
編譯補丁代碼生成可重定位的動態鏈接庫,所述補丁代碼為以補丁函數為單位的指令;
解析包含所述補丁代碼的補丁鏡像文件,獲取所述補丁鏡像文件中的重定位函數信息,建立所述補丁鏡像文件和目標進程的連接關系,所述目標進程為加載所述補丁代碼后的應用程序在運行時所處的進程;
根據所述補丁鏡像文件和目標進程的連接關系,修改原有函數入口指令,跳轉執行所述補丁函數。
結合第一方面,在第一方面的第一種可能的實現方式中,所述解析包含所述補丁代碼的補丁鏡像文件,獲取所述補丁鏡像文件中的重定位函數信息,建立所述補丁鏡像文件和目標進程的連接關系之前,所述方法還包括:
找出目標進程中加載的鏡像文件,采用可執行的鏈接格式ELF解析所述鏡像文件,獲取所述鏡像文件中的原有函數和原有全局變量對應的名稱和絕對地址,得到所述目標進程的符號表,所述符號表包含所述原有函數和所述原有全局變量對應的名稱。
結合第一方面的第一種可能的實現方式,在第一方面的第二種可能的實現方式中,所述解析包含所述補丁代碼的補丁鏡像文件,獲取所述補丁鏡像文件中的重定位函數信息,建立所述補丁鏡像文件和目標進程的連接關系,包括:
分析所述補丁鏡像文件,記錄所述補丁鏡像文件中的補丁函數和補丁全局變量的名稱和相對地址;
分析所述補丁鏡像文件中的重定位段,獲取重定位函數和重定位全局變量的名稱和相對地址;
根據所述重定位函數和重定位全局變量的名稱和相對地址,建立所述補丁鏡像文件和目標進程的連接關系。
結合第一方面的第二種可能的實現方式,在第一方面的第三種可能的實現方式中,所述根據所述補丁鏡像文件和目標進程的連接關系,修改原有函數入口指令,跳轉執行所述補丁函數,包括:
在所述目標進程的符號表中,查找所述重定位函數名稱和/或所述重定位全局變量名稱;
若確定所述重定位函數名稱和所述重定位全局變量名稱存在于所述目標進程中,則將其標記為目標進程內函數或目標進程內變量;
將所述目標進程內函數和/或目標進程內變量從所述重定位段中移除,并調用系統的動態鏈接庫加載函數重定位所述動態鏈接庫中的符號;以及,
根據所述補丁鏡像文件的加載內存地址及所述目標進程內函數和所述目標進程內變量的相對地址,得到所述目標進程內函數和所述目標進程內變量的重定位地址并寫入;
修改所述原有函數的入口指令,跳轉執行所述補丁函數。
結合第一方面、第一方面的第一種至第三種可能的實現方式中的任意一種,在第一方面的第四種可能的實現方式中,所述根據所述補丁鏡像文件和目標進程的連接關系,修改所述原有函數的入口指令,跳轉執行所述補丁函數之前,所述方法還包括:
調用補丁初始化入口函數,完成所述補丁鏡像文件的初始化。
第二方面,本發明實施例提供一種補丁加載裝置,包括:
編譯模塊,用于編譯補丁代碼生成可重定位的動態鏈接庫,所述補丁代碼為以補丁函數為單位的指令;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于華為技術有限公司,未經華為技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410033575.3/2.html,轉載請聲明來源鉆瓜專利網。





