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

一種嵌入式系統(tǒng)軟件注入熱補丁的方法及系統(tǒng)的制作方法

文檔序號:8487685閱讀:750來源:國知局
一種嵌入式系統(tǒng)軟件注入熱補丁的方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及嵌入式系統(tǒng)軟件補丁技術(shù)領(lǐng)域,具體來講是一種嵌入式系統(tǒng)軟件注入熱補丁的方法及系統(tǒng)。
【背景技術(shù)】
[0002]嵌入式系統(tǒng)應(yīng)用非常廣泛,家用DVD、機頂盒、通信設(shè)備中的交換機、路由器等都使用了嵌入式系統(tǒng)。嵌入式系統(tǒng)軟件在嵌入式系統(tǒng)中具有舉足輕重的作用,用戶對嵌入式系統(tǒng)軟件的連續(xù)運行時間和穩(wěn)定性要求很高。如果嵌入式系統(tǒng)軟件存在一般性的軟件錯誤,采用熱補丁技術(shù)進行在線修改軟件的錯誤,能提高軟件的連續(xù)運行時間和穩(wěn)定性。
[0003]目前嵌入式系統(tǒng)軟件注入熱補丁的實現(xiàn)方式主要有以下兩種:
[0004](I)在編譯程序的時候,在每一個函數(shù)首條指令的前面(指令地址遞減方向)預(yù)留一定的空白區(qū)域,用以安排該函數(shù)的跳轉(zhuǎn)指令序列,跳轉(zhuǎn)到該函數(shù)的補丁函數(shù)。利用此種方法可以實現(xiàn)在線修復(fù)軟件的錯誤,但是這種方式需要修改編譯器,提供熱補丁支持,同時每一個函數(shù)都預(yù)留一定的空白區(qū)域,有點浪費內(nèi)存空間。
[0005](2)直接在函數(shù)的頭部區(qū)域插入該函數(shù)的跳轉(zhuǎn)指令序列,跳轉(zhuǎn)到該函數(shù)的補丁函數(shù)。利用此種方法同樣可以實現(xiàn)在線修復(fù)軟件的錯誤,但是這種方式需要停止除本線程之外的其他所有線程的運行,待插入該函數(shù)的跳轉(zhuǎn)指令序列完成之后再恢復(fù)停止運行的線程,因此采用該種方法會影響程序的運行,補丁的啟用過程時間較長。

【發(fā)明內(nèi)容】

[0006]本發(fā)明的目的是為了克服上述【背景技術(shù)】的不足,提供一種嵌入式系統(tǒng)軟件注入熱補丁的方法及系統(tǒng),不影響系統(tǒng)程序的運行,也無需修改編譯器;且內(nèi)存空間浪費少,補丁啟用時間短。
[0007]為達到以上目的,本發(fā)明提供一種嵌入式系統(tǒng)軟件注入熱補丁的方法,包括以下步驟:
[0008]S1、在軟件的程序編譯階段,在軟件程序的各模塊代碼段中預(yù)留出若干二級跳轉(zhuǎn)表預(yù)留區(qū);在軟件的補丁文件編譯階段,在補丁文件的各模塊代碼段中預(yù)留出若干三級跳轉(zhuǎn)表預(yù)留區(qū),轉(zhuǎn)入步驟S2;
[0009]S2、將離每個原函數(shù)最近的二級跳轉(zhuǎn)表預(yù)留區(qū),作為該原函數(shù)的二級跳轉(zhuǎn)指令存儲空間;將離每個補丁函數(shù)最近的三級跳轉(zhuǎn)表預(yù)留區(qū),作為該補丁函數(shù)的三級跳轉(zhuǎn)指令存儲空間;
[0010]生成每個原函數(shù)的二級跳轉(zhuǎn)指令序列,并存儲于對應(yīng)的二級跳轉(zhuǎn)指令存儲空間內(nèi);生成每個補丁函數(shù)的三級跳轉(zhuǎn)指令序列,并存儲于對應(yīng)的三級跳轉(zhuǎn)指令序列空間內(nèi),轉(zhuǎn)入步驟S3 ;
[0011]S3、將每個原函數(shù)的首條指令修改為一級跳轉(zhuǎn)指令;當系統(tǒng)運行每個原函數(shù)時,根據(jù)該原函數(shù)的一級跳轉(zhuǎn)指令,由原函數(shù)跳轉(zhuǎn)至對應(yīng)二級跳轉(zhuǎn)指令序列的首地址;根據(jù)該二級跳轉(zhuǎn)指令序列,由該二級跳轉(zhuǎn)指令序列跳轉(zhuǎn)至對應(yīng)三級跳轉(zhuǎn)指令序列的首地址;根據(jù)該三級跳轉(zhuǎn)指令序列,最終由三級跳轉(zhuǎn)指令序列到函數(shù)補丁的跳轉(zhuǎn)。
[0012]在上述技術(shù)方案的基礎(chǔ)上,步驟S2包括以下步驟:
[0013]S201、查找并記錄補丁文件中的補丁函數(shù)后,將補丁文件加載至系統(tǒng)中,轉(zhuǎn)入步驟S202 ;
[0014]S202、記錄所有補丁函數(shù)的地址;根據(jù)補丁函數(shù)名查找對應(yīng)原函數(shù)的地址,轉(zhuǎn)入步驟 S203 ;
[0015]S203、在軟件程序中查找二級跳轉(zhuǎn)表預(yù)留區(qū),記錄二級跳轉(zhuǎn)表預(yù)留區(qū)信息,轉(zhuǎn)入步驟 S204 ;
[0016]S204、在補丁文件中查找三級跳轉(zhuǎn)表預(yù)留區(qū),記錄三級跳轉(zhuǎn)表預(yù)留區(qū)信息,轉(zhuǎn)入步驟 S205 ;
[0017]S205、根據(jù)原函數(shù)的地址、二級跳轉(zhuǎn)表預(yù)留區(qū)信息,將離每個原函數(shù)最近的二級跳轉(zhuǎn)表預(yù)留區(qū)作為該原函數(shù)的二級跳轉(zhuǎn)指令存儲空間;根據(jù)補丁函數(shù)的地址、三級跳轉(zhuǎn)表預(yù)留區(qū)信息,將離每個補丁函數(shù)最近的三級跳轉(zhuǎn)表預(yù)留區(qū)作為該補丁函數(shù)的三級跳轉(zhuǎn)指令存儲空間,轉(zhuǎn)入步驟S206 ;
[0018]S206、根據(jù)每個原函數(shù)的二級跳轉(zhuǎn)指令存儲空間的地址、以及對應(yīng)的補丁函數(shù)的三級跳轉(zhuǎn)指令存儲空間的地址,生成每個原函數(shù)的二級跳轉(zhuǎn)指令序列,并存儲于對應(yīng)的二級跳轉(zhuǎn)指令存儲空間內(nèi);根據(jù)補丁函數(shù)地址、以及該補丁函數(shù)的三級跳轉(zhuǎn)指令存儲空間的地址,生成每個補丁函數(shù)的三級跳轉(zhuǎn)指令序列,并存儲于對應(yīng)的三級跳轉(zhuǎn)指令序列空間內(nèi)。
[0019]在上述技術(shù)方案的基礎(chǔ)上,步驟SI中所述預(yù)留出若干二級跳轉(zhuǎn)表預(yù)留區(qū)的同時,需為二級跳轉(zhuǎn)表預(yù)留區(qū)定義一個標示符;所述預(yù)留出若干三級跳轉(zhuǎn)表預(yù)留區(qū)的同時,需為三級跳轉(zhuǎn)表預(yù)留區(qū)定義一個標示符;
[0020]步驟S201中所述將記錄有補丁函數(shù)的補丁文件加載至系統(tǒng)中時,系統(tǒng)將自動為補丁文件的各模塊生成對應(yīng)的補丁文件模塊名;
[0021]步驟S203具體包括以下步驟:獲取并分析軟件程序符號表中的一個符號信息;
[0022]若符號名為二級跳轉(zhuǎn)表預(yù)留區(qū)標示符、且符號所在模塊的模塊名不是補丁文件模塊名,則確定查找到二級跳轉(zhuǎn)表預(yù)留區(qū),記錄該二級跳轉(zhuǎn)表預(yù)留區(qū)地址、模塊名;判斷軟件程序符號表是否全部查找完畢,若是,轉(zhuǎn)到步驟S204,若否,重新執(zhí)行步驟S203 ;
[0023]若符號名不為二級跳轉(zhuǎn)表預(yù)留區(qū)標示符、或者符號所在模塊的模塊名是補丁文件模塊名,則判斷軟件程序符號表是否全部查找完畢,若是,轉(zhuǎn)到步驟S204,若否,重新執(zhí)行步驟 S203。
[0024]在上述技術(shù)方案的基礎(chǔ)上,步驟S204具體包括以下步驟:獲取并分析補丁文件符號表中的一個符號信息;
[0025]若符號名為三級跳轉(zhuǎn)表預(yù)留區(qū)標示符、且符號所在模塊的模塊名是補丁文件模塊名,則確定查找到三級跳轉(zhuǎn)表預(yù)留區(qū),記錄該三級跳轉(zhuǎn)表預(yù)留區(qū)地址、模塊名;判斷補丁文件符號表是否全部查找完畢,若是,轉(zhuǎn)到步驟S205,若否,重新執(zhí)行步驟S204 ;
[0026]若符號名不為三級跳轉(zhuǎn)表預(yù)留區(qū)標示符、或者符號所在模塊的模塊名不是補丁文件模塊名,則判斷補丁文件符號表是否全部查找完畢,若是,轉(zhuǎn)到步驟S205,若否,重新執(zhí)行步驟S204。
[0027]在上述技術(shù)方案的基礎(chǔ)上,步驟S201中所述補丁函數(shù)為符合補丁函數(shù)命名規(guī)則的函數(shù),所述補丁函數(shù)命名規(guī)則為:補丁函數(shù)名=原函數(shù)名+補丁標示+用戶自定義項。
[0028]在上述技術(shù)方案的基礎(chǔ)上,步驟S2中所述二級跳轉(zhuǎn)指令序列包括:將返回地址寄存器的值壓入堆棧的指令、將跳轉(zhuǎn)指令需要使用的寄存器壓入堆棧的指令、將三級跳轉(zhuǎn)指令序列的首地址賦值給寄存器的指令、跳轉(zhuǎn)到三級跳轉(zhuǎn)指令序列首地址的指令;所述三級跳轉(zhuǎn)指令序列包括:還原二級跳轉(zhuǎn)指令序列所使用的寄存器的值的指令、還原返回地址寄存器的值的指令、跳轉(zhuǎn)至補丁函數(shù)首條地址的指令。
[0029]在上述技術(shù)方案的基礎(chǔ)上,步驟SI中,通過修改軟件程序的鏈接腳本,在軟件程序的各模塊代碼段中預(yù)留出若干二級跳轉(zhuǎn)表預(yù)留區(qū);通過修改補丁文件的鏈接腳本,在補丁文件的各模塊代碼段中預(yù)留出若干三級跳轉(zhuǎn)表預(yù)留區(qū)。
[0030]在上述技術(shù)方案的基礎(chǔ)上,步驟S3之后還包括熱補丁去激活的步驟:將原函數(shù)的首條指令還原為未修改成一級跳轉(zhuǎn)指令之前的原指令。
[0031]本發(fā)明還提供一種嵌入式系統(tǒng)軟件注入熱補丁的系統(tǒng),包括跳轉(zhuǎn)表預(yù)留區(qū)管理模塊、熱補丁安裝模塊和熱補丁激活模塊,其中:
[0032]所述跳轉(zhuǎn)表預(yù)留區(qū)管理模塊用于:在軟件的程序編譯階段,在軟件程序的各模塊代碼段中預(yù)留出若干二級跳轉(zhuǎn)表預(yù)留區(qū);在軟件的補丁文件編譯階段,在補丁文件的各模塊代碼段中預(yù)留出若干三級跳轉(zhuǎn)表預(yù)留區(qū);向熱補丁安裝模塊發(fā)送熱補丁安裝信號;
[0033]所述熱補丁安裝模塊用于:收到熱補丁安裝信號后,將離每個原函數(shù)最近的二級跳轉(zhuǎn)表預(yù)留區(qū),作為該原函數(shù)的二級跳轉(zhuǎn)指令存儲空間;將離每個補丁函數(shù)最近的三級跳轉(zhuǎn)表預(yù)留區(qū),作為該補丁函數(shù)的三級跳轉(zhuǎn)指令存儲空間;生成每個原函數(shù)的二級跳轉(zhuǎn)指令序列,并存儲于對應(yīng)的二級跳轉(zhuǎn)指令存儲空間內(nèi);生成每個補丁函數(shù)的三級跳轉(zhuǎn)指令序列,并存儲于對應(yīng)的三級跳轉(zhuǎn)指令序列空間內(nèi);向熱補丁激活模塊發(fā)送熱補丁激活信號;
[0034]所述熱補丁激活模塊用于:收到熱補丁激活信號后,將每個原函數(shù)的首條指令修改為一級跳轉(zhuǎn)指令;當系統(tǒng)運行每個原函數(shù)時,先根據(jù)該原函數(shù)的一級跳轉(zhuǎn)指令,實現(xiàn)原函數(shù)到對應(yīng)二級跳轉(zhuǎn)指令序列的跳轉(zhuǎn);再根據(jù)該二級跳轉(zhuǎn)指令序列,實現(xiàn)二級跳轉(zhuǎn)指令序列到對應(yīng)三級跳轉(zhuǎn)指令序列的跳轉(zhuǎn);最后,根據(jù)該三級跳轉(zhuǎn)指令序列,實現(xiàn)三級跳轉(zhuǎn)指令序列到函數(shù)補丁的跳轉(zhuǎn)。
[0035]在上述技術(shù)方案的基礎(chǔ)上,該系統(tǒng)還包括熱補丁去激活模塊,所述熱補丁去激活模塊用于:將原函數(shù)的首條指令還原為未修改成一級跳轉(zhuǎn)指令之前的原指令。
[0036]本發(fā)明的有益效果在于:<
當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
临朐县| 大田县| 彩票| 青冈县| 吉安市| 中山市| 隆林| 沙河市| 光山县| 甘南县| 永和县| 沈丘县| 荥阳市| 措勤县| 太原市| 连云港市| 吉隆县| 平安县| 巩留县| 曲松县| 临高县| 呼图壁县| 沿河| 安宁市| 翁牛特旗| 加查县| 陈巴尔虎旗| 化德县| 丰顺县| 织金县| 华安县| 绥德县| 高碑店市| 黑水县| 田东县| 莲花县| 二手房| 利津县| 临夏县| 宁阳县| 怀宁县|