指令重組方法及裝置制造方法
【專利摘要】本發(fā)明提供一種運行時指令重組方法,包括:步驟1、緩存指令運行環(huán)境;步驟2、獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計算下一條即將運行的指令地址,該地址為第一地址;步驟3、根據(jù)第一地址獲取待調(diào)度機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;步驟4、替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù);步驟5、在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺的入口地址;和步驟6、恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
【專利說明】指令重組方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機安全領(lǐng)域,尤其涉及一種指令重組方法及裝置。
【背景技術(shù)】
[0002]現(xiàn)有的電子信息安全領(lǐng)域包括系統(tǒng)安全、數(shù)據(jù)安全和設(shè)備安全三個子領(lǐng)域。
[0003]在數(shù)據(jù)安全領(lǐng)域內(nèi),一般采用下面三種技術(shù)確保數(shù)據(jù)安全:(I)數(shù)據(jù)內(nèi)容安全技術(shù),包括數(shù)據(jù)加密解密技術(shù)和端到端數(shù)據(jù)加密技術(shù),保障數(shù)據(jù)在存儲和傳輸過程中內(nèi)容不被非法讀?。?2)數(shù)據(jù)安全轉(zhuǎn)移技術(shù),包括防止非法拷貝、打印或其它輸出,保障數(shù)據(jù)在使用和轉(zhuǎn)移過程中的安全;(3)網(wǎng)絡(luò)阻斷技術(shù),包括網(wǎng)絡(luò)物理阻斷和設(shè)置網(wǎng)絡(luò)屏障等技術(shù)。
[0004]根據(jù)相關(guān)分析,目前針對計算機的所有危害總有效偵測能力最多在50%左右;由于上述技術(shù)在應(yīng)對計算機內(nèi)核病毒、木馬、操作系統(tǒng)漏洞、系統(tǒng)后門以及人為泄密時能力不足,事實上任何計算設(shè)備(例如計算機、手持通信設(shè)備等)都可能存在惡意代碼。一旦惡意代碼進入終端系統(tǒng),上述的加密技術(shù)、防拷貝技術(shù)以及網(wǎng)絡(luò)阻斷技術(shù)在這種情況下將失去作用?,F(xiàn)有的黑客技術(shù)可以利用系統(tǒng)漏洞或系統(tǒng)后門穿透上述安全技術(shù)并植入惡意代碼,并利用惡意代碼取得用戶數(shù)據(jù)。上述技術(shù)更無法防范涉密人員的主動或被動泄密,例如,內(nèi)部人員可以攜帶存儲設(shè)備,從內(nèi)部網(wǎng)絡(luò)或終端上下載所需的資料并帶走存儲設(shè)備,導(dǎo)致內(nèi)部泄密;又例如,內(nèi)部人員可以直接將計算設(shè)備帶走。
[0005]綜上,防拷貝技術(shù)無法保證涉密信息在終端不被非法存儲?;诰W(wǎng)絡(luò)過濾無法確保涉密信息不丟失。涉密人員可通過惡意代碼或惡意工具造成泄密,還可能因涉密設(shè)備或存儲介質(zhì)失控造成泄密。
【發(fā)明內(nèi)容】
[0006]本發(fā)明提供一種指令重組方法及裝置,實現(xiàn)運行時指令的捕獲和重組。
[0007]根據(jù)本發(fā)明一個方面,提供一種運行時指令重組方法,包括:
[0008]步驟1、緩存指令運行環(huán)境;
[0009]步驟2、獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計算下一條即將運行的指令地址,該地址為第一地址;
[0010]步驟3、根據(jù)第一地址獲取待調(diào)度機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0011]步驟4、替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù);
[0012]步驟5、在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺的入口地址;和
[0013]步驟6、恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0014]可選的,步驟3中,根據(jù)第一地址獲取待調(diào)度機器指令片段包括:
[0015]從第一地址開始,獲取待調(diào)度的一段機器指令,將該段機器指令進行反匯編;[0016]檢查反匯編結(jié)果中是否包含跳轉(zhuǎn)指令,如果不包含則繼續(xù)獲取后面一段待調(diào)度的機器指令,直到匹配到跳轉(zhuǎn)指令為止,該跳轉(zhuǎn)指令為第一跳轉(zhuǎn)指令;其中,第一跳轉(zhuǎn)指令以及之前的所有指令組成待調(diào)度指令片段。
[0017]可選的,在步驟5和步驟6之間,還包括:
[0018]將生成的重組后的匯編代碼通過匯編器生成對應(yīng)的機器碼。
[0019]可選的,在步驟2和步驟3之間,還包括:
[0020]利用所述第一地址查找地址對應(yīng)表;所述地址對應(yīng)表用于表示待調(diào)度的機器指令片段是否具有已保存的重組指令片段;
[0021]如果找到相應(yīng)的記錄,恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到紀(jì)錄中的保存地址繼續(xù)執(zhí)行。
[0022]可選的,如果在地址對應(yīng)表中沒有找到相應(yīng)的紀(jì)錄,在步驟5之后,還包括:
[0023]利用重組指令片段的地址與所述第一地址在地址對應(yīng)表中建立一條記錄。
[0024]可選的,在步驟3之后、步驟5之前,還包括:
[0025]解析所述待調(diào)度機器指令片段,利用指令集匹配所述機器指令片段,得到待處理的目標(biāo)機器指令;
[0026]按照預(yù)定的方式,修改所述目標(biāo)機器指令。
[0027]可選的,所述目標(biāo)指令為存儲/讀取指令;
[0028]按照預(yù)定的方式,修改所述目標(biāo)機器指令包括:修改其中的存儲和讀取地址為安全存儲設(shè)備上的地址。
[0029]可選的,所述目標(biāo)指令為I/O指令;
[0030]按照預(yù)定的方式,修改所述目標(biāo)機器指令包括:將所述I/O指令中的輸入指令全部阻止。
[0031]可選的,所述目標(biāo)指令為網(wǎng)絡(luò)傳輸指令;
[0032]按照預(yù)定的方式,修改所述目標(biāo)機器指令包括:檢驗所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對應(yīng)的遠端計算設(shè)備是否為安全地址(即允許訪問地址);如果不是,阻止所述網(wǎng)絡(luò)傳輸指令。
[0033]根據(jù)本發(fā)明另一個方面,提供一種計算機可讀介質(zhì),所述可讀介質(zhì)中存儲有計算機可執(zhí)行的程序代碼,所述程序代碼用于執(zhí)行上述方法的步驟。
[0034]根據(jù)本發(fā)明又一個方面,提供一種運行時指令重組裝置,包括:
[0035]指令運行環(huán)境緩存和恢復(fù)單元,適于緩存和恢復(fù)指令運行環(huán)境;
[0036]指令獲取單元,與指令運行環(huán)境緩存和恢復(fù)單元耦接,適于獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計算下一條即將運行的指令地址,該地址為第一地址;還適于根據(jù)第一地址獲取待調(diào)度/執(zhí)行的機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;和
[0037]指令重組單元,與指令運行環(huán)境緩存和恢復(fù)單元耦接,適于替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù);還適于在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向運行時指令重組裝置的入口地址。
[0038]可選的,所述的運行時指令重組裝置還包括:[0039]指令檢索單元,適于利用所述第一地址查找地址對應(yīng)表;所述地址對應(yīng)表用于表示待調(diào)度機器指令片段是否具有已保存的重組指令片段;
[0040]如果找到相應(yīng)的記錄,指令檢索單元還適于調(diào)用指令運行環(huán)境緩存和恢復(fù)單元,恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到紀(jì)錄中的保存地址繼續(xù)執(zhí)行;
[0041]如果沒有找到相應(yīng)的記錄,指令檢索單元還適于利用重組指令片段的地址與所述第一地址在地址對應(yīng)表中建立一條記錄。
[0042]可選的,所述指令重組單元還包括:
[0043]指令解析單元,適于利用指令集匹配所述待調(diào)度的機器指令片段,得到待處理的目標(biāo)機器指令;
[0044]指令修改單元,適于按照預(yù)定的方式,修改所述目標(biāo)機器指令。
[0045]可選的,所述目標(biāo)指令為存儲/讀取指令;
[0046]所述指令修改單元適于修改其中的存儲和讀取地址為安全存儲設(shè)備上的地址。
[0047]可選的,所述目標(biāo)指令為I/O指令;
[0048]所述指令修改單元適于將所述I/O指令中的輸入指令全部阻止。
[0049]可選的,所述目標(biāo)指令為網(wǎng)絡(luò)傳輸指令;
[0050]所述指令修改單元適于檢驗所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對應(yīng)的遠端計算設(shè)備是否為安全地址;如果不是,所述指令修改單元適于阻止所述網(wǎng)絡(luò)傳輸指令。
[0051]可選的,所述指令重組單元還包括:
[0052]反匯編單元,適于在指令解析單元解析所述待調(diào)度的機器指令片段之前,反匯編所述待調(diào)度的機器指令片段,生成待調(diào)度的匯編指令片段;
[0053]匯編單元,適于匯編重組后的匯編指令片段,得到機器碼表示的重組指令片段。
[0054]本發(fā)明提供的方法和裝置可以實現(xiàn)運行時指令的捕獲和重組,并且,在獲取到待調(diào)度指令片段后,還可以對其中的機器指令進行分析以及處理,從而不僅可以實現(xiàn)運行時指令捕獲、重組,還可以實現(xiàn)對預(yù)定的目標(biāo)指令的管理。
【專利附圖】
【附圖說明】
[0055]圖1是現(xiàn)有技術(shù)中計算設(shè)備的系統(tǒng)層次示意圖;
[0056]圖2是本發(fā)明一個實施例中提供的運行時指令重組方法的流程圖;
[0057]圖3是本發(fā)明一個實施例中提供的重組指令片段的生成過程示意圖;
[0058]圖4是本發(fā)明另一個實施例中提供的圖2中步驟S102的流程圖;
[0059]圖5是本發(fā)明另一個實施例中提供的運行時指令重組方法的流程圖,利用地址對應(yīng)表保存已經(jīng)重組過的指令片段;
[0060]圖6是本發(fā)明另一個實施例中提供的運行時指令重組方法的流程圖,單獨開辟存儲位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;
[0061]圖7是本發(fā)明另一個實施例中提供的運行時指令重組方法的流程圖,針對非固定長度指令集進行反匯編和匯編處理;
[0062]圖8是本發(fā)明另一個實施例中提供的運行時指令重組方法的流程圖,以壓棧指令替代或記錄第一跳轉(zhuǎn)指令;
[0063]圖9a是本發(fā)明另一個實施例中提供的運行時指令重組方法的流程圖,其中的運行時指令重組方法綜合之前多個實施例中的特征;
[0064]圖9b_9d是圖9a中的運行時指令重組方法在X86體系處理器上運行時的操作過程不意圖;
[0065]圖10是本發(fā)明一個實施例中提供的運行時指令重組裝置結(jié)構(gòu)示意圖;
[0066]圖11是本發(fā)明另一個實施例中提供的運行時指令重組裝置結(jié)構(gòu)示意圖;
[0067]圖12是本發(fā)明另一個實施例中提供的指令重組單元結(jié)構(gòu)示意圖;
[0068]圖13是本發(fā)明另一個實施例中提供的運行時指令重組裝置結(jié)構(gòu)示意圖;
[0069]圖14是本發(fā)明另一個實施例中提供的運行時指令重組裝置結(jié)構(gòu)示意圖。
【具體實施方式】
[0070]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖,對本發(fā)明進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0071]公近
[0072]如圖1所示為現(xiàn)有技術(shù)中計算設(shè)備的系統(tǒng)層次示意圖,從上至下,計算設(shè)備包括:用戶界面層101,應(yīng)用層102,操作系統(tǒng)內(nèi)核層103,硬件映射層104以及硬件層105。
[0073]其中,用戶界面層101是用戶與設(shè)備之間的接口,用戶通過該層與設(shè)備(即設(shè)備的其他層次,例如應(yīng)用層102)進行交互。應(yīng)用層102指應(yīng)用軟件層。
[0074]操作系統(tǒng)內(nèi)核層103是一種基于軟件的邏輯層,一般來講是由軟件數(shù)據(jù)和軟件代碼組成,相比于界面層101和應(yīng)用層102,操作系統(tǒng)內(nèi)核層103的代碼擁有更高的權(quán)限,可以對計算機系統(tǒng)中的各種軟硬件資源進行完整的操作。
[0075]硬件映射層104是一種基于軟件的邏輯層,它一般工作在操作系統(tǒng)內(nèi)核層,擁有與內(nèi)核層相同的權(quán)限。硬件映射層主要是為了解決將不同類型的硬件的操作模式映射為一種統(tǒng)一的上層接口,向上屏蔽硬件的特殊性。一般來說,硬件映射層主要被操作系統(tǒng)內(nèi)核層103使用,來完成對各種硬件的操作。
[0076]硬件層105是指構(gòu)成計算機系統(tǒng)的所有硬件部件。
[0077]用戶通過用戶界面層101 (即處于用戶界面層101的用戶界面)對該計算設(shè)備進行操作并得到圖形化或非圖形化反饋。以保存數(shù)據(jù)的操作為例,其過程包括:
[0078](I)用戶通過某應(yīng)用程序提供的用戶界面101,選擇“保存”功能;
[0079](2)應(yīng)用層102調(diào)用對應(yīng)代碼,將上述用戶操作轉(zhuǎn)化為一個或多個操作系統(tǒng)提供的接口函數(shù),即“保存”操作轉(zhuǎn)化成為對一系列操作系統(tǒng)內(nèi)核層103提供的接口函數(shù)的調(diào)用;
[0080](3)操作系統(tǒng)內(nèi)核層103將每一個操作系統(tǒng)接口函數(shù)轉(zhuǎn)化為一個或多個硬件映射層104提供的接口函數(shù);即“保存”操作轉(zhuǎn)化成為對一系列硬件映射層104提供的接口函數(shù)的調(diào)用;
[0081](4)硬件映射層104將每一個自己提供的接口函數(shù)轉(zhuǎn)化為一個或多個硬件指令調(diào)用;最后,
[0082](5)硬件層105 (例如CPU)接收上述硬件指令調(diào)用并執(zhí)行硬件指令。
[0083]針對該計算設(shè)備,當(dāng)其被惡意代碼侵入后,惡意代碼可以從計算設(shè)備中取得所需數(shù)據(jù),竊取數(shù)據(jù)后其行為模式包括:
[0084](I)存儲行為:將目標(biāo)數(shù)據(jù)內(nèi)容保存到某個存儲位置;
[0085](2)傳輸行為:將竊取的數(shù)據(jù)直接通過網(wǎng)絡(luò)傳輸?shù)街付ǖ哪繕?biāo)地址。
[0086]另外,使用上述計算設(shè)備或信息設(shè)備的人員進行內(nèi)部泄密的行為模式包括:
[0087](I)主動泄密:涉密人員通過主動拷貝、通過惡意工具穿透安全系統(tǒng)、置入木馬等手段直接取得涉密數(shù)據(jù),并進行泄密;
[0088](2)被動泄密:涉密人員使用的電腦或存儲介質(zhì)因保管不善丟失或使用不當(dāng)(例如將涉密裝備直接接入Internet)造成的泄密。
[0089]上述多種泄密方式使得該計算設(shè)備的數(shù)據(jù)安全無法保障。
[0090]發(fā)明人經(jīng)研究發(fā)現(xiàn),計算機運行過程中,CPU地址寄存器保存下一條將要運行的機器指令的地址,例如pc (program counter,程序計數(shù)器)指向的地址;獲取該寄存器中的數(shù)據(jù),并按照該數(shù)據(jù)指向的地址,讀取下一條或者多條將要運行的機器指令,可以實現(xiàn)運行時捕獲機器指令的目的。
[0091]并且,通過修改所述一條或多條機器指令所組成的待調(diào)度指令片段(例如在其中插入額外的跳轉(zhuǎn)指令,本文稱為指令重組),使得在該段指令運行完畢之前重新獲得CPU執(zhí)行權(quán),并再次捕獲下一個待調(diào)度指令片段,可以實現(xiàn)運行時連續(xù)捕獲機器指令的目的。
[0092]并且,在獲取到待調(diào)度指令片段后,還可以對其中的機器指令進行分析以及處理,從而不僅可以實現(xiàn)運行時指令捕獲、重組,還可以實現(xiàn)對預(yù)定的目標(biāo)指令的管理。
[0093]指令重組或指令追蹤
[0094]基于上述分析和發(fā)現(xiàn),本發(fā)明的一個實施例中提供了一種運行時指令重組方法,該方法運行時稱為指令重組平臺。如圖2所示,該方法SlOO包括:
[0095]S101,緩存指令運行環(huán)境;所述指令運行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運行的機器指令的地址,該地址為第一地址;
[0096]S102,獲取待調(diào)度的機器指令片段;其中,待調(diào)度的機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0097]S103,在所述第一跳轉(zhuǎn)指令前,插入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺的入口地址,即執(zhí)行該第二跳轉(zhuǎn)指令后,執(zhí)行步驟 SlOl ;
[0098]S104,將所述地址寄存器中的第一地址修改為第二地址;和
[0099]S105,恢復(fù)所述指令運行環(huán)境。
[0100]在本實施例中,上述運行時指令重組方法在X86架構(gòu)的CPU上執(zhí)行;在本發(fā)明的其他實施例中,上述運行時指令重組方法也可以在MIPS處理器或基于ARM架構(gòu)的處理器上執(zhí)行。本領(lǐng)域普通技術(shù)人員可以理解,上述方法可以在計算設(shè)備中的任何其他類型的指令處理單元上執(zhí)行。
[0101]其中,在步驟SlOl中,所述緩存指令運行環(huán)境可以包括:
[0102]向緩存棧中壓入CPU機器指令運行相關(guān)的寄存器數(shù)據(jù)。
[0103]在本發(fā)明的其他實施例中,緩存或保存指令運行環(huán)境也可以在指定的、默認的其他緩存數(shù)據(jù)結(jié)構(gòu)和地址中進行。
[0104]在步驟SlOl中,所述地址寄存器可以為CPU地址寄存器。[0105]在步驟S102中,待調(diào)度的機器指令片段中最后一條指令為第一跳轉(zhuǎn)指令,待調(diào)度的機器指令片段中只有一條跳轉(zhuǎn)指令,待調(diào)度的機器指令片段包括所述第一跳轉(zhuǎn)指令以及其之前的所有待調(diào)度的機器指令。
[0106]在步驟S103中,在所述待調(diào)度的機器指令片段的最后一條指令(即第一跳轉(zhuǎn)指令JPl)前,插入第二跳轉(zhuǎn)指令JP2,所述JP2指向指令重組平臺的入口地址,生成具有第二地址A"的重組指令片段。
[0107]插入第二跳轉(zhuǎn)指令是為了在CPU運行所述待調(diào)度的機器指令片段時,在JPl運行前,重新開始運行所述指令重組平臺,這樣,指令重組平臺就可以繼續(xù)分析下一段待調(diào)度的機器指令片段,從而通過重復(fù)本方法來完成對所有運行時指令的重組。
[0108]在步驟S105中,恢復(fù)所述指令運行環(huán)境可以包括:
[0109]從緩存棧中彈出指令運行相關(guān)的寄存器數(shù)據(jù);其中地址寄存器保存的跳轉(zhuǎn)指令的目標(biāo)地址已經(jīng)修改為以第二地址A"為入口地址的新的機器指令片段。
[0110]步驟S105執(zhí)行后,恢復(fù)了所述指令運行環(huán)境,指令重組平臺完成一次運行,CPU執(zhí)行所述重組指令片段,即CPU將執(zhí)行以第二地址A"為入口地址的機器指令片段。重組指令片段執(zhí)行到第二跳轉(zhuǎn)指令JP2時,所述指令重組平臺重新得到CPU控制權(quán)(即執(zhí)行步驟S101),此時第一跳轉(zhuǎn)指令的目標(biāo)地址已經(jīng)得到,該目標(biāo)地址為新的第一地址,繼而重新執(zhí)行步驟SlOl?步驟S105。
[0111]下面結(jié)合圖3,進一步說明指令重組過程和重組指令片段的生成過程。
[0112]圖3中包括待調(diào)度的機器指令集合401 (例如已經(jīng)載入內(nèi)存中的某程序的機器指令),其中指令4012為第一跳轉(zhuǎn)指令,如果指令4012的目標(biāo)地址為變量,則首先假設(shè)指令4012指向機器指令4013 ;從第一跳轉(zhuǎn)指令4012以前的包括第一跳轉(zhuǎn)指令4012的所有待調(diào)度的機器指令構(gòu)成了機器指令片段4011。
[0113]當(dāng)指令重組方法運行后(指令重組平臺411),首先緩存指令運行環(huán)境;然后獲取(例如拷貝)機器指令片段4011 ;指令重組平臺在第一跳轉(zhuǎn)指令4012前插入了第二跳轉(zhuǎn)指令4113,第二跳轉(zhuǎn)指令4113指向指令重組平臺411本身,從而生成了重組指令片段4111,重組指令片段的地址為A";將所述緩存的指令運行環(huán)境中的地址寄存器的值A(chǔ)修改為地址A";最后恢復(fù)所述指令運行環(huán)境。
[0114]指令重組平臺411結(jié)束運行后,CPU執(zhí)行以A"為地址的重組指令片段,當(dāng)執(zhí)行到第二跳轉(zhuǎn)指令4113時,指令重組平臺411會重新獲得CPU控制權(quán)。此時,第一跳轉(zhuǎn)指令4012的目標(biāo)地址4013已經(jīng)生成,該目標(biāo)地址為新的第一地址,指令重組平臺根據(jù)該目標(biāo)地址重新開始執(zhí)行步驟SlOl?步驟S105,繼續(xù)分析后續(xù)的待調(diào)度的機器指令,從而完成了運行時指令重組的方法。
[0115]根據(jù)本發(fā)明另一個實施例,如圖4所示,在步驟S102中,獲取待調(diào)度的機器指令片段可以包括:
[0116]S1021,從地址寄存器(例如CPU地址寄存器)讀取待調(diào)度的機器指令地址;
[0117]S1022,以跳轉(zhuǎn)指令為檢索目標(biāo),檢索所述機器指令地址指向的機器指令及其后續(xù)指令,直到發(fā)現(xiàn)第一個跳轉(zhuǎn)指令(稱為第一跳轉(zhuǎn)指令);所述跳轉(zhuǎn)指令指能夠改變機器指令順序執(zhí)行流程的機器指令,包括Jump指令、Call指令、Return指令等;
[0118]S1023,將所述第一跳轉(zhuǎn)指令以及其之前的所有待調(diào)度的機器指令作為一個待調(diào)度的機器指令片段;將該機器指令片段保存在指令重組平臺中,或其他指令重組平臺能夠讀取的存儲位置。
[0119]在本發(fā)明的其他實施例中,獲取待調(diào)度的機器指令片段也可以以非跳轉(zhuǎn)指令(例如寫入指令、讀取指令等)為檢索目標(biāo),進一步切分機器指令片段。由于在這樣的實施例中,也需要保證在待調(diào)度跳轉(zhuǎn)指令執(zhí)行后指令重組平臺仍能夠獲取CPU控制權(quán)或執(zhí)行權(quán),所以跳轉(zhuǎn)指令需要作為第二檢索目標(biāo),從而得到粒度更小的機器指令片段。
[0120]根據(jù)本發(fā)明另一個實施例,在步驟S102和S103之間,所述運行時指令重組方法還可以包括:
[0121]利用指令集匹配所述待調(diào)度的機器指令片段,得到目標(biāo)機器指令;所述指令集包括X86,MIPS和ARM指令集;和
[0122]按照預(yù)定的方式,修改所述目標(biāo)機器指令。
[0123]不僅可以完成運行時指令監(jiān)控,還可以進行其他處理過程,相關(guān)實施例將在后面詳細介紹。
[0124]進一步的,為了提高指令重組方法的效率,可以將固定地址跳轉(zhuǎn)指令所指向的待調(diào)度指令在步驟S102中一并獲取。
[0125]根據(jù)本發(fā)明另一個實施例,提供一種運行時指令重組方法,該方法S300包括:
[0126]S301,緩存指令運行環(huán)境;所述指令運行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運行的機器指令的地址,該地址為第一地址;
[0127]S302,獲取待調(diào)度的機器指令片段;其中,待調(diào)度的機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0128]S303,在所述第一跳轉(zhuǎn)指令前,插入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺的入口地址,即執(zhí)行該第二跳轉(zhuǎn)指令后,執(zhí)行步驟 S301 ;
[0129]S304,將所述地址寄存器中的第一地址修改為第二地址;
[0130]S305,恢復(fù)所述指令運行環(huán)境。
[0131]與之前的實施例中所提供的方法相比,區(qū)別在于:在步驟S302中,待調(diào)度的機器指令片段中可以包括多條跳轉(zhuǎn)指令;跳轉(zhuǎn)指令中只有一條參數(shù)地址跳轉(zhuǎn)指令,稱為第一跳轉(zhuǎn)指令。
[0132]需要說明的是,跳轉(zhuǎn)指令可以包括兩類,參數(shù)地址跳轉(zhuǎn)指令和常數(shù)地址跳轉(zhuǎn)指令,其中,常數(shù)地址跳轉(zhuǎn)指令的跳轉(zhuǎn)地址為常數(shù)(即立即數(shù)),而參數(shù)地址跳轉(zhuǎn)指令中的參數(shù)地址一般在跳轉(zhuǎn)指令之前的一條機器指令中計算得到。
[0133]相似地,待調(diào)度的機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;待調(diào)度的機器指令片段包括所述第一跳轉(zhuǎn)指令以及其之前的所有待調(diào)度的機器指令。
[0134]進一步的,由于程序運行過程中所生成的機器指令具有很高的重復(fù)性,為了提高指令重組方法的效率,節(jié)省計算設(shè)備的計算資源(CPU資源),可以利用少量的存儲空間來保存重組指令片段。
[0135]根據(jù)本發(fā)明另一個實施例,提供一種運行時指令重組方法。如圖5所示,該方法S200包括:
[0136]S201,緩存指令運行環(huán)境;所述指令運行環(huán)境包括地址寄存器(例如CPU地址寄存器)(一般來說,指令運行環(huán)境是指CPU的所有寄存器,包括通用寄存器,狀態(tài)寄存器,地址寄存器等),地址寄存器保存下一條將要運行的機器指令的地址,該地址為第一地址;
[0137]S202,利用所述第一地址查找地址對應(yīng)表;所述地址對應(yīng)表用于表不第一地址A指向的待調(diào)度指令片段是否具有已保存的重組指令片段,地址對應(yīng)表的數(shù)據(jù)為地址對;
[0138]S203,如果找到相應(yīng)的記錄,將所述第一地址A(即地址寄存器的值A(chǔ))修改為已保存的重組指令片段的地址A’ ;
[0139]S204,如果沒有找到相應(yīng)的記錄,獲取待調(diào)度的機器指令片段;其中,待調(diào)度的機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0140]S205,在所述第一跳轉(zhuǎn)指令前,插入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺的入口地址,即執(zhí)行該第二跳轉(zhuǎn)指令后,執(zhí)行步驟 S201 ;
[0141]S206,將所述地址寄存器中的第一地址修改為第二地址;
[0142]S207,恢復(fù)所述指令運行環(huán)境。
[0143]進一步的,步驟S206還包括:利用第二地址A"與第一地址A在所述地址對應(yīng)表中建立地址對(或一條記錄)。具有地址A"的重組指令片段被保存在重組指令平臺中,以
供重用。
[0144]本方法利用地址對應(yīng)表,節(jié)省計算資源,提高運行時指令重組的效率。
[0145]上述重組方法一般通過在待調(diào)度指令片段之中插入所需跳轉(zhuǎn)指令完成,在本發(fā)明其他實施例中,也可以通過其他方式完成重組指令片段的生成。下面將結(jié)合實施例詳細介紹。
[0146]根據(jù)本發(fā)明另一個實施例,提供一種指令重組方法,單獨開辟存儲位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址。如圖6所示,該方法SllO包括:
[0147]S111,緩存指令運行環(huán)境;
[0148]S112,從第一存儲位置讀取目標(biāo)地址,根據(jù)目標(biāo)地址獲取待調(diào)度(即待執(zhí)行)的機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0149]S113,在第一存儲位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;
[0150]S114,將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺的入口地址,即執(zhí)行該第二跳轉(zhuǎn)指令后,執(zhí)行步驟Slll ;
[0151]S115,恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0152]其中,在步驟S112中,獲取待調(diào)度的機器指令片段可以包括:
[0153]S1121、以跳轉(zhuǎn)指令為檢索目標(biāo),檢索所述機器指令地址指向的機器指令及其后續(xù)指令,直到發(fā)現(xiàn)第一個跳轉(zhuǎn)指令(稱為第一跳轉(zhuǎn)指令);
[0154]所述跳轉(zhuǎn)指令指能夠改變機器指令順序執(zhí)行流程的機器指令,包括Jump指令、Call指令、Return指令等;
[0155]S1122、將所述第一跳轉(zhuǎn)指令以及其之前的所有待調(diào)度的機器指令作為一個待調(diào)度的機器指令片段;將該機器指令片段保存在指令重組平臺中,或其他指令重組平臺能夠讀取的存儲位置。
[0156]在步驟S113中,目標(biāo)地址即跳轉(zhuǎn)指令的目標(biāo)地址參數(shù),其可以是立即數(shù)或變量參數(shù),對于立即數(shù)保存其值,對于變量參數(shù)保存其地址/引用。當(dāng)處理器即將執(zhí)行某跳轉(zhuǎn)指令時,其跳轉(zhuǎn)目標(biāo)地址已經(jīng)計算完畢。
[0157]根據(jù)本發(fā)明另一個實施例,提供一種指令重組方法,針對非固定長度指令集進行反匯編和匯編處理。如圖7所示,該方法包括:
[0158]S121,緩存指令運行環(huán)境;
[0159]S122,從第一存儲位置讀取目標(biāo)地址,根據(jù)目標(biāo)地址獲取待調(diào)度指令片段:
[0160]從目標(biāo)地址開始,獲取待調(diào)度的一段機器指令,將該段機器指令進行反匯編,并將反匯編結(jié)果通過一個詞法分析器進行處理并匹配是否其中包含跳轉(zhuǎn)指令,如果不包含則繼續(xù)獲取下一段待調(diào)度的機器指令重復(fù)上述操作,直到匹配到跳轉(zhuǎn)指令為止,該跳轉(zhuǎn)指令為第一跳轉(zhuǎn)指令;第一跳轉(zhuǎn)指令以及之前的所有指令組成待調(diào)度指令片段;
[0161]S123,在第一存儲位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;
[0162]S124,將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺的入口地址;本實施例中,該第一跳轉(zhuǎn)指令和第二跳轉(zhuǎn)指令皆為匯編指令;
[0163]S125,將生成的重組后的匯編代碼通過匯編器生成對應(yīng)的機器碼;和
[0164]S126,恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0165]根據(jù)本發(fā)明另一個實施例,提供一種指令重組方法,以壓棧指令替代或記錄第一跳轉(zhuǎn)指令。如圖8所示,該方法S130包括:
[0166]S131,緩存指令運行環(huán)境;
[0167]S132,獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計算下一條即將運行的指令地址,該地址為第一地址;
[0168]S133,根據(jù)第一地址獲取待調(diào)度/執(zhí)行的機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0169]S134,替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù);
[0170]S135,在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺的入口地址;和
[0171]S136,恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0172]本領(lǐng)域普通技術(shù)人員可以理解,上述各個實施例中提供的功能或特征可以根據(jù)實際的需要疊加在同一個實施例中,這里就不再一一組合給出,下面只舉一個例子進行示例性說明。
[0173]根據(jù)本發(fā)明另一個實施例,提供一種指令重組方法,如圖9a所示,包括:
[0174](I)緩存指令運行環(huán)境,所述指令運行環(huán)境包括全部的CPU環(huán)境和內(nèi)存環(huán)境;獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計算下一條即將運行的指令地址(第零地址),將第一地址設(shè)置為第零地址;
[0175](2)利用第一地址來查找地址對應(yīng)表(也稱為地址查找表),如果找到記錄,恢復(fù)所緩存的指令運行環(huán)境,并跳轉(zhuǎn)到找到的對應(yīng)地址(在地址對應(yīng)表中的地址對內(nèi))繼續(xù)執(zhí)行;
[0176](3)如果沒有找到記錄,從第一地址開始獲取待執(zhí)行的機器指令片段,指令片段的結(jié)尾為跳轉(zhuǎn)指令(跳轉(zhuǎn)指令所在地址為第三地址);
[0177](4)從第一地址開始,將機器碼進行反匯編,并將反匯編結(jié)果通過一個詞法分析器進行處理,生成重組后的匯編代碼,直到第三地址為止;
[0178](5)判斷第三地址處的代碼是否可以進一步處理,即第三地址處的跳轉(zhuǎn)指令的目標(biāo)地址為已知量(例如,立即數(shù)),如果可以,將第一地址設(shè)置為第三地址(或第三地址的目標(biāo)地址),重新開始執(zhí)行(3);
[0179](6)如果不可以,在生成的重組后的匯編代碼最后,加入壓棧指令記錄當(dāng)前第三地址的原始地址位置(即第三地址的值)和操作數(shù),并在壓棧指令之后加入跳轉(zhuǎn)至重組平臺開始的指令,即能夠使步驟(I)再次開始執(zhí)行;
[0180](7)將生成的重組后的匯編代碼通過匯編器生成對應(yīng)的機器碼,并存儲于重組地址空間中分配出的地址(第二地址),并將第二地址和第零地址以對應(yīng)地址對的形式存儲于地址對應(yīng)表中;
[0181](8)恢復(fù)環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0182]為了方便理解,現(xiàn)以X86體系處理器運行該實施例提供的方法進行說明,參考圖9b-9d,指令重組的一個示例過程如下:
[0183](I)重組平臺開始工作后,首先緩存當(dāng)前指令運行環(huán)境;獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計算下一條即將運行的指令地址,該地址為第一地址。
[0184](2)利用第一地址來查找地址對應(yīng)表,如果找到記錄,恢復(fù)所緩存的指令運行環(huán)境,并跳轉(zhuǎn)到找到的對應(yīng)地址繼續(xù)執(zhí)行(圖%);如果沒有找到記錄,進行如下操作(圖9c)。
[0185](3)-(6)從第一地址開始,將機器碼進行反匯編,并將反匯編結(jié)果通過一個詞法分析器進行處理,生成重組代碼;
[0186]對該段匯編代碼進行檢索,檢查是否包含跳轉(zhuǎn)指令;
[0187]對第一個跳轉(zhuǎn)指令進行分析,判斷其跳轉(zhuǎn)目標(biāo)地址是否為已知量,如果是已知量,則繼續(xù)尋找,直到找到第一條參數(shù)地址跳轉(zhuǎn)指令,稱為第一跳轉(zhuǎn)指令,該指令的地址為第三地址;
[0188]在生成的匯編代碼(從第一地址到第三地址的機器指令,不包括第一跳轉(zhuǎn)指令)最后加入壓棧指令記錄當(dāng)前第三地址的第一跳轉(zhuǎn)的原始地址位置和操作數(shù);
[0189]在壓棧指令之后加入跳轉(zhuǎn)至重組平臺開始的指令(第二跳轉(zhuǎn)指令)。
[0190](7)將生成的匯編代碼通過匯編器生成對應(yīng)的機器碼,并存儲于重組地址空間中分配出的地址(第二地址);
[0191]將第二地址和第零地址以對應(yīng)地址對的形式存儲于地址對應(yīng)表中。
[0192](8)恢復(fù)環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0193](圖9d)處理器開始執(zhí)行第二地址的指令,之前的待重組指令片段中的跳轉(zhuǎn)指令已經(jīng)替換為壓棧指令和跳轉(zhuǎn)去重組平臺的指令,壓棧指令主要的目的是向重組平臺提供輸入?yún)?shù)。(圖9d)當(dāng)執(zhí)行到第二跳轉(zhuǎn)指令時,重組平臺重新得到執(zhí)行,進行上述的步驟(I),通過查看壓棧指令中保存的跳轉(zhuǎn)指令的地址和參數(shù),計算下一條即將運行的指令地址,該地址為第一地址。
[0194]之后的處理即上述過程的循環(huán)。[0195]進一步的,為了從系統(tǒng)啟動后即執(zhí)行運行時的指令監(jiān)控,實現(xiàn)計算設(shè)備運行階段的運行時指令全監(jiān)控,本發(fā)明另一個實施例中,修改計算機啟動時的load指令,在load指令執(zhí)行前調(diào)用本發(fā)明提供的指令重組平臺,執(zhí)行上述運行時指令重組方法,由于load指令跳轉(zhuǎn)地址為已知的固定地址,指令重組平臺可以事先建立好地址對應(yīng)表及該第一條記錄,并建立好第一個重組指令片段。
[0196]進一步的,根據(jù)本發(fā)明另一個實施例,提供一種計算機可讀介質(zhì),其中,所述可讀介質(zhì)中存儲有計算機可執(zhí)行的程序代碼,所述程序代碼用于執(zhí)行上述實施例中提供的運行時指令重組方法的步驟。
[0197]進一步的,根據(jù)本發(fā)明另一個實施例,提供一種計算機程序,其中,所述計算機程序包含上述實施例中提供的運行時指令重組方法的步驟。
[0198]針對數(shù)據(jù)安全的指令重組
[0199]上述的運行時指令重組方法為進一步的應(yīng)用提供了基礎(chǔ)。下面的實施例中提供了各種針對不同機器指令進行處理的運行時指令重組方法,其中包括存儲/讀取指令,I/o指令,以及網(wǎng)絡(luò)傳輸指令:
[0200](I)存儲/讀取指令指計算機系統(tǒng)中所有對外部存儲設(shè)備(包括但不限于磁盤、移動存儲、光存儲)進行存儲/讀取的指令或指令組合。
[0201](2) I/O指令指計算機系統(tǒng)中所有操作外設(shè)的地址空間的指令,這些指令最終會影響外設(shè)輸入輸出狀態(tài)、數(shù)據(jù)、信號等。這里的輸入輸出地址空間包括但不限于(I/O地址空間、內(nèi)存映射I/O設(shè)備地址空間)。
[0202](3)網(wǎng)絡(luò)傳輸指令指計算機系統(tǒng)中所有影響網(wǎng)絡(luò)設(shè)備的指令,這些指令最終會影響計算機系統(tǒng)網(wǎng)絡(luò)設(shè)備的傳輸、狀態(tài)、數(shù)據(jù)、信號等所有相關(guān)特性。
[0203]其中,存儲/讀取指令與I/O指令之間可以存在交集。
[0204]根據(jù)本發(fā)明一個實施例,提供一種針對存儲/讀取指令的運行時指令重組方法S400,包括:
[0205]S401,緩存指令運行環(huán)境;所述指令運行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運行的機器指令的地址,該地址為第一地址;
[0206]S402,利用所述第一地址查找地址對應(yīng)表;
[0207]S403,如果找到相應(yīng)的記錄,將所述第一地址A修改為已保存的重組指令片段的地址A’ ;
[0208]S404,如果沒有找到相應(yīng)的記錄,重組指令片段的生成方法包括:
[0209]S4041,獲取待調(diào)度機器指令片段;其中,待調(diào)度的機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;與步驟S102相同;
[0210]S4042,反匯編所述待調(diào)度機器指令片段,得到匯編指令片段;
[0211]S4043,檢索目標(biāo)匯編指令,所述目標(biāo)匯編指令為存儲/讀取指令;
[0212]S4044,如果檢索得到所述匯編指令片段中的存儲/讀取指令,修改其中的存儲和讀取地址為安全存儲設(shè)備上的地址;修改方式可以為本地地址空間和安全存儲設(shè)備地址空間之間的直接映射;
[0213]S4045,在所述第一跳轉(zhuǎn)指令JPl前,插入第二跳轉(zhuǎn)指令JP2,所述JP2指向指令重組平臺的入口地址;[0214]S4046,匯編修改過的匯編指令片段,生成具有地址A"的重組機器指令片段;
[0215]S4047,利用重組機器指令片段地址A"與第一地址A在所述地址對應(yīng)表中建立一條記錄(或地址對),具有地址A"的重組指令片段被保存在重組指令平臺中;
[0216]S4048,將第一地址A修改為第二地址A";
[0217]S405,恢復(fù)所述指令運行環(huán)境。
[0218]本實施例是在反匯編步驟之后進行指令處理的;在其他實施例中,也可以省略反匯編和對應(yīng)的匯編步驟,直接處理機器指令。
[0219]在步驟S4044中,針對存儲和讀取指令進行操作,修改其中的目標(biāo)和源地址,以實現(xiàn)存儲重定位/重定向,確保數(shù)據(jù)安全。更具體的安全存儲/讀取的方法將在本發(fā)明提供的下面的實施例中介紹。
[0220]根據(jù)本發(fā)明一個實施例,提供一種針對I/O指令的運行時指令重組方法S500,包括:
[0221]S501,緩存指令運行環(huán)境;所述指令運行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運行的機器指令的地址,該地址為第一地址;
[0222]S502,利用所述第一地址查找地址對應(yīng)表;
[0223]S503,如果找到相應(yīng)的記錄,將所述第一地址A修改為已保存的重組指令片段的地址A’ ;
[0224]S504,如果沒有找到相應(yīng)的記錄,重組指令片段的生成方法包括:
[0225]S5041,獲取待調(diào)度機器指令片段;其中,待調(diào)度的機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;與步驟S102相同;
[0226]S5042,反匯編所述機器指令片段,得到匯編指令片段;
[0227]S5043,檢索目標(biāo)匯編指令,所述目標(biāo)匯編指令為I/O指令;
[0228]S5044,如果檢索得到所述匯編指令片段中的I/O指令,將所述I/O指令中的輸入指令全部阻止;
[0229]S5045,在所述第一跳轉(zhuǎn)指令JPl前,插入第二跳轉(zhuǎn)指令JP2,所述JP2指向指令重組平臺的入口地址;
[0230]S5046,匯編修改過的匯編指令片段,生成具有地址A"的重組機器指令片段;
[0231]S5047,利用重組機器指令片段地址A"與第一地址A在所述地址對應(yīng)表中建立一條記錄(或地址對),具有地址A"的重組指令片段被保存在重組指令平臺中;
[0232]S5048,將第一地址A修改為第二地址A";
[0233]S505,恢復(fù)所述指令運行環(huán)境。
[0234]本實施例是在反匯編步驟之后進行指令處理的;在其他實施例中,也可以省略反匯編和對應(yīng)的匯編步驟,直接處理機器指令。
[0235]在步驟S5044中,針對I/O指令進行操作,將所述I/O指令中的輸入指令全部阻止,以實現(xiàn)徹底阻斷對本地硬件設(shè)備的寫操作;結(jié)合上一個實施例中的存儲指令處理過程,還可以實現(xiàn)對除存儲指令之外的輸入指令的阻止,可以提高計算設(shè)備中的數(shù)據(jù)安全性。
[0236]根據(jù)本發(fā)明一個實施例,提供一種針對網(wǎng)絡(luò)傳輸指令的運行時指令重組方法S600,包括:
[0237]S601,緩存指令運行環(huán)境;所述指令運行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運行的機器指令的地址,該地址為第一地址;
[0238]S602,利用所述第一地址查找地址對應(yīng)表;
[0239]S603,如果找到相應(yīng)的記錄,將所述第一地址A修改為已保存的重組指令片段的地址A’ ;
[0240]S604,如果沒有找到相應(yīng)的記錄,重組指令片段的生成方法包括:
[0241]S6041,獲取待調(diào)度機器指令片段;其中,待調(diào)度的機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;與步驟S102相同;
[0242]S6042,反匯編所述待調(diào)度機器指令片段,得到匯編指令片段;
[0243]S6043,檢索目標(biāo)匯編指令,所述目標(biāo)匯編指令為網(wǎng)絡(luò)傳輸指令;
[0244]S6044,如果檢索得到所述匯編指令片段中的網(wǎng)絡(luò)傳輸指令,檢驗所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對應(yīng)的遠端計算設(shè)備是否為安全地址,如果不是,阻止所述網(wǎng)絡(luò)傳輸指令;
[0245]S6045,在所述第一跳轉(zhuǎn)指令JPl前,插入第二跳轉(zhuǎn)指令JP2,所述JP2指向指令重組平臺的入口地址;
[0246]S6046,匯編修改過的匯編指令片段,生成具有地址A"的重組機器指令片段;
[0247]S6047,利用重組機器指令片段地址A"與第一地址A在所述地址對應(yīng)表中建立一條記錄(或地址對),具有地址A"的重組指令片段被保存在重組指令平臺中;
[0248]S6048,將第一地址A修改為第二地址A";
[0249]S605,恢復(fù)所述指令運行環(huán)境。
[0250]在步驟S6044中,阻止/拒絕網(wǎng)絡(luò)傳輸指令可以通過在重組后的代碼中插入一到多條指令來將本身的傳輸指令替換為“取消當(dāng)前操作的指令”或直接替換為無效指令,要視硬件的不同而定。
[0251]本實施例是在反匯編步驟之后進行指令處理的;在其他實施例中,也可以省略反匯編和對應(yīng)的匯編步驟,直接處理機器指令。
[0252]在步驟S6044中,針對網(wǎng)絡(luò)傳輸指令進行操作,檢驗所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對應(yīng)的遠端計算設(shè)備是否為安全地址;如果不是,阻止所述網(wǎng)絡(luò)傳輸指令,以實現(xiàn)數(shù)據(jù)安全傳輸。
[0253]上述多個實施例中的地址對應(yīng)表是由指令重組平臺建立并維護的,可以是固定長度的數(shù)組結(jié)構(gòu),也可以是可變長度的鏈表結(jié)構(gòu),還可以是其他存儲二元數(shù)據(jù)的適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)。優(yōu)選的,其長度可調(diào)節(jié),并且其占用空間可釋放。釋放地址對應(yīng)表的操作可以隨機進行,也可以周期進行。在一些實施例中,所述的地址對應(yīng)表還可以包括記錄建立時間字段,用于在釋放空間刪除記錄時,按照建立時間的長短刪除記錄。在一些實施例中,所述的地址對應(yīng)表還可以包括記錄使用次數(shù)字段,在查找地址對應(yīng)表步驟中,如果找到,將改變該字段的值;所述記錄使用次數(shù)字段也用于在釋放空間刪除記錄時,按照使用次數(shù)的多少刪除記錄。
[0254]另外,本領(lǐng)域的技術(shù)人員可以理解,上述指令重組方法(即運行時指令重組方法)可使用軟件或硬件的方法實現(xiàn):
[0255](I)如果以軟件實現(xiàn),則上述方法對應(yīng)的步驟以軟件代碼的形式存儲在計算機可讀介質(zhì)上,成為軟件產(chǎn)品;[0256](2)如果以硬件實現(xiàn),則上述方法對應(yīng)的步驟以硬件代碼(例如Verilog)描述,并固化(經(jīng)過物理設(shè)計/布局布線/晶圓廠流片等過程)成為芯片產(chǎn)品(例如處理器產(chǎn)品)。下面將詳細介紹。
[0257]指令重組裝置
[0258]與上述運行時指令重組方法SlOO相對應(yīng),根據(jù)本發(fā)明一個實施例,提供一種運行時指令重組裝置。如圖10所示,指令重組裝置500包括:
[0259]指令運行環(huán)境緩存和恢復(fù)單元501,適于緩存和恢復(fù)指令運行環(huán)境;所述指令運行環(huán)境包括地址寄存器,該地址寄存器保存下一條將要運行的機器指令的地址,該地址為第一地址;
[0260]指令獲取單元502,適于在單元501緩存指令運行環(huán)境后,獲取待調(diào)度的機器指令片段;其中,待調(diào)度的機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0261]指令重組單元503,適于解析、修改所述待調(diào)度的機器指令片段,包括:在第一跳轉(zhuǎn)指令前,插入第二跳轉(zhuǎn)指令,生成具有第二地址A "的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置500,即執(zhí)行該第二跳轉(zhuǎn)指令后,裝置500的指令運行環(huán)境緩存和恢復(fù)單元501進行下一次處理;和
[0262]地址替換單元504,適于將所述緩存的指令運行環(huán)境中的地址寄存器的值修改為重組指令片段的地址。
[0263]所述指令運行環(huán)境緩存和恢復(fù)單元501分別與指令獲取單元502以及地址替換單元504耦接,所述指令獲取單元502,指令重組單元503和地址替換單元504依次耦接。
[0264]裝置500執(zhí)行過程如下:
[0265]首先,指令運行環(huán)境緩存和恢復(fù)單元501緩存指令運行環(huán)境,例如向緩存棧中壓入指令運行相關(guān)的寄存器數(shù)據(jù);
[0266]然后,所述指令獲取單元502從CPU地址寄存器511讀取待調(diào)度的機器指令地址,并從所述機器指令地址讀取機器指令片段,所述機器指令片段最后一條指令為跳轉(zhuǎn)指令;
[0267]例如,指令獲取單元502從CPU地址寄存器511讀取待調(diào)度的機器指令地址;以跳轉(zhuǎn)指令為檢索目標(biāo),檢索所述機器指令地址對應(yīng)的機器指令,直到發(fā)現(xiàn)第一個跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令包括例如Jump指令和Call指令等;將所述第一個跳轉(zhuǎn)指令及其之前的所有機器指令作為一個待調(diào)度的機器指令片段;將該機器指令片段保存在裝置500中,或其他的裝置500能夠讀取的存儲位置;
[0268]然后,指令重組單元503在所述獲取的機器指令片段的最后一條指令前,插入第二跳轉(zhuǎn)指令,所述第二跳轉(zhuǎn)指令指向裝置500的入口地址,生成具有地址A"的重組指令片段;
[0269]然后,地址替換單元504將所述緩存的指令運行環(huán)境中的地址寄存器的值A(chǔ)修改為地址A";
[0270]最后,指令運行環(huán)境緩存和恢復(fù)單元501恢復(fù)所述指令運行環(huán)境,例如從緩存棧中彈出指令運行相關(guān)的寄存器數(shù)據(jù)。
[0271]與上述運行時指令重組方法S300相對應(yīng),所述指令獲取單元502可以將第一個非常數(shù)地址跳轉(zhuǎn)指令作為第一跳轉(zhuǎn)指令。以提高重組裝置的執(zhí)行效率。
[0272]與上述運行時指令重組方法S200相對應(yīng),根據(jù)本發(fā)明另一個實施例,提供一種運行時指令重組裝置,能夠充分利用運行時指令重復(fù)性,提高效率,節(jié)省計算資源。
[0273]如圖11所示,指令重組裝置600包括:
[0274]指令運行環(huán)境緩存和恢復(fù)單元601,適于緩存和恢復(fù)指令運行環(huán)境;所述指令運行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運行的機器指令的地址,該地址為第一地址;
[0275]指令獲取單元602,適于獲取待調(diào)度的機器指令片段;其中,待調(diào)度的機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0276]指令重組單元603,適于解析、修改所述待調(diào)度機器指令片段,包括:在第一跳轉(zhuǎn)指令前插入第二跳轉(zhuǎn)指令,以生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置600,即執(zhí)行該第二跳轉(zhuǎn)指令后,裝置600的指令運行環(huán)境緩存和恢復(fù)單元601進行下一次處理;
[0277]地址替換單元604,適于將所述緩存的指令運行環(huán)境中的地址寄存器的值修改為重組指令片段的地址;和
[0278]指令檢索單元605,適于利用所述第一地址查找地址對應(yīng)表;所述地址對應(yīng)表用于表示第一地址A指向的待調(diào)度指令片段是否具有已保存的重組指令片段,地址對應(yīng)表的數(shù)據(jù)為地址對;
[0279]如果找到相應(yīng)的記錄,指令檢索單元605適于調(diào)用地址替換單元604,將所述第一地址A(即地址寄存器的值A(chǔ))修改為已保存的重組指令片段的地址A’ ;如果沒有找到相應(yīng)的記錄,指令檢索單元適于利用第二地址A"與地址A在所述地址對應(yīng)表中建立一條記錄。
[0280]所述指令運行環(huán)境緩存和恢復(fù)單元601分別與指令檢索單元605以及地址替換單元604耦接,所述指令檢索單元605分別與指令獲取單元602,指令重組單元603和地址替換單元604耦接,所述指令獲取單元602、指令重組單元603和地址替換單元604依次耦接。
[0281]裝置600的執(zhí)行過程如下:
[0282]首先,指令運行環(huán)境緩存和恢復(fù)單元601緩存指令運行環(huán)境,例如向緩存棧中壓入指令運行相關(guān)的寄存器數(shù)據(jù);
[0283]然后,指令檢索單元605利用所述緩存的指令運行環(huán)境中的地址寄存器的值A(chǔ)查找地址對應(yīng)表;
[0284]如果找到相應(yīng)的記錄,指令檢索單元605調(diào)用地址替換單元604,地址替換單元604將所述地址寄存器的值A(chǔ)修改為記錄中的值A(chǔ)’ ;地址替換單元604調(diào)用指令運行環(huán)境緩存和恢復(fù)單元602,以恢復(fù)所述指令運行環(huán)境,即從緩存棧中彈出指令運行相關(guān)的寄存器數(shù)據(jù),本次重組操作結(jié)束;
[0285]如果沒有找到相應(yīng)的記錄,所述指令獲取單元602從CPU地址寄存器讀取待調(diào)度的機器指令地址,并從所述機器指令地址讀取機器指令片段,所述機器指令片段最后一條指令為跳轉(zhuǎn)指令。具體的,指令獲取單元602從CPU地址寄存器讀取待調(diào)度的機器指令地址;以跳轉(zhuǎn)指令為檢索目標(biāo),檢索所述機器指令地址對應(yīng)的機器指令,直到發(fā)現(xiàn)第一個跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令包括Jump指令和Call指令等;將所述第一個跳轉(zhuǎn)指令及其之前的所有機器指令作為一個待調(diào)度的機器指令片段;將該機器指令片段保存在裝置600中,或其他的裝置600能夠讀取的存儲位置;
[0286]然后,指令重組單元603在所述獲取的機器指令片段的最后一條指令前,插入第二跳轉(zhuǎn)指令,所述第二跳轉(zhuǎn)指令指向裝置600的入口地址,生成具有地址A"的重組指令片段;
[0287]然后,指令重組單元603將地址A"發(fā)送給指令檢索單元605,指令檢索單元605利用地址A"與地址A在其中的地址對應(yīng)表中建立一條記錄;以備后續(xù)指令重用;
[0288]然后,地址替換單元604將所述緩存的指令運行環(huán)境中的地址寄存器的值A(chǔ)修改為地址A";
[0289]最后,指令運行環(huán)境緩存和恢復(fù)單元601恢復(fù)所述指令運行環(huán)境,即從緩存棧中彈出指令運行相關(guān)的寄存器數(shù)據(jù)。
[0290]繼續(xù)參考圖11,其中,指令重組單元603還可以包括:
[0291]指令解析單元6031,適于利用指令集匹配所述機器指令片段,得到待處理的目標(biāo)機器指令(即利用目標(biāo)指令檢索待調(diào)度的機器指令片段);所述指令集包括X86,MIPS和ARM指令集;
[0292]指令修改單元6032,適于按照預(yù)定的方式,修改所述目標(biāo)機器指令。
[0293]例如,如果所述目標(biāo)指令為存儲/讀取指令,所述指令解析單元6031將負責(zé)獲取待調(diào)度的機器指令片段中的存儲/讀取指令,所述指令修改單元6032修改其中的存儲和讀取地址為安全存儲設(shè)備上的地址。其作用和效果與上述對應(yīng)的方法實施例S400相同,這里不再贅述。
[0294]又例如,如果所述目標(biāo)指令為I/O指令,所述指令解析單元6031將負責(zé)獲取待調(diào)度的機器指令片段中的I/o指令,所述指令修改單元6032將所述I/O指令中的輸入指令全部阻止。其作用和效果與上述對應(yīng)的方法實施例S500相同,這里不再贅述。
[0295]又例如,如果所述目標(biāo)指令為網(wǎng)絡(luò)傳輸指令,所述指令解析單元6031將負責(zé)獲取待調(diào)度的機器指令片段中的網(wǎng)絡(luò)傳輸指令,所述指令修改單元6032檢驗所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對應(yīng)的遠端計算設(shè)備是否為安全地址;如果不是,所述指令修改單元適于阻止所述網(wǎng)絡(luò)傳輸指令。其作用和效果與上述對應(yīng)的方法實施例S600相同,這里不再贅述。
[0296]根據(jù)本發(fā)明另一個實施例,上述指令重組單元還可以包括反匯編單元和匯編單元。如圖12所示,指令重組單元703包括:依次稱接的反匯編單元7031,指令解析單元7032,指令修改單元7033和匯編單元7034。
[0297]其中,反匯編單元7031適于在解析、修改所述待調(diào)度的機器指令片段之前,反匯編所述待調(diào)度的機器指令片段,生成待調(diào)度的匯編指令片段;發(fā)送給指令解析單元7032。
[0298]匯編單元7034適于在解析、修改所述待調(diào)度的機器指令片段之后,匯編重組后的匯編指令片段,得到機器碼表示的重組指令片段;發(fā)送給指令替換單元。
[0299]在該實施例中,所述指令解析單元7032和指令修改單元7033將操作待調(diào)度的匯編指令片段。
[0300]與上述運行時指令重組方法SllO相對應(yīng),根據(jù)本發(fā)明另一個實施例,提供一種運行時指令重組裝置。如圖13所示,指令重組裝置800包括:
[0301]指令運行環(huán)境緩存和恢復(fù)單元801,適于緩存指令運行環(huán)境;
[0302]指令獲取單元802和第一存儲位置803,其中,指令獲取單元802適于從第一存儲位置803讀取目標(biāo)地址,并根據(jù)目標(biāo)地址獲取待調(diào)度/執(zhí)行的機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;以及
[0303]指令重組單元804,適于在第一存儲位置803保存第一跳轉(zhuǎn)指令的目標(biāo)地址,將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置800的入口地址。
[0304]其中,指令運行環(huán)境緩存和恢復(fù)單元801還適于在指令重組單元804替換指令之后,恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0305]裝置800的執(zhí)行過程如下:
[0306]首先,指令運行環(huán)境緩存和恢復(fù)單元801緩存指令運行環(huán)境;
[0307]然后,指令獲取單元802從第一存儲位置803讀取目標(biāo)地址(待調(diào)度指令地址),根據(jù)目標(biāo)地址獲取待調(diào)度機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0308]然后,指令重組單元804在第一存儲位置803保存第一跳轉(zhuǎn)指令的目標(biāo)地址;對于立即數(shù)保存其值,對于變量參數(shù)保存其地址/引用;
[0309]然后,指令重組單元804將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;
[0310]最后,指令運行環(huán)境緩存和恢復(fù)單元801恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0311]根據(jù)本發(fā)明另一個實施例,提供一種運行時指令重組裝置,與上述方法S130相對應(yīng),并且包含上述某些實施例中提供的裝置的特征。如圖14所示,該裝置900包括:
[0312]指令運行環(huán)境緩存和恢復(fù)單元901,適于緩存和恢復(fù)指令運行環(huán)境;
[0313]指令獲取單元902,適于通過輸入?yún)?shù)計算的方式獲取下一條即將運行的指令地址,該地址為第一地址;還適于根據(jù)第一地址獲取待調(diào)度/執(zhí)行的機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0314]指令重組單元903,適于替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù);還適于在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置900的入口地址;還適于將重組指令片段的第二地址與第一地址在地址對應(yīng)表中建立一條記錄;
[0315]指令檢索單元904,適于利用所述第一地址查找地址對應(yīng)表;所述地址對應(yīng)表用于表示第一地址指向的待調(diào)度指令片段是否具有已保存的重組指令片段,地址對應(yīng)表的數(shù)據(jù)為地址對;
[0316]如果找到相應(yīng)的記錄,指令檢索單元904適于調(diào)用指令運行環(huán)境緩存和恢復(fù)單元901恢復(fù)所緩存的指令運行環(huán)境,并跳轉(zhuǎn)到找到的對應(yīng)地址繼續(xù)執(zhí)行(重組操作完成);
[0317]如果沒有找到相應(yīng)的記錄,調(diào)用指令重組單元903進行重組操作。
[0318]其中,指令重組單元903還可以包括反匯編單元9031,指令解析單元9
[0319]032,指令修改單元9033,和匯編單元9034。
[0320]其中,當(dāng)指令重組單元902完成重組后,適于調(diào)用指令運行環(huán)境緩存和恢復(fù)單元901恢復(fù)所緩存的指令運行環(huán)境,并跳轉(zhuǎn)到重組指令片段的地址繼續(xù)執(zhí)行(本次重組操作完成)。
[0321]根據(jù)本發(fā)明另一個實施例,上述反匯編單元9031可以位于指令獲取單元902之中,在獲取待調(diào)度的指令片段時由其進行反匯編操作。
[0322]本領(lǐng)域技術(shù)人員可以理解,上述裝置實施例的附圖中的數(shù)據(jù)流的箭頭只是為了便于解釋上述實施例中的具體操作流程,并不限定圖中各個單元之間的數(shù)據(jù)流向或者連接方向,裝置中各個單元之間為耦接關(guān)系。
[0323]上面通過一些實施例詳細的介紹了運行時指令重組方法和裝置,其與現(xiàn)有技術(shù)相t匕,具有以下優(yōu)點:
[0324]通過指令重組方法,可以在指令運行狀態(tài)下監(jiān)控計算設(shè)備的指令;
[0325]利用地址對應(yīng)表,提高了指令重組效率,節(jié)省了計算資源;
[0326]針對存儲和讀取指令進行操作,修改其中的目標(biāo)和源地址,以實現(xiàn)存儲重定位/重定向,確保數(shù)據(jù)安全;
[0327]針對I/O指令進行操作,將所述I/O指令中的輸入指令全部阻止,以實現(xiàn)徹底阻斷對本地硬件設(shè)備的寫操作;還可以實現(xiàn)對除存儲指令之外的輸入指令的阻止,可以提高計算設(shè)備中的數(shù)據(jù)安全性;
[0328]針對網(wǎng)絡(luò)傳輸指令進行操作,檢驗所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對應(yīng)的遠端計算設(shè)備是否為安全地址;如果不是,阻止所述網(wǎng)絡(luò)傳輸指令,以實現(xiàn)數(shù)據(jù)安全傳輸。
[0329]應(yīng)該注意到并理解,在不脫離后附的權(quán)利要求所要求的本發(fā)明的精神和范圍的情況下,能夠?qū)ι鲜鲈敿毭枋龅谋景l(fā)明做出各種修改和改進。因此,要求保護的技術(shù)方案的范圍不受所給出的任何特定示范教導(dǎo)的限制。
【權(quán)利要求】
1.一種運行時指令重組方法,包括: 步驟1、緩存指令運行環(huán)境; 步驟2、獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計算下一條即將運行的指令地址,該地址為第一地址; 步驟3、根據(jù)第一地址獲取待調(diào)度機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令; 步驟4、替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù); 步驟5、在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺的入口地址;和 步驟6、恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
2.如權(quán)利要求1所述的運行時指令重組方法,步驟3中,根據(jù)第一地址獲取待調(diào)度機器指令片段包括: 從第一地址開始,獲取待調(diào)度的一段機器指令,將該段機器指令進行反匯編; 檢查反匯編結(jié)果中是否包含跳轉(zhuǎn)指令,如果不包含則繼續(xù)獲取后面一段待調(diào)度的機器指令,直到匹配到跳轉(zhuǎn)指令為止,該跳轉(zhuǎn)指令為第一跳轉(zhuǎn)指令;其中,第一跳轉(zhuǎn)指令以及之前的所有指令組成待調(diào)度指令片段。
3.如權(quán)利要求2所述的運行時指令重組方法,在步驟5和步驟6之間,還包括: 將生成的重組后的匯編代碼通過匯編器生成對應(yīng)的機器碼。
4.如權(quán)利要求1所述的運行時指令重組方法,在步驟2和步驟3之間,還包括: 利用所述第一地址查找地址對應(yīng)表;所述地址對應(yīng)表用于表示待調(diào)度的機器指令片段是否具有已保存的重組指令片段; 如果找到相應(yīng)的記錄,恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到紀(jì)錄中的保存地址繼續(xù)執(zhí)行。
5.如權(quán)利要求4所述的運行時指令重組方法,如果在地址對應(yīng)表中沒有找到相應(yīng)的紀(jì)錄,在步驟5之后,還包括: 利用重組指令片段的地址與所述第一地址在地址對應(yīng)表中建立一條記錄。
6.如權(quán)利要求1所述的運行時指令重組方法,在步驟3之后、步驟5之前,還包括: 解析所述待調(diào)度機器指令片段,利用指令集匹配所述機器指令片段,得到待處理的目標(biāo)機器指令; 按照預(yù)定的方式,修改所述目標(biāo)機器指令。
7.如權(quán)利要求6所述的運行時指令重組方法,其中,所述目標(biāo)指令為存儲/讀取指令; 按照預(yù)定的方式,修改所述目標(biāo)機器指令包括:修改其中的存儲和讀取地址為安全存儲設(shè)備上的地址。
8.如權(quán)利要求6所述的運行時指令重組方法,其中,所述目標(biāo)指令為I/O指令; 按照預(yù)定的方式,修改所述目標(biāo)機器指令包括:將所述I/O指令中的輸入指令全部阻止。
9.如權(quán)利要求6所述的運行時指令重組方法,其中,所述目標(biāo)指令為網(wǎng)絡(luò)傳輸指令; 按照預(yù)定的方式,修改所述目標(biāo)機器指令包括:檢驗所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對應(yīng)的遠端計算設(shè)備是否為安全地址;如果不是,阻止所述網(wǎng)絡(luò)傳輸指令。
10.一種計算機可讀介質(zhì),所述可讀介質(zhì)中存儲有計算機可執(zhí)行的程序代碼,所述程序代碼用于執(zhí)行權(quán)利要求1-9任一所述方法的步驟。
11.一種運行時指令重組裝置,包括: 指令運行環(huán)境緩存和恢復(fù)單元,適于緩存和恢復(fù)指令運行環(huán)境; 指令獲取單元,與指令運行環(huán)境緩存和恢復(fù)單元耦接,適于獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計算下一條即將運行的指令地址,該地址為第一地址;還適于根據(jù)第一地址獲取待調(diào)度/執(zhí)行的機器指令片段;其中,待調(diào)度機器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;和 指令重組單元,與指令運行環(huán)境緩存和恢復(fù)單元耦接,適于替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù);還適于在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向運行時指令重組裝置的入口地址。
12.如權(quán)利要求11所述的運行時指令重組裝置,還包括: 指令檢索單元,適于利用所述第一地址查找地址對應(yīng)表;所述地址對應(yīng)表用于表示待調(diào)度機器指令片段是否具有已保存的重組指令片段; 如果找到相應(yīng)的記錄,指令檢索單元還適于調(diào)用指令運行環(huán)境緩存和恢復(fù)單元,恢復(fù)所述指令運行環(huán)境,并跳轉(zhuǎn)到紀(jì)錄中的保存地址繼續(xù)執(zhí)行; 如果沒有找到相應(yīng)的記錄,指令檢索單元還適于利用重組指令片段的地址與所述第一地址在地址對應(yīng)表中建立一條記錄。
13.如權(quán)利要求11所述的運行時指令重組裝置,所述指令重組單元還包括: 指令解析單元,適于利用指令集匹配所述待調(diào)度的機器指令片段,得到待處理的目標(biāo)機器指令; 指令修改單元,適于按照預(yù)定的方式,修改所述目標(biāo)機器指令。
14.如權(quán)利要求13所述的運行時指令重組裝置,其中,所述目標(biāo)指令為存儲/讀取指令; 所述指令修改單元適于修改其中的存儲和讀取地址為安全存儲設(shè)備上的地址。
15.如權(quán)利要求13所述的運行時指令重組裝置,其中,所述目標(biāo)指令為I/O指令; 所述指令修改單元適于將所述I/O指令中的輸入指令全部阻止。
16.如權(quán)利要求13所述的運行時指令重組裝置,其中,所述目標(biāo)指令為網(wǎng)絡(luò)傳輸指令; 所述指令修改單元適于檢驗所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對應(yīng)的遠端計算設(shè)備是否為安全地址;如果不是,所述指令修改單元適于阻止所述網(wǎng)絡(luò)傳輸指令。
17.如權(quán)利要求13所述的運行時指令重組裝置,所述指令重組單元還包括: 反匯編單元,適于在指令解析單元解析所述待調(diào)度的機器指令片段之前,反匯編所述待調(diào)度的機器指令片段,生成待調(diào)度的匯編指令片段; 匯編單元,適于匯編重組后的匯編指令片段,得到機器碼表示的重組指令片段。
【文檔編號】G06F21/50GK103677769SQ201210325951
【公開日】2014年3月26日 申請日期:2012年9月6日 優(yōu)先權(quán)日:2012年9月6日
【發(fā)明者】汪家祥, 楊瀟 申請人:北京中天安泰信息科技有限公司