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

一種基于中間輔助函數(shù)的軟件動態(tài)升級方法及系統(tǒng)的制作方法

文檔序號:9765833閱讀:430來源:國知局
一種基于中間輔助函數(shù)的軟件動態(tài)升級方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明屬于云軟件可靠性研究中的安全領(lǐng)域,更具體地,涉及一種基于中間輔助函數(shù)的軟件動態(tài)升級方法及系統(tǒng)。
【背景技術(shù)】
[0002]軟件在使用過程中需要不斷的升級更新來修復漏洞和添加功能,然而傳統(tǒng)的軟件更新需要先關(guān)閉軟件,更新完成后再重新啟動軟件。這樣一方面軟件服務會宕機一段時間,另一方面軟件服務將會丟失更新前的狀態(tài)。這對于需要7/24小時的軟件服務而言,無疑是降低了服務的可用性。但是如果不采用更新的話,無疑會降低軟件的安全性和服務可靠性。針對這個問題,軟件動態(tài)升級方法能夠在程序不停止服務的情況下完成程序的更新升級工作,并且能夠保證軟件更新前后服務狀態(tài)不丟失,從而提高系統(tǒng)的可用性和可靠性。
[0003]現(xiàn)有的動態(tài)軟件升級方法中,針對正在調(diào)用中函數(shù)的更新,一般有兩種方法,一種是等待待更新函數(shù)返回后再進行更新。另一種方法是基于安全更新點和堆棧重構(gòu)的方法來完成更新,即等待線程執(zhí)行到函數(shù)中的某個安全更新點時,對線程的函數(shù)棧進行堆棧重構(gòu)工作,使舊版本函數(shù)的函數(shù)棧轉(zhuǎn)換成新版本函數(shù)的函數(shù)棧,同時使線程跳轉(zhuǎn)到安全更新點對應的新版本函數(shù)位置來進行更新工作。
[0004]然而,上述兩種方法都存在一定的不足和局限性。(I)等待待更新函數(shù)返回后再進行更新的方法無法更新一些不會返回的函數(shù),例如主循環(huán)函數(shù),調(diào)度函數(shù)等等,這些函數(shù)會一直處入函數(shù)棧中,如果一直得不到更新也會存在安全隱患;(2)基于檢查點和堆棧重構(gòu)的方法雖然可以在函數(shù)調(diào)用時更新函數(shù),但是,在多線程程序中,很難使所有線程都達到安全更新點。目前有些方法是借助編譯器使程序的所有線程可達到安全檢查點。然而,這種方法只能針對于特定編譯器編譯出的程序,不能對通用編譯器編譯出的一般程序進行升級更新工作。另外有一些方法采取阻塞線程,使線程都到達檢查點后再更新,但是這種方法可能導致死鎖問題,雖然可以在死鎖處強行更新,但被死鎖阻塞的線程可能處于不安全的更新位置,此時如果強行更新會影響程序的安全性和正確性。而堆棧重構(gòu)的方法對于某些更新往往只有很少的改動。有的動態(tài)更新方法的安全更新點只能適用于單線程的程序,而多線程程序無法同時到達安全更新點,從而無法對多線程程序?qū)嵭袆討B(tài)更新。
[0005]使用堆棧重構(gòu)更新調(diào)用層次很深的函數(shù)(例如遞歸函數(shù)中)開銷是很大的,可能函數(shù)棧只有上層的數(shù)個函數(shù)有改動需要更新,但是堆棧重構(gòu)需要重新構(gòu)造所有堆棧,并且堆棧重構(gòu)時程序必須暫停運行。多線程程序中每個線程都有自己獨立的棧,如果采用堆棧重構(gòu)的方法,不僅更新時間會變長,更嚴重的是更新過程中程序會暫停較長時間。
[0006]綜上所述,現(xiàn)有的動態(tài)軟件升級系統(tǒng)的方案存在以下不足:
[0007]有的動態(tài)軟件升級方法(polus)只能更新不處于函數(shù)調(diào)用棧中的函數(shù),無法對正在執(zhí)行的函數(shù)進行實時更新,如果一些無法在短時間內(nèi)返回的函數(shù),如主循環(huán)函數(shù)和調(diào)度函數(shù),將無法更新到下一個版本。有的動態(tài)升級方法(upstare)需要特定編譯器支持,所以無法對使用通用編譯器編譯的程序進行動態(tài)更新。有的動態(tài)軟件升級方法(Kitsune)以進程為更新單元,在更新過程中需要存儲新版本的全部代碼數(shù)據(jù)而導致額外開銷較大,而實際更新往往只有很少的改動。有的動態(tài)更新方法的安全更新點只能適用于單線程的程序,而多線程程序無法同時到達安全更新點,從而無法對多線程程序?qū)嵭袆討B(tài)更新。

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

[0008]針對現(xiàn)有技術(shù)的缺陷或改進需求,本發(fā)明提供了一種基于中間輔助函數(shù)的軟件動態(tài)升級方法及系統(tǒng),其目的在于,解決現(xiàn)有針對已經(jīng)部署的多線程應用程序進行動態(tài)升級方法中出現(xiàn)的上述局限和不足,保證了多線程應用程序動態(tài)更新的安全性、實時性和有效性。
[0009]為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提出了一種基于中間輔助函數(shù)的軟件動態(tài)升級方法,其特征在于,所述方法包括:
[0010](I)獲取并整合舊版本代碼源文件和新版本代碼源文件,得到整合后的舊版本代碼源文件和新版本代碼源文件;
[0011](2)通過對比整合后的舊版本代碼源文件和新版本代碼源文件,生成初級動態(tài)升級補??;
[0012](3)靜態(tài)分析對比整合后的舊版本代碼源文件和新版本代碼源文件中的待更新函數(shù),分析待更新函數(shù)的語義,生成函數(shù)語義映射表,同時根據(jù)待更新函數(shù),生成中間輔助函數(shù);
[0013](4)根據(jù)用戶的初始化請求,將步驟(2)中生成的初級動態(tài)升級補丁注入到正在運行的待更新程序中;
[0014](5)注入動態(tài)升級補丁后,根據(jù)待更新函數(shù)符號名和待更新靜態(tài)變量符號名獲得待更新程序中對應的待更新函數(shù)和待更新靜態(tài)變量地址;
[0015](6)根據(jù)用戶發(fā)出的更新請求,暫停所有與更新相關(guān)的進程,并根據(jù)獲取的待更新靜態(tài)變量地址對待更新靜態(tài)變量進行更新;同時,查看待更新函數(shù)是否位于函數(shù)調(diào)用棧,若是,則利用中間輔助函數(shù)對位于函數(shù)調(diào)用棧的待更新函數(shù)進行更新;否則直接對未在函數(shù)調(diào)用棧的待更新函數(shù)進行更新;
[0016](7)恢復因更新而被暫停的進程,更新過程結(jié)束。
[0017]作為進一步優(yōu)選的,所述步驟(3)具體包括:
[0018](3-1)分析待更新函數(shù)的語義,獲取并記錄待更新函數(shù)的安全更新指令集合,生成函數(shù)語義映射表;
[0019](3-2)將待更新函數(shù)的參數(shù)作為中間輔助函數(shù)的參數(shù),構(gòu)造生成中間輔助函數(shù),所述中間輔助函數(shù)包含控制內(nèi)容、待更新函數(shù)新版本內(nèi)容和待更新函數(shù)舊版本內(nèi)容;其中,
[0020]所述控制內(nèi)容用于將待更新函數(shù)舊版本的局部變量和參數(shù)轉(zhuǎn)換成新版本的局部變量和參數(shù),還用于根據(jù)運行時線程執(zhí)行地址來判斷該線程是否處于安全更新指令集合,若是,則跳轉(zhuǎn)入待更新函數(shù)新版本內(nèi)容,執(zhí)行待更新函數(shù)新版本內(nèi)容后返回;否則,跳轉(zhuǎn)入待更新函數(shù)舊版本內(nèi)容,當執(zhí)行到安全更新指令集合中任意一條指令,則跳轉(zhuǎn)入待更新函數(shù)新版本內(nèi)容;
[0021](3-3)對所述中間輔助函數(shù)的待更新函數(shù)舊版本內(nèi)容進行修改,使其利用轉(zhuǎn)換函數(shù)訪問新版本數(shù)據(jù)。
[0022]作為進一步優(yōu)選的,若一段指令中任意一條指令前的所有執(zhí)行路徑都能保證新舊版本語義一致,則該段指令為安全更新指令集合。
[0023]作為進一步優(yōu)選的,所述步驟(6)具體包括:
[0024](6-1)根據(jù)用戶發(fā)出的更新請求,暫停所有與更新相關(guān)的進程,將所有的舊版本待更新靜態(tài)變量轉(zhuǎn)換成新版本靜態(tài)變量;
[0025](6-2)查看待更新函數(shù)是否位于函數(shù)調(diào)用棧,若是,根據(jù)步驟(3)的函數(shù)語義映射表,修改線程當前執(zhí)行位置后的下一條二進制指令,將線程當前執(zhí)行位置入棧,然后跳轉(zhuǎn)到步驟(3)中生成中間輔助函數(shù)的入口地址,利用中間輔助函數(shù)進行更新;否則,對于未處于函數(shù)調(diào)用棧的待更新函數(shù),使用修改函數(shù)入口地址的方法進行更新。
[0026]作為進一步優(yōu)選的,所述方法還包括:
[0027](I)在程序更新前保存待更新程序的檢查點;
[0028](2)在更新過程中,通過監(jiān)控程序?qū)崟r監(jiān)控待更新程序狀態(tài),若待更新程序發(fā)生異常時,使用所述檢查點進行回滾,將其還原到更新之前的狀態(tài)。
[0029]按照本發(fā)明的另一個方面,提出了一種基于中間輔助函數(shù)的軟件動態(tài)升級系統(tǒng),其特征在于,所述系統(tǒng)包括:
[0030]整合模塊,用于獲取并整合舊版本代碼源文件和新版本代碼源文件,得到整合后的舊版本代碼源文件和新版本代碼源文件;
[0031 ]補丁生成模塊,用于通過對比整合后的舊版本代碼源文件和新版本代碼源文件,生成初級動態(tài)升級補??;
[0032]分析模塊,用于靜態(tài)分析對比整合后的舊版本代碼源文件和新版本代碼源文件中的待更新函數(shù),分析待更新函數(shù)的語義,生成函數(shù)語義映射表,同時用于根據(jù)待更新函數(shù),生成中間輔助函數(shù);
[0033]注入模塊,用于根據(jù)用戶的初始化請求,將生成的初級動態(tài)升級補丁注入到正在運行的待更新程序中;
[0034]獲取模塊,用于在注入動態(tài)升級補丁后,根據(jù)待更新函數(shù)符號名和待更新靜態(tài)變量符號名獲得待更新程序中對應的待更新函數(shù)和待更新靜態(tài)變量地址;
[0035]更新模塊,用于根據(jù)用戶發(fā)出的更新請求,暫停所有與更新相關(guān)的進程,并根據(jù)獲取的待更新靜態(tài)變量地址對待更新靜態(tài)變量進行更新;同時,查看待更新函數(shù)是
當前第1頁1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
石家庄市| 故城县| 山丹县| 中江县| 张家川| 介休市| 和政县| 西乌珠穆沁旗| 来凤县| 静安区| 博爱县| 溧水县| 文昌市| 周至县| 清远市| 肥西县| 石嘴山市| 桃源县| 景宁| 全椒县| 安仁县| 红安县| 巴林左旗| 贵德县| 金塔县| 望谟县| 杨浦区| 柏乡县| 崇左市| 贵溪市| 廊坊市| 通化县| 上林县| 韶关市| 东港市| 镇江市| 宝应县| 曲周县| 嵊州市| 大同市| 邮箱|