數(shù)據(jù)安全讀取方法及裝置制造方法
【專利摘要】本發(fā)明提供一種數(shù)據(jù)安全讀取方法,包括:步驟1、緩存指令運(yùn)行環(huán)境;步驟2、從第一存儲(chǔ)位置讀取目標(biāo)地址,根據(jù)目標(biāo)地址獲取待調(diào)度的機(jī)器指令片段;待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;步驟3、在第一存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;步驟4、分析待調(diào)度的機(jī)器指令片段中的每一條指令,如果其為讀取指令,獲取讀取指令中的源地址,并且查找映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改讀取指令中的讀取地址;步驟5、將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址;和步驟6、恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
【專利說明】數(shù)據(jù)安全讀取方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)安全領(lǐng)域,尤其涉及一種數(shù)據(jù)安全讀取方法及裝置。
【背景技術(shù)】
[0002]現(xiàn)有的電子信息安全領(lǐng)域包括系統(tǒng)安全、數(shù)據(jù)安全和設(shè)備安全三個(gè)子領(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ù)在存儲(chǔ)和傳輸過程中內(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)分析,目前針對(duì)計(jì)算機(jī)的所有危害總有效偵測(cè)能力最多在50%左右;由于上述技術(shù)在應(yīng)對(duì)計(jì)算機(jī)內(nèi)核病毒、木馬、操作系統(tǒng)漏洞、系統(tǒng)后門以及人為泄密時(shí)能力不足,事實(shí)上任何計(jì)算設(shè)備(例如計(jì)算機(jī)、手持通信設(shè)備等)都可能存在惡意代碼。一旦惡意代碼進(jìn)入終端系統(tǒng),上述的加密技術(shù)、防拷貝技術(shù)以及網(wǎng)絡(luò)阻斷技術(shù)在這種情況下將失去作用。現(xiàn)有的黑客技術(shù)可以利用系統(tǒng)漏洞或系統(tǒng)后門穿透上述安全技術(shù)并植入惡意代碼,并利用惡意代碼取得用戶數(shù)據(jù)。上述技術(shù)更無法防范涉密人員的主動(dòng)或被動(dòng)泄密,例如,內(nèi)部人員可以攜帶存儲(chǔ)設(shè)備,從內(nèi)部網(wǎng)絡(luò)或終端上下載所需的資料并帶走存儲(chǔ)設(shè)備,導(dǎo)致內(nèi)部泄密;又例如,內(nèi)部人員可以直接將計(jì)算設(shè)備帶走。
[0005]綜上,防拷貝技術(shù)無法保證涉密信息在終端不被非法存儲(chǔ)?;诰W(wǎng)絡(luò)過濾無法確保涉密信息不丟失。涉密人員可通過惡意代碼或惡意工具造成泄密,還可能因涉密設(shè)備或存儲(chǔ)介質(zhì)失控造成泄密。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的是提供一種數(shù)據(jù)安全讀取方法及裝置,提高數(shù)據(jù)安全性。
[0007]根據(jù)本發(fā)明一個(gè)方面,提供一種數(shù)據(jù)安全讀取方法,包括:
[0008]步驟1、緩存指令運(yùn)行環(huán)境;
[0009]步驟2、從第一存儲(chǔ)位置讀取目標(biāo)地址,根據(jù)目標(biāo)地址獲取待調(diào)度的機(jī)器指令片段;待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0010]步驟3、在第一存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;
[0011]步驟4、分析待調(diào)度的機(jī)器指令片段中的每一條指令,如果其為讀取指令,獲取讀取指令中的源地址,并且查找映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改讀取指令中的讀取地址;所述映射位圖用于表示本地存儲(chǔ)地址的數(shù)據(jù)是否轉(zhuǎn)儲(chǔ)到所述安全存儲(chǔ)設(shè)備;
[0012]步驟5、將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址;和
[0013]步驟6、恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行;
[0014]其中,步驟3和步驟4的執(zhí)行順序可以互換。
[0015]可選的,在步驟4之前,數(shù)據(jù)安全讀取方法還包括:[0016]建立計(jì)算終端系統(tǒng)與所述安全存儲(chǔ)設(shè)備的通訊;
[0017]將所述安全存儲(chǔ)設(shè)備上的第二映射位圖同步到所述計(jì)算終端系統(tǒng),保存為映射位圖。
[0018]可選的,所述的硬件指令為硬件端口 I/O指令。
[0019]可選的,所述安全存儲(chǔ)設(shè)備為遠(yuǎn)程存儲(chǔ)設(shè)備,所述遠(yuǎn)程存儲(chǔ)設(shè)備被多個(gè)計(jì)算終端系統(tǒng)共享。
[0020]可選的,所述硬件指令來自硬件映射層。
[0021]可選的,步驟2中,根據(jù)目標(biāo)地址獲取待調(diào)度指令片段包括:
[0022]從目標(biāo)地址開始,獲取待調(diào)度的一段機(jī)器指令,將該段機(jī)器指令進(jìn)行反匯編;
[0023]檢查反匯編結(jié)果中是否包含跳轉(zhuǎn)指令,如果不包含則繼續(xù)獲取后面一段待調(diào)度的機(jī)器指令,直到匹配到跳轉(zhuǎn)指令為止,該跳轉(zhuǎn)指令為第一跳轉(zhuǎn)指令;其中,第一跳轉(zhuǎn)指令以及之前的所有指令組成待調(diào)度指令片段。
[0024]可選的,在步驟5和步驟6之間,數(shù)據(jù)安全讀取方法還包括:
[0025]將生成的重組后的匯編代碼通過匯編器生成對(duì)應(yīng)的機(jī)器碼。
[0026]可選的,在步驟I和步驟2之間,數(shù)據(jù)安全讀取方法還包括:
[0027]從第一存儲(chǔ)位置讀取目標(biāo)地址,利用所述目標(biāo)地址查找地址對(duì)應(yīng)表;所述地址對(duì)應(yīng)表用于表示待調(diào)度的機(jī)器指令片段是否具有已保存的重組指令片段;
[0028]如果找到相應(yīng)的記錄,恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到紀(jì)錄中的保存地址繼續(xù)執(zhí)行。
[0029]可選的,如果在地址對(duì)應(yīng)表中沒有找到相應(yīng)的紀(jì)錄,所述數(shù)據(jù)安全讀取方法在步驟5之后還包括:
[0030]利用重組指令片段的地址與所述目標(biāo)地址在地址對(duì)應(yīng)表中建立一條記錄。
[0031]根據(jù)本發(fā)明另一個(gè)方面,提供一種計(jì)算機(jī)可讀介質(zhì),所述可讀介質(zhì)中存儲(chǔ)有計(jì)算機(jī)可執(zhí)行的程序代碼,所述程序代碼用于執(zhí)行上述方法的步驟。
[0032]根據(jù)本發(fā)明再一個(gè)方面,提供一種數(shù)據(jù)安全讀取裝置,包括:
[0033]指令運(yùn)行環(huán)境緩存和恢復(fù)單元,適于緩存和恢復(fù)指令運(yùn)行環(huán)境;
[0034]第一存儲(chǔ)位置,適于保存目標(biāo)地址;
[0035]指令獲取單元,與指令運(yùn)行環(huán)境緩存和恢復(fù)單元耦接,適于從第一存儲(chǔ)位置讀取目標(biāo)地址,并根據(jù)目標(biāo)地址獲取待調(diào)度的機(jī)器指令片段;其中,待調(diào)度機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0036]指令分析單元,適于分析所述待調(diào)度機(jī)器指令片段中每一條硬件指令并判斷所述硬件指令是否為讀取指令;
[0037]指令修改單元,適于查找映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改讀取指令中的讀取地址;所述映射位圖用于表示本地存儲(chǔ)地址的數(shù)據(jù)是否轉(zhuǎn)儲(chǔ)到所述安全存儲(chǔ)設(shè)備;和
[0038]指令重組單元,與指令運(yùn)行環(huán)境緩存和恢復(fù)單元耦接,適于在第一存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;還適于將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置的入口地址。
[0039]可選的,所述數(shù)據(jù)安全讀取裝置還包括:
[0040]同步單元,適于建立計(jì)算終端系統(tǒng)與所述安全存儲(chǔ)設(shè)備的通訊,并將映射位圖在所述計(jì)算終端系統(tǒng)和所述安全存儲(chǔ)設(shè)備之間進(jìn)行同步。
[0041]可選的,所述安全存儲(chǔ)設(shè)備為遠(yuǎn)程存儲(chǔ)設(shè)備,所述遠(yuǎn)程存儲(chǔ)設(shè)備被多個(gè)計(jì)算終端系統(tǒng)共享。
[0042]可選的,所述數(shù)據(jù)安全讀取裝置還包括:
[0043]指令檢索單元,適于利用所述目標(biāo)地址查找地址對(duì)應(yīng)表;所述地址對(duì)應(yīng)表用于表示待調(diào)度機(jī)器指令片段是否具有已保存的重組指令片段;
[0044]如果找到相應(yīng)的記錄,指令檢索單元還適于調(diào)用指令運(yùn)行環(huán)境緩存和恢復(fù)單元,恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到紀(jì)錄中的保存地址繼續(xù)執(zhí)行;
[0045]如果沒有找到相應(yīng)的記錄,指令檢索單元還適于利用重組指令片段的地址與所述目標(biāo)地址在地址對(duì)應(yīng)表中建立一條記錄。
[0046]可選的,所述數(shù)據(jù)安全讀取裝置還包括:
[0047]反匯編單元,適于在指令分析單元分析所述待調(diào)度的機(jī)器指令片段之前,反匯編所述待調(diào)度的機(jī)器指令片段,生成待調(diào)度的匯編指令片段;
[0048]匯編單元,適于匯編重組后的匯編指令片段,得到機(jī)器碼表示的重組指令片段。
[0049]與現(xiàn)有技術(shù)相比,本發(fā)明的裝置和方法提高了數(shù)據(jù)的安全性。
【專利附圖】
【附圖說明】
[0050]圖1是現(xiàn)有技術(shù)中計(jì)算設(shè)備的系統(tǒng)層次示意圖;
[0051]圖2是本發(fā)明一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組方法的流程圖;
[0052]圖3是本發(fā)明一個(gè)實(shí)施例中提供的重組指令片段的生成過程示意圖;
[0053]圖4是本發(fā)明另一個(gè)實(shí)施例中提供的圖2中步驟S102的流程圖;
[0054]圖5是本發(fā)明另一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組方法的流程圖,利用地址對(duì)應(yīng)表保存已經(jīng)重組過的指令片段;
[0055]圖6是本發(fā)明另一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組方法的流程圖,單獨(dú)開辟存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;
[0056]圖7是本發(fā)明另一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組方法的流程圖,針對(duì)非固定長度指令集進(jìn)行反匯編和匯編處理;
[0057]圖8是本發(fā)明另一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組方法的流程圖,以壓棧指令替代或記錄第一跳轉(zhuǎn)指令;
[0058]圖9a是本發(fā)明另一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組方法的流程圖,其中的運(yùn)行時(shí)指令重組方法綜合之前多個(gè)實(shí)施例中的特征;
[0059]圖9b-9d是圖9a中的運(yùn)行時(shí)指令重組方法在X86體系處理器上運(yùn)行時(shí)的操作過程不意圖;
[0060]圖10是本發(fā)明一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組裝置結(jié)構(gòu)示意圖;
[0061]圖11是本發(fā)明另一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組裝置結(jié)構(gòu)示意圖;
[0062]圖12是本發(fā)明另一個(gè)實(shí)施例中提供的指令重組單元結(jié)構(gòu)示意圖;
[0063]圖13是本發(fā)明另一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組裝置結(jié)構(gòu)示意圖;
[0064]圖14是本發(fā)明另一個(gè)實(shí)施例中提供的運(yùn)行時(shí)指令重組裝置結(jié)構(gòu)示意圖;
[0065]圖15是本發(fā)明一個(gè)實(shí)施例中計(jì)算設(shè)備的系統(tǒng)層次示意圖;[0066]圖16是本發(fā)明一個(gè)實(shí)施例中提供的數(shù)據(jù)安全存取過程中的初始化過程的流程圖;
[0067]圖17是本發(fā)明一個(gè)實(shí)施例中的Bitmap示意圖;
[0068]圖18是本發(fā)明一個(gè)實(shí)施例中提供的數(shù)據(jù)安全存儲(chǔ)方法的流程圖;
[0069]圖19是本發(fā)明一個(gè)實(shí)施例中提供的數(shù)據(jù)安全讀取方法的流程圖;
[0070]圖20是本發(fā)明一個(gè)實(shí)施例中提供的數(shù)據(jù)安全存取方法的流程圖;
[0071]圖21是本發(fā)明一個(gè)實(shí)施例中提供的數(shù)據(jù)安全傳輸方法的流程圖;
[0072]圖22是本發(fā)明一個(gè)實(shí)施例中網(wǎng)絡(luò)環(huán)境示意圖;
[0073]圖23是本發(fā)明一個(gè)實(shí)施例中提供的數(shù)據(jù)安全存儲(chǔ)裝置的結(jié)構(gòu)示意圖;
[0074]圖24是本發(fā)明一個(gè)實(shí)施例中提供的數(shù)據(jù)安全讀取裝置的結(jié)構(gòu)示意圖;
[0075]圖25是本發(fā)明一個(gè)實(shí)施例中提供的數(shù)據(jù)安全存儲(chǔ)和讀取裝置的結(jié)構(gòu)示意圖;
[0076]圖26是本發(fā)明另一個(gè)實(shí)施例中提供的數(shù)據(jù)安全存儲(chǔ)和讀取裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0077]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0078]公近
[0079]如圖1所示為現(xiàn)有技術(shù)中計(jì)算設(shè)備的系統(tǒng)層次示意圖,從上至下,計(jì)算設(shè)備包括:用戶界面層101,應(yīng)用層102,操作系統(tǒng)內(nèi)核層103,硬件映射層104以及硬件層105。
[0080]其中,用戶界面層101是用戶與設(shè)備之間的接口,用戶通過該層與設(shè)備(即設(shè)備的其他層次,例如應(yīng)用層102)進(jìn)行交互。應(yīng)用層102指應(yīng)用軟件層。
[0081]操作系統(tǒng)內(nèi)核層103是一種基于軟件的邏輯層,一般來講是由軟件數(shù)據(jù)和軟件代碼組成,相比于界面層101和應(yīng)用層102,操作系統(tǒng)內(nèi)核層103的代碼擁有更高的權(quán)限,可以對(duì)計(jì)算機(jī)系統(tǒng)中的各種軟硬件資源進(jìn)行完整的操作。
[0082]硬件映射層104是一種基于軟件的邏輯層,它一般工作在操作系統(tǒng)內(nèi)核層,擁有與內(nèi)核層相同的權(quán)限。硬件映射層主要是為了解決將不同類型的硬件的操作模式映射為一種統(tǒng)一的上層接口,向上屏蔽硬件的特殊性。一般來說,硬件映射層主要被操作系統(tǒng)內(nèi)核層103使用,來完成對(duì)各種硬件的操作。
[0083]硬件層105是指構(gòu)成計(jì)算機(jī)系統(tǒng)的所有硬件部件。
[0084]用戶通過用戶界面層101 (即處于用戶界面層101的用戶界面)對(duì)該計(jì)算設(shè)備進(jìn)行操作并得到圖形化或非圖形化反饋。以保存數(shù)據(jù)的操作為例,其過程包括:
[0085](I)用戶通過某應(yīng)用程序提供的用戶界面101,選擇“保存”功能;
[0086](2)應(yīng)用層102調(diào)用對(duì)應(yīng)代碼,將上述用戶操作轉(zhuǎn)化為一個(gè)或多個(gè)操作系統(tǒng)提供的接口函數(shù),即“保存”操作轉(zhuǎn)化成為對(duì)一系列操作系統(tǒng)內(nèi)核層103提供的接口函數(shù)的調(diào)用;
[0087](3)操作系統(tǒng)內(nèi)核層103將每一個(gè)操作系統(tǒng)接口函數(shù)轉(zhuǎn)化為一個(gè)或多個(gè)硬件映射層104提供的接口函數(shù);即“保存”操作轉(zhuǎn)化成為對(duì)一系列硬件映射層104提供的接口函數(shù)的調(diào)用;[0088](4)硬件映射層104將每一個(gè)自己提供的接口函數(shù)轉(zhuǎn)化為一個(gè)或多個(gè)硬件指令調(diào)用;最后,
[0089](5)硬件層105 (例如CPU)接收上述硬件指令調(diào)用并執(zhí)行硬件指令。
[0090]針對(duì)該計(jì)算設(shè)備,當(dāng)其被惡意代碼侵入后,惡意代碼可以從計(jì)算設(shè)備中取得所需數(shù)據(jù),竊取數(shù)據(jù)后其行為模式包括:
[0091](I)存儲(chǔ)行為:將目標(biāo)數(shù)據(jù)內(nèi)容保存到某個(gè)存儲(chǔ)位置;
[0092](2)傳輸行為:將竊取的數(shù)據(jù)直接通過網(wǎng)絡(luò)傳輸?shù)街付ǖ哪繕?biāo)地址。
[0093]另外,使用上述計(jì)算設(shè)備或信息設(shè)備的人員進(jìn)行內(nèi)部泄密的行為模式包括:
[0094](I)主動(dòng)泄密:涉密人員通過主動(dòng)拷貝、通過惡意工具穿透安全系統(tǒng)、置入木馬等手段直接取得涉密數(shù)據(jù),并進(jìn)行泄密;
[0095](2)被動(dòng)泄密:涉密人員使用的電腦或存儲(chǔ)介質(zhì)因保管不善丟失或使用不當(dāng)(例如將涉密裝備直接接入Internet)造成的泄密。
[0096]上述多種泄密方式使得該計(jì)算設(shè)備的數(shù)據(jù)安全無法保障。
[0097]發(fā)明人經(jīng)研究發(fā)現(xiàn),計(jì)算機(jī)運(yùn)行過程中,CPU地址寄存器保存下一條將要運(yùn)行的機(jī)器指令的地址,例如pc (program counter,程序計(jì)數(shù)器)指向的地址;獲取該寄存器中的數(shù)據(jù),并按照該數(shù)據(jù)指向的地址,讀取下一條或者多條將要運(yùn)行的機(jī)器指令,可以實(shí)現(xiàn)運(yùn)行時(shí)捕獲機(jī)器指令的目的。
[0098]并且,通過修改所述一條或多條機(jī)器指令所組成的待調(diào)度指令片段(例如在其中插入額外的跳轉(zhuǎn)指令,本文稱為指令重組),使得在該段指令運(yùn)行完畢之前重新獲得CPU執(zhí)行權(quán),并再次捕獲下一個(gè)待調(diào)度指令片段,可以實(shí)現(xiàn)運(yùn)行時(shí)連續(xù)捕獲機(jī)器指令的目的。
[0099]并且,在獲取到待調(diào)度指令片段后,還可以對(duì)其中的機(jī)器指令進(jìn)行分析以及處理,從而不僅可以實(shí)現(xiàn)運(yùn)行時(shí)指令捕獲、重組,還可以實(shí)現(xiàn)對(duì)預(yù)定的目標(biāo)指令的管理。
[0100]指令重組或指令追蹤
[0101]基于上述分析和發(fā)現(xiàn),本發(fā)明的一個(gè)實(shí)施例中提供了一種運(yùn)行時(shí)指令重組方法,該方法運(yùn)行時(shí)稱為指令重組平臺(tái)。如圖2所示,該方法SlOO包括:
[0102]S101,緩存指令運(yùn)行環(huán)境;所述指令運(yùn)行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運(yùn)行的機(jī)器指令的地址,該地址為第一地址;
[0103]S102,獲取待調(diào)度的機(jī)器指令片段;其中,待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0104]S103,在所述第一跳轉(zhuǎn)指令前,插入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址,即執(zhí)行該第二跳轉(zhuǎn)指令后,執(zhí)行步驟 SlOl ;
[0105]S104,將所述地址寄存器中的第一地址修改為第二地址;和
[0106]S105,恢復(fù)所述指令運(yùn)行環(huán)境。
[0107]在本實(shí)施例中,上述運(yùn)行時(shí)指令重組方法在X86架構(gòu)的CPU上執(zhí)行;在本發(fā)明的其他實(shí)施例中,上述運(yùn)行時(shí)指令重組方法也可以在MIPS處理器或基于ARM架構(gòu)的處理器上執(zhí)行。本領(lǐng)域普通技術(shù)人員可以理解,上述方法可以在計(jì)算設(shè)備中的任何其他類型的指令處理單元上執(zhí)行。
[0108]其中,在步驟SlOl中,所述緩存指令運(yùn)行環(huán)境可以包括:[0109]向緩存棧中壓入CPU機(jī)器指令運(yùn)行相關(guān)的寄存器數(shù)據(jù)。
[0110]在本發(fā)明的其他實(shí)施例中,緩存或保存指令運(yùn)行環(huán)境也可以在指定的、默認(rèn)的其他緩存數(shù)據(jù)結(jié)構(gòu)和地址中進(jìn)行。
[0111]在步驟SlOl中,所述地址寄存器可以為CPU地址寄存器。
[0112]在步驟S102中,待調(diào)度的機(jī)器指令片段中最后一條指令為第一跳轉(zhuǎn)指令,待調(diào)度的機(jī)器指令片段中只有一條跳轉(zhuǎn)指令,待調(diào)度的機(jī)器指令片段包括所述第一跳轉(zhuǎn)指令以及其之前的所有待調(diào)度的機(jī)器指令。
[0113]在步驟S103中,在所述待調(diào)度的機(jī)器指令片段的最后一條指令(即第一跳轉(zhuǎn)指令JPl)前,插入第二跳轉(zhuǎn)指令JP2,所述JP2指向指令重組平臺(tái)的入口地址,生成具有第二地址A"的重組指令片段。
[0114]插入第二跳轉(zhuǎn)指令是為了在CPU運(yùn)行所述待調(diào)度的機(jī)器指令片段時(shí),在JPl運(yùn)行前,重新開始運(yùn)行所述指令重組平臺(tái),這樣,指令重組平臺(tái)就可以繼續(xù)分析下一段待調(diào)度的機(jī)器指令片段,從而通過重復(fù)本方法來完成對(duì)所有運(yùn)行時(shí)指令的重組。
[0115]在步驟S105中,恢復(fù)所述指令運(yùn)行環(huán)境可以包括:
[0116]從緩存棧中彈出指令運(yùn)行相關(guān)的寄存器數(shù)據(jù);其中地址寄存器保存的跳轉(zhuǎn)指令的目標(biāo)地址已經(jīng)修改為以第二地址A"為入口地址的新的機(jī)器指令片段。
[0117]步驟S105執(zhí)行后,恢復(fù)了所述指令運(yùn)行環(huán)境,指令重組平臺(tái)完成一次運(yùn)行,CPU執(zhí)行所述重組指令片段,即CPU將執(zhí)行以第二地址A"為入口地址的機(jī)器指令片段。重組指令片段執(zhí)行到第二跳轉(zhuǎn)指令JP2時(shí),所述指令重組平臺(tái)重新得到CPU控制權(quán)(即執(zhí)行步驟S101),此時(shí)第一跳轉(zhuǎn)指令的目標(biāo)地址已經(jīng)得到,該目標(biāo)地址為新的第一地址,繼而重新執(zhí)行步驟SlOl?步驟S105。
[0118]下面結(jié)合圖3,進(jìn)一步說明指令重組過程和重組指令片段的生成過程。
[0119]圖3中包括待調(diào)度的機(jī)器指令集合401 (例如已經(jīng)載入內(nèi)存中的某程序的機(jī)器指令),其中指令4012為第一跳轉(zhuǎn)指令,如果指令4012的目標(biāo)地址為變量,則首先假設(shè)指令4012指向機(jī)器指令4013 ;從第一跳轉(zhuǎn)指令4012以前的包括第一跳轉(zhuǎn)指令4012的所有待調(diào)度的機(jī)器指令構(gòu)成了機(jī)器指令片段4011。
[0120]當(dāng)指令重組方法運(yùn)行后(指令重組平臺(tái)411),首先緩存指令運(yùn)行環(huán)境;然后獲取(例如拷貝)機(jī)器指令片段4011 ;指令重組平臺(tái)在第一跳轉(zhuǎn)指令4012前插入了第二跳轉(zhuǎn)指令4113,第二跳轉(zhuǎn)指令4113指向指令重組平臺(tái)411本身,從而生成了重組指令片段4111,重組指令片段的地址為A";將所述緩存的指令運(yùn)行環(huán)境中的地址寄存器的值A(chǔ)修改為地址A";最后恢復(fù)所述指令運(yùn)行環(huán)境。
[0121]指令重組平臺(tái)411結(jié)束運(yùn)行后,CPU執(zhí)行以A"為地址的重組指令片段,當(dāng)執(zhí)行到第二跳轉(zhuǎn)指令4113時(shí),指令重組平臺(tái)411會(huì)重新獲得CPU控制權(quán)。此時(shí),第一跳轉(zhuǎn)指令4012的目標(biāo)地址4013已經(jīng)生成,該目標(biāo)地址為新的第一地址,指令重組平臺(tái)根據(jù)該目標(biāo)地址重新開始執(zhí)行步驟SlOl?步驟S105,繼續(xù)分析后續(xù)的待調(diào)度的機(jī)器指令,從而完成了運(yùn)行時(shí)指令重組的方法。
[0122]根據(jù)本發(fā)明另一個(gè)實(shí)施例,如圖4所示,在步驟S102中,獲取待調(diào)度的機(jī)器指令片段可以包括:
[0123]S1021,從地址寄存器(例如CPU地址寄存器)讀取待調(diào)度的機(jī)器指令地址;[0124]S1022,以跳轉(zhuǎn)指令為檢索目標(biāo),檢索所述機(jī)器指令地址指向的機(jī)器指令及其后續(xù)指令,直到發(fā)現(xiàn)第一個(gè)跳轉(zhuǎn)指令(稱為第一跳轉(zhuǎn)指令);所述跳轉(zhuǎn)指令指能夠改變機(jī)器指令順序執(zhí)行流程的機(jī)器指令,包括Jump指令、Call指令、Return指令等;
[0125]S1023,將所述第一跳轉(zhuǎn)指令以及其之前的所有待調(diào)度的機(jī)器指令作為一個(gè)待調(diào)度的機(jī)器指令片段;將該機(jī)器指令片段保存在指令重組平臺(tái)中,或其他指令重組平臺(tái)能夠讀取的存儲(chǔ)位置。
[0126]在本發(fā)明的其他實(shí)施例中,獲取待調(diào)度的機(jī)器指令片段也可以以非跳轉(zhuǎn)指令(例如寫入指令、讀取指令等)為檢索目標(biāo),進(jìn)一步切分機(jī)器指令片段。由于在這樣的實(shí)施例中,也需要保證在待調(diào)度跳轉(zhuǎn)指令執(zhí)行后指令重組平臺(tái)仍能夠獲取CPU控制權(quán)或執(zhí)行權(quán),所以跳轉(zhuǎn)指令需要作為第二檢索目標(biāo),從而得到粒度更小的機(jī)器指令片段。
[0127]根據(jù)本發(fā)明另一個(gè)實(shí)施例,在步驟S102和S103之間,所述運(yùn)行時(shí)指令重組方法還可以包括:
[0128]利用指令集匹配所述待調(diào)度的機(jī)器指令片段,得到目標(biāo)機(jī)器指令;所述指令集包括X86,MIPS和ARM指令集;和
[0129]按照預(yù)定的方式,修改所述目標(biāo)機(jī)器指令。
[0130]不僅可以完成運(yùn)行時(shí)指令監(jiān)控,還可以進(jìn)行其他處理過程,相關(guān)實(shí)施例將在后面詳細(xì)介紹。
[0131]進(jìn)一步的,為了提高指令重組方法的效率,可以將固定地址跳轉(zhuǎn)指令所指向的待調(diào)度指令在步驟S102中一并獲取。
[0132]根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種運(yùn)行時(shí)指令重組方法,該方法S300包括:
[0133]S301,緩存指令運(yùn)行環(huán)境;所述指令運(yùn)行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運(yùn)行的機(jī)器指令的地址,該地址為第一地址;
[0134]S302,獲取待調(diào)度的機(jī)器指令片段;其中,待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0135]S303,在所述第一跳轉(zhuǎn)指令前,插入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址,即執(zhí)行該第二跳轉(zhuǎn)指令后,執(zhí)行步驟 S301 ;
[0136]S304,將所述地址寄存器中的第一地址修改為第二地址;
[0137]S305,恢復(fù)所述指令運(yùn)行環(huán)境。
[0138]與之前的實(shí)施例中所提供的方法相比,區(qū)別在于:在步驟S302中,待調(diào)度的機(jī)器指令片段中可以包括多條跳轉(zhuǎn)指令;跳轉(zhuǎn)指令中只有一條參數(shù)地址跳轉(zhuǎn)指令,稱為第一跳轉(zhuǎn)指令。
[0139]需要說明的是,跳轉(zhuǎn)指令可以包括兩類,參數(shù)地址跳轉(zhuǎn)指令和常數(shù)地址跳轉(zhuǎn)指令,其中,常數(shù)地址跳轉(zhuǎn)指令的跳轉(zhuǎn)地址為常數(shù)(即立即數(shù)),而參數(shù)地址跳轉(zhuǎn)指令中的參數(shù)地址一般在跳轉(zhuǎn)指令之前的一條機(jī)器指令中計(jì)算得到。
[0140]相似地,待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;待調(diào)度的機(jī)器指令片段包括所述第一跳轉(zhuǎn)指令以及其之前的所有待調(diào)度的機(jī)器指令。
[0141]進(jìn)一步的,由于程序運(yùn)行過程中所生成的機(jī)器指令具有很高的重復(fù)性,為了提高指令重組方法的效率,節(jié)省計(jì)算設(shè)備的計(jì)算資源(CPU資源),可以利用少量的存儲(chǔ)空間來保存重組指令片段。
[0142]根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種運(yùn)行時(shí)指令重組方法。如圖5所示,該方法S200包括:
[0143]S201,緩存指令運(yùn)行環(huán)境;所述指令運(yùn)行環(huán)境包括地址寄存器(例如CPU地址寄存器)(一般來說,指令運(yùn)行環(huán)境是指CPU的所有寄存器,包括通用寄存器,狀態(tài)寄存器,地址寄存器等),地址寄存器保存下一條將要運(yùn)行的機(jī)器指令的地址,該地址為第一地址;
[0144]S202,利用所述第一地址查找地址對(duì)應(yīng)表;所述地址對(duì)應(yīng)表用于表不第一地址A指向的待調(diào)度指令片段是否具有已保存的重組指令片段,地址對(duì)應(yīng)表的數(shù)據(jù)為地址對(duì);
[0145]S203,如果找到相應(yīng)的記錄,將所述第一地址A(即地址寄存器的值A(chǔ))修改為已保存的重組指令片段的地址A’ ;
[0146]S204,如果沒有找到相應(yīng)的記錄,獲取待調(diào)度的機(jī)器指令片段;其中,待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0147]S205,在所述第一跳轉(zhuǎn)指令前,插入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址,即執(zhí)行該第二跳轉(zhuǎn)指令后,執(zhí)行步驟 S201 ;
[0148]S206,將所述地址寄存器中的第一地址修改為第二地址;
[0149]S207,恢復(fù)所述指令運(yùn)行環(huán)境。
[0150]進(jìn)一步的,步驟S206還包括:利用第二地址A"與第一地址A在所述地址對(duì)應(yīng)表中建立地址對(duì)(或一條記錄)。具有地址A"的重組指令片段被保存在重組指令平臺(tái)中,以
供重用。
[0151]本方法利用地址對(duì)應(yīng)表,節(jié)省計(jì)算資源,提高運(yùn)行時(shí)指令重組的效率。
[0152]上述重組方法一般通過在待調(diào)度指令片段之中插入所需跳轉(zhuǎn)指令完成,在本發(fā)明其他實(shí)施例中,也可以通過其他方式完成重組指令片段的生成。下面將結(jié)合實(shí)施例詳細(xì)介紹。
[0153]根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種指令重組方法,單獨(dú)開辟存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址。如圖6所示,該方法SllO包括:
[0154]S111,緩存指令運(yùn)行環(huán)境;
[0155]S112,從第一存儲(chǔ)位置讀取目標(biāo)地址,根據(jù)目標(biāo)地址獲取待調(diào)度(即待執(zhí)行)的機(jī)器指令片段;其中,待調(diào)度機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0156]S113,在第一存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;
[0157]S114,將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址,即執(zhí)行該第二跳轉(zhuǎn)指令后,執(zhí)行步驟Slll ;
[0158]S115,恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0159]其中,在步驟S112中,獲取待調(diào)度的機(jī)器指令片段可以包括:
[0160]S1121、以跳轉(zhuǎn)指令為檢索目標(biāo),檢索所述機(jī)器指令地址指向的機(jī)器指令及其后續(xù)指令,直到發(fā)現(xiàn)第一個(gè)跳轉(zhuǎn)指令(稱為第一跳轉(zhuǎn)指令);
[0161]所述跳轉(zhuǎn)指令指能夠改變機(jī)器指令順序執(zhí)行流程的機(jī)器指令,包括Jump指令、Call指令、Return指令等;[0162]S1122、將所述第一跳轉(zhuǎn)指令以及其之前的所有待調(diào)度的機(jī)器指令作為一個(gè)待調(diào)度的機(jī)器指令片段;將該機(jī)器指令片段保存在指令重組平臺(tái)中,或其他指令重組平臺(tái)能夠讀取的存儲(chǔ)位置。
[0163]在步驟S113中,目標(biāo)地址即跳轉(zhuǎn)指令的目標(biāo)地址參數(shù),其可以是立即數(shù)或變量參數(shù),對(duì)于立即數(shù)保存其值,對(duì)于變量參數(shù)保存其地址/引用。當(dāng)處理器即將執(zhí)行某跳轉(zhuǎn)指令時(shí),其跳轉(zhuǎn)目標(biāo)地址已經(jīng)計(jì)算完畢。
[0164]根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種指令重組方法,針對(duì)非固定長度指令集進(jìn)行反匯編和匯編處理。如圖7所示,該方法包括:
[0165]S121,緩存指令運(yùn)行環(huán)境;
[0166]S122,從第一存儲(chǔ)位置讀取目標(biāo)地址,根據(jù)目標(biāo)地址獲取待調(diào)度指令片段:
[0167]從目標(biāo)地址開始,獲取待調(diào)度的一段機(jī)器指令,將該段機(jī)器指令進(jìn)行反匯編,并將反匯編結(jié)果通過一個(gè)詞法分析器進(jìn)行處理并匹配是否其中包含跳轉(zhuǎn)指令,如果不包含則繼續(xù)獲取下一段待調(diào)度的機(jī)器指令重復(fù)上述操作,直到匹配到跳轉(zhuǎn)指令為止,該跳轉(zhuǎn)指令為第一跳轉(zhuǎn)指令;第一跳轉(zhuǎn)指令以及之前的所有指令組成待調(diào)度指令片段;
[0168]S123,在第一存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;
[0169]S124,將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址;本實(shí)施例中,該第一跳轉(zhuǎn)指令和第二跳轉(zhuǎn)指令皆為匯編指令;
[0170]S125,將生成的重組后的匯編代碼通過匯編器生成對(duì)應(yīng)的機(jī)器碼;和
[0171]S126,恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0172]根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種指令重組方法,以壓棧指令替代或記錄第一跳轉(zhuǎn)指令。如圖8所示,該方法S130包括:
[0173]S131,緩存指令運(yùn)行環(huán)境;
[0174]S132,獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計(jì)算下一條即將運(yùn)行的指令地址,該地址為第一地址;
[0175]S133,根據(jù)第一地址獲取待調(diào)度/執(zhí)行的機(jī)器指令片段;其中,待調(diào)度機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0176]S134,替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù);
[0177]S135,在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址;和
[0178]S136,恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0179]本領(lǐng)域普通技術(shù)人員可以理解,上述各個(gè)實(shí)施例中提供的功能或特征可以根據(jù)實(shí)際的需要疊加在同一個(gè)實(shí)施例中,這里就不再一一組合給出,下面只舉一個(gè)例子進(jìn)行示例性說明。
[0180]根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種指令重組方法,如圖9a所示,包括:
[0181](I)緩存指令運(yùn)行環(huán)境,所述指令運(yùn)行環(huán)境包括全部的CPU環(huán)境和內(nèi)存環(huán)境;獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計(jì)算下一條即將運(yùn)行的指令地址(第零地址),將第一地址設(shè)置為第零地址;[0182](2)利用第一地址來查找地址對(duì)應(yīng)表(也稱為地址查找表),如果找到記錄,恢復(fù)所緩存的指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到找到的對(duì)應(yīng)地址(在地址對(duì)應(yīng)表中的地址對(duì)內(nèi))繼續(xù)執(zhí)行;
[0183](3)如果沒有找到記錄,從第一地址開始獲取待執(zhí)行的機(jī)器指令片段,指令片段的結(jié)尾為跳轉(zhuǎn)指令(跳轉(zhuǎn)指令所在地址為第三地址);
[0184](4)從第一地址開始,將機(jī)器碼進(jìn)行反匯編,并將反匯編結(jié)果通過一個(gè)詞法分析器進(jìn)行處理,生成重組后的匯編代碼,直到第三地址為止;
[0185](5)判斷第三地址處的代碼是否可以進(jìn)一步處理,即第三地址處的跳轉(zhuǎn)指令的目標(biāo)地址為已知量(例如,立即數(shù)),如果可以,將第一地址設(shè)置為第三地址(或第三地址的目標(biāo)地址),重新開始執(zhí)行(3);
[0186](6)如果不可以,在生成的重組后的匯編代碼最后,加入壓棧指令記錄當(dāng)前第三地址的原始地址位置(即第三地址的值)和操作數(shù),并在壓棧指令之后加入跳轉(zhuǎn)至重組平臺(tái)開始的指令,即能夠使步驟(I)再次開始執(zhí)行;
[0187](7)將生成的重組后的匯編代碼通過匯編器生成對(duì)應(yīng)的機(jī)器碼,并存儲(chǔ)于重組地址空間中分配出的地址(第二地址),并將第二地址和第零地址以對(duì)應(yīng)地址對(duì)的形式存儲(chǔ)于地址對(duì)應(yīng)表中;
[0188](8)恢復(fù)環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0189]為了方便理解,現(xiàn)以X86體系處理器運(yùn)行該實(shí)施例提供的方法進(jìn)行說明,參考圖9b-9d,指令重組的一個(gè)示例過程如下;
[0190](I)重組平臺(tái)開始工作后,首先緩存當(dāng)前指令運(yùn)行環(huán)境;獲取棧中保存的跳轉(zhuǎn)指令的地址和參數(shù),計(jì)算下一條即將運(yùn)行的指令地址,該地址為第一地址。
[0191](2)利用第一地址來查找地址對(duì)應(yīng)表,如果找到記錄,恢復(fù)所緩存的指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到找到的對(duì)應(yīng)地址繼續(xù)執(zhí)行(圖%);如果沒有找到記錄,進(jìn)行如下操作(圖9c)。
[0192](3)-(6)從第一地址開始,將機(jī)器碼進(jìn)行反匯編,并將反匯編結(jié)果通過一個(gè)詞法分析器進(jìn)行處理,生成重組代碼;
[0193]對(duì)該段匯編代碼進(jìn)行檢索,檢查是否包含跳轉(zhuǎn)指令;
[0194]對(duì)第一個(gè)跳轉(zhuǎn)指令進(jìn)行分析,判斷其跳轉(zhuǎn)目標(biāo)地址是否為已知量,如果是已知量,則繼續(xù)尋找,直到找到第一條參數(shù)地址跳轉(zhuǎn)指令,稱為第一跳轉(zhuǎn)指令,該指令的地址為第三地址;
[0195]在生成的匯編代碼(從第一地址到第三地址的機(jī)器指令,不包括第一跳轉(zhuǎn)指令)最后加入壓棧指令記錄當(dāng)前第三地址的第一跳轉(zhuǎn)的原始地址位置和操作數(shù);
[0196]在壓棧指令之后加入跳轉(zhuǎn)至重組平臺(tái)開始的指令(第二跳轉(zhuǎn)指令)。
[0197](7)將生成的匯編代碼通過匯編器生成對(duì)應(yīng)的機(jī)器碼,并存儲(chǔ)于重組地址空間中分配出的地址(第二地址);
[0198]將第二地址和第零地址以對(duì)應(yīng)地址對(duì)的形式存儲(chǔ)于地址對(duì)應(yīng)表中。
[0199](8)恢復(fù)環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0200](圖9d)處理器開始執(zhí)行第二地址的指令,之前的待重組指令片段中的跳轉(zhuǎn)指令已經(jīng)替換為壓棧指令和跳轉(zhuǎn)去重組平臺(tái)的指令,壓棧指令主要的目的是向重組平臺(tái)提供輸入?yún)?shù)。(圖9d)當(dāng)執(zhí)行到第二跳轉(zhuǎn)指令時(shí),重組平臺(tái)重新得到執(zhí)行,進(jìn)行上述的步驟(I),通過查看壓棧指令中保存的跳轉(zhuǎn)指令的地址和參數(shù),計(jì)算下一條即將運(yùn)行的指令地址,該地址為第一地址。
[0201 ] 之后的處理即上述過程的循環(huán)。
[0202]進(jìn)一步的,為了從系統(tǒng)啟動(dòng)后即執(zhí)行運(yùn)行時(shí)的指令監(jiān)控,實(shí)現(xiàn)計(jì)算設(shè)備運(yùn)行階段的運(yùn)行時(shí)指令全監(jiān)控,本發(fā)明另一個(gè)實(shí)施例中,修改計(jì)算機(jī)啟動(dòng)時(shí)的load指令,在load指令執(zhí)行前調(diào)用本發(fā)明提供的指令重組平臺(tái),執(zhí)行上述運(yùn)行時(shí)指令重組方法,由于load指令跳轉(zhuǎn)地址為已知的固定地址,指令重組平臺(tái)可以事先建立好地址對(duì)應(yīng)表及該第一條記錄,并建立好第一個(gè)重組指令片段。
[0203]進(jìn)一步的,根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種計(jì)算機(jī)可讀介質(zhì),其中,所述可讀介質(zhì)中存儲(chǔ)有計(jì)算機(jī)可執(zhí)行的程序代碼,所述程序代碼用于執(zhí)行上述實(shí)施例中提供的運(yùn)行時(shí)指令重組方法的步驟。
[0204]進(jìn)一步的,根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種計(jì)算機(jī)程序,其中,所述計(jì)算機(jī)程序包含上述實(shí)施例中提供的運(yùn)行時(shí)指令重組方法的步驟。
[0205]針對(duì)數(shù)據(jù)安全的指令重組
[0206]上述的運(yùn)行時(shí)指令重組方法為進(jìn)一步的應(yīng)用提供了基礎(chǔ)。下面的實(shí)施例中提供了各種針對(duì)不同機(jī)器指令進(jìn)行處理的運(yùn)行時(shí)指令重組方法,其中包括存儲(chǔ)/讀取指令,I/o指令,以及網(wǎng)絡(luò)傳輸指令:
[0207](I)存儲(chǔ)/讀取指令指計(jì)算機(jī)系統(tǒng)中所有對(duì)外部存儲(chǔ)設(shè)備(包括但不限于磁盤、移動(dòng)存儲(chǔ)、光存儲(chǔ))進(jìn)行存儲(chǔ)/讀取的指令或指令組合。
[0208](2) I/O指令指計(jì)算機(jī)系統(tǒng)中所有操作外設(shè)的地址空間的指令,這些指令最終會(huì)影響外設(shè)輸入輸出狀態(tài)、數(shù)據(jù)、信號(hào)等。這里的輸入輸出地址空間包括但不限于(I/O地址空間、內(nèi)存映射I/O設(shè)備地址空間)。
[0209](3)網(wǎng)絡(luò)傳輸指令指計(jì)算機(jī)系統(tǒng)中所有影響網(wǎng)絡(luò)設(shè)備的指令,這些指令最終會(huì)影響計(jì)算機(jī)系統(tǒng)網(wǎng)絡(luò)設(shè)備的傳輸、狀態(tài)、數(shù)據(jù)、信號(hào)等所有相關(guān)特性。
[0210]其中,存儲(chǔ)/讀取指令與I/O指令之間可以存在交集。
[0211]根據(jù)本發(fā)明一個(gè)實(shí)施例,提供一種針對(duì)存儲(chǔ)/讀取指令的運(yùn)行時(shí)指令重組方法S400,包括:
[0212]S401,緩存指令運(yùn)行環(huán)境;所述指令運(yùn)行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運(yùn)行的機(jī)器指令的地址,該地址為第一地址;
[0213]S402,利用所述第一地址查找地址對(duì)應(yīng)表;
[0214]S403,如果找到相應(yīng)的記錄,將所述第一地址A修改為已保存的重組指令片段的地址A’ ;
[0215]S404,如果沒有找到相應(yīng)的記錄,重組指令片段的生成方法包括:
[0216]S4041,獲取待調(diào)度機(jī)器指令片段;其中,待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;與步驟S102相同;
[0217]S4042,反匯編所述待調(diào)度機(jī)器指令片段,得到匯編指令片段;
[0218]S4043,檢索目標(biāo)匯編指令,所述目標(biāo)匯編指令為存儲(chǔ)/讀取指令;
[0219]S4044,如果檢索得到所述匯編指令片段中的存儲(chǔ)/讀取指令,修改其中的存儲(chǔ)和讀取地址為安全存儲(chǔ)設(shè)備上的地址;修改方式可以為本地地址空間和安全存儲(chǔ)設(shè)備地址空間之間的直接映射;
[0220]S4045,在所述第一跳轉(zhuǎn)指令JPl前,插入第二跳轉(zhuǎn)指令JP2,所述JP2指向指令重組平臺(tái)的入口地址;
[0221]S4046,匯編修改過的匯編指令片段,生成具有地址A"的重組機(jī)器指令片段;
[0222]S4047,利用重組機(jī)器指令片段地址A"與第一地址A在所述地址對(duì)應(yīng)表中建立一條記錄(或地址對(duì)),具有地址A"的重組指令片段被保存在重組指令平臺(tái)中;
[0223]S4048,將第一地址A修改為第二地址A";
[0224]S405,恢復(fù)所述指令運(yùn)行環(huán)境。
[0225]本實(shí)施例是在反匯編步驟之后進(jìn)行指令處理的;在其他實(shí)施例中,也可以省略反匯編和對(duì)應(yīng)的匯編步驟,直接處理機(jī)器指令。
[0226]在步驟S4044中,針對(duì)存儲(chǔ)和讀取指令進(jìn)行操作,修改其中的目標(biāo)和源地址,以實(shí)現(xiàn)存儲(chǔ)重定位/重定向,確保數(shù)據(jù)安全。更具體的安全存儲(chǔ)/讀取的方法將在本發(fā)明提供的下面的實(shí)施例中介紹。
[0227]根據(jù)本發(fā)明一個(gè)實(shí)施例,提供一種針對(duì)I/O指令的運(yùn)行時(shí)指令重組方法S500,包括:
[0228]S501,緩存指令運(yùn)行環(huán)境;所述指令運(yùn)行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運(yùn)行的機(jī)器指令的地址,該地址為第一地址;
[0229]S502,利用所述第一地址查找地址對(duì)應(yīng)表;
[0230]S503,如果找到相應(yīng)的記錄,將所述第一地址A修改為已保存的重組指令片段的地址A’ ;
[0231]S504,如果沒有找到相應(yīng)的記錄,重組指令片段的生成方法包括:
[0232]S5041,獲取待調(diào)度機(jī)器指令片段;其中,待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;與步驟S102相同;
[0233]S5042,反匯編所述機(jī)器指令片段,得到匯編指令片段;
[0234]S5043,檢索目標(biāo)匯編指令,所述目標(biāo)匯編指令為I/O指令;
[0235]S5044,如果檢索得到所述匯編指令片段中的I/O指令,將所述I/O指令中的輸入指令全部阻止;
[0236]S5045,在所述第一跳轉(zhuǎn)指令JPl前,插入第二跳轉(zhuǎn)指令JP2,所述JP2指向指令重組平臺(tái)的入口地址;
[0237]S5046,匯編修改過的匯編指令片段,生成具有地址A"的重組機(jī)器指令片段;
[0238]S5047,利用重組機(jī)器指令片段地址A"與第一地址A在所述地址對(duì)應(yīng)表中建立一條記錄(或地址對(duì)),具有地址A"的重組指令片段被保存在重組指令平臺(tái)中;
[0239]S5048,將第一地址A修改為第二地址A";
[0240]S505,恢復(fù)所述指令運(yùn)行環(huán)境。
[0241]本實(shí)施例是在反匯編步驟之后進(jìn)行指令處理的;在其他實(shí)施例中,也可以省略反匯編和對(duì)應(yīng)的匯編步驟,直接處理機(jī)器指令。
[0242]在步驟S5044中,針對(duì)I/O指令進(jìn)行操作,將所述I/O指令中的輸入指令全部阻止,以實(shí)現(xiàn)徹底阻斷對(duì)本地硬件設(shè)備的寫操作;結(jié)合上一個(gè)實(shí)施例中的存儲(chǔ)指令處理過程,還可以實(shí)現(xiàn)對(duì)除存儲(chǔ)指令之外的輸入指令的阻止,可以提高計(jì)算設(shè)備中的數(shù)據(jù)安全性。
[0243]根據(jù)本發(fā)明一個(gè)實(shí)施例,提供一種針對(duì)網(wǎng)絡(luò)傳輸指令的運(yùn)行時(shí)指令重組方法S600,包括:
[0244]S601,緩存指令運(yùn)行環(huán)境;所述指令運(yùn)行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運(yùn)行的機(jī)器指令的地址,該地址為第一地址;
[0245]S602,利用所述第一地址查找地址對(duì)應(yīng)表;
[0246]S603,如果找到相應(yīng)的記錄,將所述第一地址A修改為已保存的重組指令片段的地址A’ ;
[0247]S604,如果沒有找到相應(yīng)的記錄,重組指令片段的生成方法包括:
[0248]S6041,獲取待調(diào)度機(jī)器指令片段;其中,待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;與步驟S102相同;
[0249]S6042,反匯編所述待調(diào)度機(jī)器指令片段,得到匯編指令片段;
[0250]S6043,檢索目標(biāo)匯編指令,所述目標(biāo)匯編指令為網(wǎng)絡(luò)傳輸指令;
[0251]S6044,如果檢索得到所述匯編指令片段中的網(wǎng)絡(luò)傳輸指令,檢驗(yàn)所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對(duì)應(yīng)的遠(yuǎn)端計(jì)算設(shè)備是否為安全地址,如果不是,阻止所述網(wǎng)絡(luò)傳輸指令;
[0252]S6045,在所述第一跳轉(zhuǎn)指令JPl前,插入第二跳轉(zhuǎn)指令JP2,所述JP2指向指令重組平臺(tái)的入口地址;
[0253]S6046,匯編修改過的匯編指令片段,生成具有地址A"的重組機(jī)器指令片段;
[0254]S6047,利用重組機(jī)器指令片段地址A"與第一地址A在所述地址對(duì)應(yīng)表中建立一條記錄(或地址對(duì)),具有地址A"的重組指令片段被保存在重組指令平臺(tái)中;
[0255]S6048,將第一地址A修改為第二地址A";
[0256]S605,恢復(fù)所述指令運(yùn)行環(huán)境。
[0257]在步驟S6044中,阻止/拒絕網(wǎng)絡(luò)傳輸指令可以通過在重組后的代碼中插入一到多條指令來將本身的傳輸指令替換為“取消當(dāng)前操作的指令”或直接替換為無效指令,要視硬件的不同而定。
[0258]本實(shí)施例是在反匯編步驟之后進(jìn)行指令處理的;在其他實(shí)施例中,也可以省略反匯編和對(duì)應(yīng)的匯編步驟,直接處理機(jī)器指令。
[0259]在步驟S6044中,針對(duì)網(wǎng)絡(luò)傳輸指令進(jìn)行操作,檢驗(yàn)所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對(duì)應(yīng)的遠(yuǎn)端計(jì)算設(shè)備是否為安全地址;如果不是,阻止所述網(wǎng)絡(luò)傳輸指令,以實(shí)現(xiàn)數(shù)據(jù)安全傳輸。
[0260]上述多個(gè)實(shí)施例中的地址對(duì)應(yīng)表是由指令重組平臺(tái)建立并維護(hù)的,可以是固定長度的數(shù)組結(jié)構(gòu),也可以是可變長度的鏈表結(jié)構(gòu),還可以是其他存儲(chǔ)二元數(shù)據(jù)的適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu)。優(yōu)選的,其長度可調(diào)節(jié),并且其占用空間可釋放。釋放地址對(duì)應(yīng)表的操作可以隨機(jī)進(jìn)行,也可以周期進(jìn)行。在一些實(shí)施例中,所述的地址對(duì)應(yīng)表還可以包括記錄建立時(shí)間字段,用于在釋放空間刪除記錄時(shí),按照建立時(shí)間的長短刪除記錄。在一些實(shí)施例中,所述的地址對(duì)應(yīng)表還可以包括記錄使用次數(shù)字段,在查找地址對(duì)應(yīng)表步驟中,如果找到,將改變?cè)撟侄蔚闹?;所述記錄使用次?shù)字段也用于在釋放空間刪除記錄時(shí),按照使用次數(shù)的多少刪除記錄。[0261]另外,本領(lǐng)域的技術(shù)人員可以理解,上述指令重組方法(即運(yùn)行時(shí)指令重組方法)可使用軟件或硬件的方法實(shí)現(xiàn):
[0262](I)如果以軟件實(shí)現(xiàn),則上述方法對(duì)應(yīng)的步驟以軟件代碼的形式存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,成為軟件產(chǎn)品;
[0263](2)如果以硬件實(shí)現(xiàn),則上述方法對(duì)應(yīng)的步驟以硬件代碼(例如Verilog)描述,并固化(經(jīng)過物理設(shè)計(jì)/布局布線/晶圓廠流片等過程)成為芯片產(chǎn)品(例如處理器產(chǎn)品)。下面將詳細(xì)介紹。
[0264]指令重組裝置
[0265]與上述運(yùn)行時(shí)指令重組方法SlOO相對(duì)應(yīng),根據(jù)本發(fā)明一個(gè)實(shí)施例,提供一種運(yùn)行時(shí)指令重組裝置。如圖10所示,指令重組裝置500包括:
[0266]指令運(yùn)行環(huán)境緩存和恢復(fù)單元501,適于緩存和恢復(fù)指令運(yùn)行環(huán)境;所述指令運(yùn)行環(huán)境包括地址寄存器,該地址寄存器保存下一條將要運(yùn)行的機(jī)器指令的地址,該地址為第一地址;
[0267]指令獲取單元502,適于在單元501緩存指令運(yùn)行環(huán)境后,獲取待調(diào)度的機(jī)器指令片段;其中,待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0268]指令重組單元503,適于解析、修改所述待調(diào)度的機(jī)器指令片段,包括:在第一跳轉(zhuǎn)指令前,插入第二跳轉(zhuǎn)指令,生成具有第二地址A"的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置500,即執(zhí)行該第二跳轉(zhuǎn)指令后,裝置500的指令運(yùn)行環(huán)境緩存和恢復(fù)單元501進(jìn)行下一次處理;和
[0269]地址替換單元504,適于將所述緩存的指令運(yùn)行環(huán)境中的地址寄存器的值修改為重組指令片段的地址。
[0270]所述指令運(yùn)行環(huán)境緩存和恢復(fù)單元501分別與指令獲取單元502以及地址替換單元504耦接,所述指令獲取單元502,指令重組單元503和地址替換單元504依次耦接。
[0271]裝置500執(zhí)行過程如下:
[0272]首先,指令運(yùn)行環(huán)境緩存和恢復(fù)單元501緩存指令運(yùn)行環(huán)境,例如向緩存棧中壓入指令運(yùn)行相關(guān)的寄存器數(shù)據(jù);
[0273]然后,所述指令獲取單元502從CPU地址寄存器511讀取待調(diào)度的機(jī)器指令地址,并從所述機(jī)器指令地址讀取機(jī)器指令片段,所述機(jī)器指令片段最后一條指令為跳轉(zhuǎn)指令;
[0274]例如,指令獲取單元502從CPU地址寄存器511讀取待調(diào)度的機(jī)器指令地址;以跳轉(zhuǎn)指令為檢索目標(biāo),檢索所述機(jī)器指令地址對(duì)應(yīng)的機(jī)器指令,直到發(fā)現(xiàn)第一個(gè)跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令包括例如Jump指令和Call指令等;將所述第一個(gè)跳轉(zhuǎn)指令及其之前的所有機(jī)器指令作為一個(gè)待調(diào)度的機(jī)器指令片段;將該機(jī)器指令片段保存在裝置500中,或其他的裝置500能夠讀取的存儲(chǔ)位置;
[0275]然后,指令重組單元503在所述獲取的機(jī)器指令片段的最后一條指令前,插入第二跳轉(zhuǎn)指令,所述第二跳轉(zhuǎn)指令指向裝置500的入口地址,生成具有地址A"的重組指令片段;
[0276]然后,地址替換單元504將所述緩存的指令運(yùn)行環(huán)境中的地址寄存器的值A(chǔ)修改為地址A";
[0277]最后,指令運(yùn)行環(huán)境緩存和恢復(fù)單元501恢復(fù)所述指令運(yùn)行環(huán)境,例如從緩存棧中彈出指令運(yùn)行相關(guān)的寄存器數(shù)據(jù)。
[0278]與上述運(yùn)行時(shí)指令重組方法S300相對(duì)應(yīng),所述指令獲取單元502可以將第一個(gè)非常數(shù)地址跳轉(zhuǎn)指令作為第一跳轉(zhuǎn)指令。以提高重組裝置的執(zhí)行效率。
[0279]與上述運(yùn)行時(shí)指令重組方法S200相對(duì)應(yīng),根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種運(yùn)行時(shí)指令重組裝置,能夠充分利用運(yùn)行時(shí)指令重復(fù)性,提高效率,節(jié)省計(jì)算資源。
[0280]如圖11所示,指令重組裝置600包括:
[0281]指令運(yùn)行環(huán)境緩存和恢復(fù)單元601,適于緩存和恢復(fù)指令運(yùn)行環(huán)境;所述指令運(yùn)行環(huán)境包括地址寄存器,地址寄存器保存下一條將要運(yùn)行的機(jī)器指令的地址,該地址為第一地址;
[0282]指令獲取單元602,適于獲取待調(diào)度的機(jī)器指令片段;其中,待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0283]指令重組單元603,適于解析、修改所述待調(diào)度機(jī)器指令片段,包括:在第一跳轉(zhuǎn)指令前插入第二跳轉(zhuǎn)指令,以生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置600,即執(zhí)行該第二跳轉(zhuǎn)指令后,裝置600的指令運(yùn)行環(huán)境緩存和恢復(fù)單元601進(jìn)行下一次處理;
[0284]地址替換單元604,適于將所述緩存的指令運(yùn)行環(huán)境中的地址寄存器的值修改為重組指令片段的地址;和
[0285]指令檢索單元605,適于利用所述第一地址查找地址對(duì)應(yīng)表;所述地址對(duì)應(yīng)表用于表示第一地址A指向的待調(diào)度指令片段是否具有已保存的重組指令片段,地址對(duì)應(yīng)表的數(shù)據(jù)為地址對(duì);
[0286]如果找到相應(yīng)的記錄,指令檢索單元605適于調(diào)用地址替換單元604,將所述第一地址A(即地址寄存器的值A(chǔ))修改為已保存的重組指令片段的地址A’ ;如果沒有找到相應(yīng)的記錄,指令檢索單元適于利用第二地址A"與地址A在所述地址對(duì)應(yīng)表中建立一條記錄。
[0287]所述指令運(yùn)行環(huán)境緩存和恢復(fù)單元601分別與指令檢索單元605以及地址替換單元604耦接,所述指令檢索單元605分別與指令獲取單元602,指令重組單元603和地址替換單元604耦接,所述指令獲取單元602、指令重組單元603和地址替換單元604依次耦接。
[0288]裝置600的執(zhí)行過程如下:
[0289]首先,指令運(yùn)行環(huán)境緩存和恢復(fù)單元601緩存指令運(yùn)行環(huán)境,例如向緩存棧中壓入指令運(yùn)行相關(guān)的寄存器數(shù)據(jù);
[0290]然后,指令檢索單元605利用所述緩存的指令運(yùn)行環(huán)境中的地址寄存器的值A(chǔ)查找地址對(duì)應(yīng)表;
[0291]如果找到相應(yīng)的記錄,指令檢索單元605調(diào)用地址替換單元604,地址替換單元604將所述地址寄存器的值A(chǔ)修改為記錄中的值A(chǔ)’ ;地址替換單元604調(diào)用指令運(yùn)行環(huán)境緩存和恢復(fù)單元602,以恢復(fù)所述指令運(yùn)行環(huán)境,即從緩存棧中彈出指令運(yùn)行相關(guān)的寄存器數(shù)據(jù),本次重組操作結(jié)束;
[0292]如果沒有找到相應(yīng)的記錄,所述指令獲取單元602從CPU地址寄存器讀取待調(diào)度的機(jī)器指令地址,并從所述機(jī)器指令地址讀取機(jī)器指令片段,所述機(jī)器指令片段最后一條指令為跳轉(zhuǎn)指令。具體的,指令獲取單元602從CPU地址寄存器讀取待調(diào)度的機(jī)器指令地址;以跳轉(zhuǎn)指令為檢索目標(biāo),檢索所述機(jī)器指令地址對(duì)應(yīng)的機(jī)器指令,直到發(fā)現(xiàn)第一個(gè)跳轉(zhuǎn)指令;所述跳轉(zhuǎn)指令包括Jump指令和Call指令等;將所述第一個(gè)跳轉(zhuǎn)指令及其之前的所有機(jī)器指令作為一個(gè)待調(diào)度的機(jī)器指令片段;將該機(jī)器指令片段保存在裝置600中,或其他的裝置600能夠讀取的存儲(chǔ)位置;
[0293]然后,指令重組單元603在所述獲取的機(jī)器指令片段的最后一條指令前,插入第二跳轉(zhuǎn)指令,所述第二跳轉(zhuǎn)指令指向裝置600的入口地址,生成具有地址A"的重組指令片段;
[0294]然后,指令重組單元603將地址A"發(fā)送給指令檢索單元605,指令檢索單元605利用地址A"與地址A在其中的地址對(duì)應(yīng)表中建立一條記錄;以備后續(xù)指令重用;
[0295]然后,地址替換單元604將所述緩存的指令運(yùn)行環(huán)境中的地址寄存器的值A(chǔ)修改為地址A";
[0296]最后,指令運(yùn)行環(huán)境緩存和恢復(fù)單元601恢復(fù)所述指令運(yùn)行環(huán)境,即從緩存棧中彈出指令運(yùn)行相關(guān)的寄存器數(shù)據(jù)。
[0297]繼續(xù)參考圖11,其中,指令重組單元603還可以包括:
[0298]指令解析單元6031,適于利用指令集匹配所述機(jī)器指令片段,得到待處理的目標(biāo)機(jī)器指令(即利用目標(biāo)指令檢索待調(diào)度的機(jī)器指令片段);所述指令集包括X86,MIPS和ARM指令集;
[0299]指令修改單元6032,適于按照預(yù)定的方式,修改所述目標(biāo)機(jī)器指令。
[0300]例如,如果所述目標(biāo)指令為存儲(chǔ)/讀取指令,所述指令解析單元6031將負(fù)責(zé)獲取待調(diào)度的機(jī)器指令片段中的存儲(chǔ)/讀取指令,所述指令修改單元6032修改其中的存儲(chǔ)和讀取地址為安全存儲(chǔ)設(shè)備上的地址。其作用和效果與上述對(duì)應(yīng)的方法實(shí)施例S400相同,這里不再贅述。
[0301]又例如,如果所述目標(biāo)指令為I/O指令,所述指令解析單元6031將負(fù)責(zé)獲取待調(diào)度的機(jī)器指令片段中的I/o指令,所述指令修改單元6032將所述I/O指令中的輸入指令全部阻止。其作用和效果與上述對(duì)應(yīng)的方法實(shí)施例S500相同,這里不再贅述。
[0302]又例如,如果所述目標(biāo)指令為網(wǎng)絡(luò)傳輸指令,所述指令解析單元6031將負(fù)責(zé)獲取待調(diào)度的機(jī)器指令片段中的網(wǎng)絡(luò)傳輸指令,所述指令修改單元6032檢驗(yàn)所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對(duì)應(yīng)的遠(yuǎn)端計(jì)算設(shè)備是否為安全地址;如果不是,所述指令修改單元適于阻止所述網(wǎng)絡(luò)傳輸指令。其作用和效果與上述對(duì)應(yīng)的方法實(shí)施例S600相同,這里不再贅述。
[0303]根據(jù)本發(fā)明另一個(gè)實(shí)施例,上述指令重組單元還可以包括反匯編單元和匯編單元。如圖12所示,指令重組單元703包括:依次稱接的反匯編單元7031,指令解析單元7032,指令修改單元7033和匯編單元7034。
[0304]其中,反匯編單元7031適于在解析、修改所述待調(diào)度的機(jī)器指令片段之前,反匯編所述待調(diào)度的機(jī)器指令片段,生成待調(diào)度的匯編指令片段;發(fā)送給指令解析單元7032。
[0305]匯編單元7034適于在解析、修改所述待調(diào)度的機(jī)器指令片段之后,匯編重組后的匯編指令片段,得到機(jī)器碼表示的重組指令片段;發(fā)送給指令替換單元。
[0306]在該實(shí)施例中,所述指令解析單元7032和指令修改單元7033將操作待調(diào)度的匯編指令片段。
[0307]與上述運(yùn)行時(shí)指令重組方法SllO相對(duì)應(yīng),根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種運(yùn)行時(shí)指令重組裝置。如圖13所示,指令重組裝置800包括:
[0308]指令運(yùn)行環(huán)境緩存和恢復(fù)單元801,適于緩存指令運(yùn)行環(huán)境;
[0309]指令獲取單元802和第一存儲(chǔ)位置803,其中,指令獲取單元802適于從第一存儲(chǔ)位置803讀取目標(biāo)地址,并根據(jù)目標(biāo)地址獲取待調(diào)度/執(zhí)行的機(jī)器指令片段;其中,待調(diào)度機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;以及
[0310]指令重組單元804,適于在第一存儲(chǔ)位置803保存第一跳轉(zhuǎn)指令的目標(biāo)地址,將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置800的入口地址。
[0311]其中,指令運(yùn)行環(huán)境緩存和恢復(fù)單元801還適于在指令重組單元804替換指令之后,恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0312]裝置800的執(zhí)行過程如下:
[0313]首先,指令運(yùn)行環(huán)境緩存和恢復(fù)單元801緩存指令運(yùn)行環(huán)境;
[0314]然后,指令獲取單元802從第一存儲(chǔ)位置803讀取目標(biāo)地址(待調(diào)度指令地址),根據(jù)目標(biāo)地址獲取待調(diào)度機(jī)器指令片段;其中,待調(diào)度機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0315]然后,指令重組單元804在第一存儲(chǔ)位置803保存第一跳轉(zhuǎn)指令的目標(biāo)地址;對(duì)于立即數(shù)保存其值,對(duì)于變量參數(shù)保存其地址/引用;
[0316]然后,指令重組單元804將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;
[0317]最后,指令運(yùn)行環(huán)境緩存和恢復(fù)單元801恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0318]根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種運(yùn)行時(shí)指令重組裝置,與上述方法S130相對(duì)應(yīng),并且包含上述某些實(shí)施例中提供的裝置的特征。如圖14所示,該裝置900包括:
[0319]指令運(yùn)行環(huán)境緩存和恢復(fù)單元901,適于緩存和恢復(fù)指令運(yùn)行環(huán)境;
[0320]指令獲取單元902,適于通過輸入?yún)?shù)計(jì)算的方式獲取下一條即將運(yùn)行的指令地址,該地址為第一地址;還適于根據(jù)第一地址獲取待調(diào)度/執(zhí)行的機(jī)器指令片段;其中,待調(diào)度機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0321]指令重組單元903,適于替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù);還適于在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置900的入口地址;還適于將重組指令片段的第二地址與第一地址在地址對(duì)應(yīng)表中建立一條記錄;
[0322]指令檢索單元904,適于利用所述第一地址查找地址對(duì)應(yīng)表;所述地址對(duì)應(yīng)表用于表示第一地址指向的待調(diào)度指令片段是否具有已保存的重組指令片段,地址對(duì)應(yīng)表的數(shù)據(jù)為地址對(duì);
[0323]如果找到相應(yīng)的記錄,指令檢索單元904適于調(diào)用指令運(yùn)行環(huán)境緩存和恢復(fù)單元901恢復(fù)所緩存的指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到找到的對(duì)應(yīng)地址繼續(xù)執(zhí)行(重組操作完成);
[0324]如果沒有找到相應(yīng)的記錄,調(diào)用指令重組單元903進(jìn)行重組操作。
[0325]其中,指令重組單元903還可以包括反匯編單元9031,指令解析單元9032,指令修改單元9033,和匯編單元9034。[0326]其中,當(dāng)指令重組單元902完成重組后,適于調(diào)用指令運(yùn)行環(huán)境緩存和恢復(fù)單元901恢復(fù)所緩存的指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到重組指令片段的地址繼續(xù)執(zhí)行(本次重組操作完成)。
[0327]根據(jù)本發(fā)明另一個(gè)實(shí)施例,上述反匯編單元9031可以位于指令獲取單元902之中,在獲取待調(diào)度的指令片段時(shí)由其進(jìn)行反匯編操作。
[0328]本領(lǐng)域技術(shù)人員可以理解,上述裝置實(shí)施例的附圖中的數(shù)據(jù)流的箭頭只是為了便于解釋上述實(shí)施例中的具體操作流程,并不限定圖中各個(gè)單元之間的數(shù)據(jù)流向或者連接方向,裝置中各個(gè)單元之間為耦接關(guān)系。
[0329]上面通過一些實(shí)施例詳細(xì)的介紹了運(yùn)行時(shí)指令重組方法和裝置,其與現(xiàn)有技術(shù)相t匕,具有以下優(yōu)點(diǎn):
[0330]通過指令重組方法,可以在指令運(yùn)行狀態(tài)下監(jiān)控計(jì)算設(shè)備的指令;
[0331]利用地址對(duì)應(yīng)表,提高了指令重組效率,節(jié)省了計(jì)算資源;
[0332]針對(duì)存儲(chǔ)和讀取指令進(jìn)行操作,修改其中的目標(biāo)和源地址,以實(shí)現(xiàn)存儲(chǔ)重定位/重定向,確保數(shù)據(jù)安全;
[0333]針對(duì)I/O指令進(jìn)行操作,將所述I/O指令中的輸入指令全部阻止,以實(shí)現(xiàn)徹底阻斷對(duì)本地硬件設(shè)備的寫操作;還可以實(shí)現(xiàn)對(duì)除存儲(chǔ)指令之外的輸入指令的阻止,可以提高計(jì)算設(shè)備中的數(shù)據(jù)安全性;
[0334]針對(duì)網(wǎng)絡(luò)傳輸指令進(jìn)行操作,檢驗(yàn)所述網(wǎng)絡(luò)傳輸指令中的目標(biāo)地址對(duì)應(yīng)的遠(yuǎn)端計(jì)算設(shè)備是否為安全地址;如果不是,阻止所述網(wǎng)絡(luò)傳輸指令,以實(shí)現(xiàn)數(shù)據(jù)安全傳輸。
[0335]數(shù)據(jù)安全存取過程
[0336]圖15是本發(fā)明一個(gè)實(shí)施例中計(jì)算設(shè)備的系統(tǒng)層次示意圖。
[0337]其中,計(jì)算設(shè)備(例如計(jì)算機(jī)終端系統(tǒng))200包括:用戶界面層201,應(yīng)用層202,操作系統(tǒng)內(nèi)核層203,硬件映射層204,安全層205,和硬件層206。
[0338]其中,硬件層206進(jìn)一步包括CPU 2061,硬盤2062 (即本地存儲(chǔ)設(shè)備)以及網(wǎng)卡2063。
[0339]另外,計(jì)算設(shè)備200與存儲(chǔ)設(shè)備10 (又稱為安全存儲(chǔ)設(shè)備)耦接。
[0340]本實(shí)施例中,存儲(chǔ)設(shè)備10為遠(yuǎn)程磁盤陣列,通過網(wǎng)絡(luò)連接硬件層206的網(wǎng)卡2063,與計(jì)算設(shè)備200交換數(shù)據(jù)。在本發(fā)明的其他實(shí)施例中,存儲(chǔ)設(shè)備10也可以是其他已知或未知類型的存儲(chǔ)設(shè)備。
[0341]其中,硬盤2062也可以替換為其他類型的本地存儲(chǔ)設(shè)備,例如u盤和光盤等,這里只是舉例說明,并無限制目的。
[0342]結(jié)合上述層次結(jié)構(gòu),本實(shí)施例提供的數(shù)據(jù)安全存取過程包括:
[0343]S1000,初始化;
[0344]S2000,數(shù)據(jù)寫入;和
[0345]S3000,數(shù)據(jù)讀取。
[0346]參考圖16,上述的初始化過程S1000包括:
[0347]S1010,建立計(jì)算機(jī)終端系統(tǒng)200與安全存儲(chǔ)設(shè)備10的通訊;
[0348]S1020,從安全存儲(chǔ)設(shè)備10上同步映射位圖(Bitmap)至當(dāng)前計(jì)算機(jī)終端系統(tǒng)200,例如保存在計(jì)算機(jī)終端系統(tǒng)200內(nèi)存中;所述映射位圖用于表示本地存儲(chǔ)設(shè)備的數(shù)據(jù)是否已經(jīng)存儲(chǔ)到安全存儲(chǔ)設(shè)備;
[0349]S1030,如果步驟S1020的同步操作失敗,在安全存儲(chǔ)設(shè)備10上建立Bitmap并初始化,然后同步到計(jì)算機(jī)終端系統(tǒng)200。
[0350]其中,為了區(qū)分計(jì)算機(jī)終端200上的Bitmap與存儲(chǔ)設(shè)備10上的Bitmap,下文中,除非另有說明,將計(jì)算機(jī)終端系統(tǒng)200上的Bitmap稱為映射位圖或第一映射位圖,將安全存儲(chǔ)設(shè)備10上的Bitmap稱為第二映射位圖。
[0351]在步驟S1020中,如果從存儲(chǔ)設(shè)備10上同步第二映射位圖至當(dāng)前計(jì)算機(jī)終端系統(tǒng)200的操作失敗,說明存儲(chǔ)設(shè)備10與計(jì)算機(jī)終端系統(tǒng)200之間是第一次連接。
[0352]其中,步驟S1030可以包括:
[0353]將計(jì)算機(jī)終端系統(tǒng)200中的本地存儲(chǔ)空間映射到存儲(chǔ)設(shè)備10上,映射關(guān)系為以I扇區(qū)(或其他存儲(chǔ)的基本單位)為單位的一一映射,并且建立映射位圖(Bitmap)。
[0354]在本發(fā)明的其他實(shí)施例中,也可以使用其他基本容量為單位建立本地存儲(chǔ)空間到存儲(chǔ)設(shè)備100上的Bitmap。
[0355]圖17為本發(fā)明一個(gè)實(shí)施例中的Bitmap示意圖。圖中包括本地存儲(chǔ)設(shè)備(例如圖15中的硬盤2062)上的存儲(chǔ)介質(zhì)3000,與本地存儲(chǔ)設(shè)備網(wǎng)絡(luò)連接的存儲(chǔ)設(shè)備10上的存儲(chǔ)介質(zhì)4000。
[0356]建立Bitmap的過程描述如下。對(duì)存儲(chǔ)介質(zhì)3000,在存儲(chǔ)介質(zhì)4000上建立與其大小相同的存儲(chǔ)空間4010,作為一一映射空間。在存儲(chǔ)空間4010中保存Bitmap 4020, Bitmap4020為一張位圖,其中I位代表I扇區(qū),每一位的數(shù)據(jù)(O或I)標(biāo)識(shí)/指示存儲(chǔ)介質(zhì)3000上對(duì)應(yīng)的扇區(qū)是否轉(zhuǎn)儲(chǔ)或?qū)?yīng)存儲(chǔ)在存儲(chǔ)介質(zhì)4000上的存儲(chǔ)空間4010中,所以映射位圖也可以稱為轉(zhuǎn)儲(chǔ)表。存儲(chǔ)設(shè)備10上的Bitmap 4020建立完成之后同步到計(jì)算機(jī)終端系統(tǒng)200 中。
[0357]更新Bitmap的過程描述如下。在Bitmap 4020中,轉(zhuǎn)儲(chǔ)的扇區(qū)標(biāo)記為1,非轉(zhuǎn)儲(chǔ)的扇區(qū)沒有標(biāo)記(轉(zhuǎn)儲(chǔ)扇區(qū)和非轉(zhuǎn)儲(chǔ)扇區(qū)所使用的標(biāo)記可以自由選擇)。當(dāng)應(yīng)用程序或操作系統(tǒng)保存一個(gè)數(shù)據(jù)(例如文件時(shí)),操作系統(tǒng)內(nèi)部的文件系統(tǒng)將在本地存儲(chǔ)設(shè)備的存儲(chǔ)介質(zhì)3000上開辟一定量的存儲(chǔ)空間,例如扇區(qū)3040和扇區(qū)3050,并分配給該文件使用,并改寫本地的文件分配表。該文件轉(zhuǎn)儲(chǔ)時(shí)(即寫入扇區(qū)3040和扇區(qū)3050的數(shù)據(jù)被存儲(chǔ)到存儲(chǔ)設(shè)備10上時(shí)),在存儲(chǔ)介質(zhì)4000上相同的位置分配扇區(qū)4040和4050,并在其中保存轉(zhuǎn)儲(chǔ)數(shù)據(jù),最后將Bitmap 4020中扇區(qū)3040和扇區(qū)3050對(duì)應(yīng)的位數(shù)據(jù)改為I。
[0358]結(jié)合圖15,上述的數(shù)據(jù)寫入過程S2000進(jìn)一步包括:
[0359]S2010,應(yīng)用層202通過操作系統(tǒng)內(nèi)核層203的文件系統(tǒng)發(fā)出寫文件操作請(qǐng)求,或操作系統(tǒng)內(nèi)核層203直接發(fā)出寫文件操作請(qǐng)求;或
[0360]應(yīng)用層202直接向硬件映射層204發(fā)出寫數(shù)據(jù)操作請(qǐng)求,或操作系統(tǒng)內(nèi)核層203直接向硬件映射層204發(fā)出寫數(shù)據(jù)操作請(qǐng)求;
[0361]S2020,操作系統(tǒng)內(nèi)核層203將寫文件請(qǐng)求解析成硬件端口指令(即硬件指令),下發(fā)至硬件映射層204,其中端口指令包含需要寫存儲(chǔ)設(shè)備的位置(例如扇區(qū));
[0362]需要注意的是,如果步驟S2010是直接向硬件映射層204發(fā)出寫數(shù)據(jù)操作請(qǐng)求,則該請(qǐng)求已經(jīng)為硬件端口指令;
[0363]S2030,安全層205接收來自硬件映射層204的硬件端口指令,并且將端口指令中的寫入位置(即扇區(qū))改寫為位于存儲(chǔ)設(shè)備10上的對(duì)應(yīng)存儲(chǔ)地址,然后更新第一映射位圖,例如將所述扇區(qū)對(duì)應(yīng)的位數(shù)據(jù)修改為1,表示該扇區(qū)已經(jīng)轉(zhuǎn)儲(chǔ);安全層205將修改后的端口指令發(fā)送給硬件層206。
[0364]寫入過程執(zhí)行完成之后,計(jì)算機(jī)終端系統(tǒng)200并沒有存儲(chǔ)寫入的數(shù)據(jù),相應(yīng)的數(shù)據(jù)已經(jīng)重定位存儲(chǔ)在安全存儲(chǔ)設(shè)備10上。
[0365]在本發(fā)明的另一個(gè)實(shí)施例中,如果寫本地硬盤指令本身與寫網(wǎng)絡(luò)硬盤指令不同,那么不僅需要改地址,還需要改存儲(chǔ)指令。
[0366]根據(jù)本發(fā)明另一個(gè)實(shí)施例,寫入過程S2000還可以包括:
[0367]S2040,將第一映射位圖同步到存儲(chǔ)設(shè)備10上,保存為第二映射位圖,從而確保計(jì)算機(jī)終端系統(tǒng)200上的第一映射位圖與存儲(chǔ)設(shè)備上的第二映射位圖一致。
[0368]在本發(fā)明的其他實(shí)施例中,為了節(jié)省系統(tǒng)資源,S2040也可以在本地的計(jì)算機(jī)終端系統(tǒng)200關(guān)機(jī)前統(tǒng)一進(jìn)行一次。
[0369]結(jié)合圖15,上述的數(shù)據(jù)讀取過程S3000進(jìn)一步包括:
[0370]S3010,將存儲(chǔ)設(shè)備10上的第二映射位圖同步到計(jì)算機(jī)終端系統(tǒng)200上,保存為第一映射位圖;
[0371]S3020,應(yīng)用層202通過操作系統(tǒng)內(nèi)核層203的文件系統(tǒng)發(fā)出讀文件操作請(qǐng)求,或操作系統(tǒng)內(nèi)核層203直接發(fā)出讀文件操作請(qǐng)求;或
[0372]應(yīng)用層202直接向硬件映射層204發(fā)出讀數(shù)據(jù)操作請(qǐng)求,或操作系統(tǒng)內(nèi)核層203直接向硬件映射層204發(fā)出讀數(shù)據(jù)操作請(qǐng)求;
[0373]S3030,安全層205接收來自硬件映射層204的數(shù)據(jù)讀取指令,獲取其中的讀取地址(源地址),查找第一映射位圖,如果第一映射位圖中的位數(shù)據(jù)表示所述讀取地址為轉(zhuǎn)儲(chǔ)地址,安全層205修改端口指令的讀取地址為存儲(chǔ)設(shè)備10上的地址;安全層205將修改后的端口指令發(fā)送給硬件層206。
[0374]該讀取過程沒有影響用戶既有的操作模式,實(shí)現(xiàn)了對(duì)于安全存儲(chǔ)設(shè)備(即存儲(chǔ)設(shè)備10)上已經(jīng)轉(zhuǎn)儲(chǔ)的數(shù)據(jù)的讀取。
[0375]在步驟S3010中,從存儲(chǔ)設(shè)備10同步第二映射位圖到本地的過程是為了在計(jì)算機(jī)終端系統(tǒng)200重新啟動(dòng)了以后,保持本地?cái)?shù)據(jù)與安全存儲(chǔ)設(shè)備上的數(shù)據(jù)的一致性。
[0376]本領(lǐng)域技術(shù)人員可以理解,對(duì)于上述的數(shù)據(jù)寫入、讀取過程以及初始化過程,根據(jù)實(shí)際需要執(zhí)行所需的過程或步驟即可。
[0377]數(shù)據(jù)安全存取方法
[0378]基于上述數(shù)據(jù)寫入過程和讀取過程,下面詳細(xì)描述本發(fā)明提供的數(shù)據(jù)安全存儲(chǔ)和讀取方法。
[0379]本領(lǐng)域技術(shù)人員可以理解,上面結(jié)合圖15來說明數(shù)據(jù)的讀取和存儲(chǔ)過程是為了方便理解,并不是限定,在本發(fā)明其他實(shí)施例中,可以在計(jì)算設(shè)備的適合層次上執(zhí)行以上描述的各個(gè)步驟。
[0380]根據(jù)本發(fā)明一個(gè)實(shí)施例,提供一種數(shù)據(jù)安全存儲(chǔ)方法;如圖18所示,該方法包括如下步驟:
[0381]S4010,接收硬件指令;
[0382]S4020,分析并判斷該硬件指令是否為存儲(chǔ)指令;[0383]S4030,如果該硬件指令是存儲(chǔ)指令,修改存儲(chǔ)指令中的目標(biāo)地址為對(duì)應(yīng)的存儲(chǔ)設(shè)備(即安全存儲(chǔ)設(shè)備)上的存儲(chǔ)地址;
[0384]S4040,將修改后的存儲(chǔ)指令發(fā)送到硬件層。
[0385]在步驟S4010中,所述硬件指令可以是來自硬件映射層的硬件指令。接收來自硬件映射層的硬件指令可以100%的篩查所有發(fā)送到CPU等處理器的硬件指令(接口指令)。
[0386]其中,在計(jì)算機(jī)終端系統(tǒng)上,可以運(yùn)行Windows操作系統(tǒng),Windows系統(tǒng)中的硬件抽象層HAL為硬件映射層。在其他實(shí)施例中,計(jì)算機(jī)終端也可以運(yùn)行其他操作系統(tǒng),例如Linux, Unix或嵌入式操作系統(tǒng)等,硬件映射層為Linux或Unix或嵌入式操作系統(tǒng)對(duì)應(yīng)的硬件映射層。
[0387]在步驟S4010中,結(jié)合上述運(yùn)行時(shí)指令重組方法,接收硬件指令的過程可以包括:采用運(yùn)行時(shí)指令重組方法(例如S101-S105)獲取硬件指令。換一種說法,就是可以在運(yùn)行時(shí)指令重組方法獲取到機(jī)器指令時(shí),處理存儲(chǔ)和讀取指令(例如S404,S504,或S604)。通過運(yùn)行時(shí)指令重組方法,可以不僅將計(jì)算最終結(jié)果重定位存儲(chǔ)到安全存儲(chǔ)設(shè)備,還能夠?qū)⒂?jì)算的中間過程(包括操作系統(tǒng)產(chǎn)生的中間過程)全部重定位存儲(chǔ)到安全存儲(chǔ)設(shè)備。
[0388]在步驟S4010和S4020中,硬件指令可以為X86指令、ARM指令、MIPS指令等類型,可以在計(jì)算終端中內(nèi)置分析機(jī)制,以處理不同類型的CPU指令。
[0389]根據(jù)本發(fā)明另一個(gè)實(shí)施例,在步驟S4030之后,還可以包括:
[0390]S4050、更新第一映射位圖,將目標(biāo)地址(扇區(qū))在第一映射位圖中對(duì)應(yīng)的“位”設(shè)置為轉(zhuǎn)儲(chǔ)標(biāo)記,例如“ I ”;并且,將已經(jīng)更新的映射位圖同步到所述安全存儲(chǔ)設(shè)備,保存為第二映射位圖。
[0391]本實(shí)施例中,轉(zhuǎn)儲(chǔ)操作對(duì)于上層應(yīng)用以及用戶完全透明,不影響現(xiàn)有計(jì)算機(jī)操作、應(yīng)用系統(tǒng)的工作流程。
[0392]本實(shí)施例提供的上述方法不僅可以在計(jì)算機(jī)終端系統(tǒng)中使用,還可以應(yīng)用在任何包含應(yīng)用層、操作系統(tǒng)內(nèi)核層、硬件層的計(jì)算設(shè)備和智能終端上,在硬件層執(zhí)行指令前,實(shí)現(xiàn)指令級(jí)存儲(chǔ)重定位/重定向(即基于硬件存儲(chǔ)指令的存儲(chǔ)重定位/重定向)。
[0393]根據(jù)本發(fā)明一個(gè)實(shí)施例,提供一種數(shù)據(jù)安全讀取方法;參考圖19,該方法包括:
[0394]S5010,接收硬件指令;
[0395]S5020,分析并判斷該硬件指令是否為讀取指令;
[0396]S5030,如果是讀取指令,獲取讀取指令中的源地址,查找第一映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改讀取指令中的讀取地址;和
[0397]S5040,將修改后的硬件指令發(fā)送到硬件層。
[0398]步驟S5010之前,該方法還可以包括S5000:將存儲(chǔ)設(shè)備上的第二映射位圖同步到計(jì)算機(jī)終端系統(tǒng)200上,保存為第一映射位圖。
[0399]步驟S5010中,所述的硬件指令可以來自硬件映射層。
[0400]在步驟S5010中,結(jié)合上述運(yùn)行時(shí)指令重組方法,接收硬件指令的過程可以包括:采用運(yùn)行時(shí)指令重組方法(例如S101-S105)獲取硬件指令。換一種說法,就是可以在運(yùn)行時(shí)指令重組方法獲取到機(jī)器指令時(shí),處理存儲(chǔ)和讀取指令(例如S400)。
[0401]步驟S5020中,如果該硬件指令不是讀取指令,則可以直接將硬件指令發(fā)送給硬件層去執(zhí)行。[0402]步驟S5030還可以進(jìn)一步分解為兩步驟:
[0403]S5031,如果是讀取指令,獲取讀取指令中的源地址,判斷所述源地址是否為存儲(chǔ)設(shè)備上的地址;
[0404]S5032,如果所述源地址不是存儲(chǔ)設(shè)備上的地址,查找第一映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改讀取指令中的讀取地址。
[0405]步驟S5031中,如果該讀取指令的源地址已經(jīng)為存儲(chǔ)設(shè)備上的地址,則計(jì)算設(shè)備(例如圖15中的安全層205)不用再次查找第一映射位圖中的數(shù)據(jù),可以直接將硬件指令發(fā)送給硬件層去執(zhí)行。
[0406]進(jìn)一步的,為了節(jié)約網(wǎng)絡(luò)資源,在本發(fā)明的一些實(shí)施例中,安全存儲(chǔ)設(shè)備10可以作為多個(gè)終端系統(tǒng)的共享資源。
[0407]上面曾經(jīng)提到可以將數(shù)據(jù)安全存儲(chǔ)和讀取方法與指令重組方法結(jié)合,為了方便理解,下面通過實(shí)施例詳細(xì)介紹。
[0408]根據(jù)本發(fā)明一個(gè)實(shí)施例,提供一種數(shù)據(jù)安全存取方法。如圖20所示,該方法S6000包括:
[0409]S6010,緩存指令運(yùn)行環(huán)境;
[0410]S6011,從第一存儲(chǔ)位置讀取目標(biāo)地址,根據(jù)目標(biāo)地址獲取待調(diào)度/執(zhí)行的機(jī)器指令片段;其中,待調(diào)度機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;
[0411]S6012,在第一存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;
[0412]S6013,分析并判斷待調(diào)度機(jī)器指令中的每一條指令是否為存取指令;
[0413]S6014,如果是存取指令:
[0414]對(duì)于存儲(chǔ)指令,修改存儲(chǔ)指令中的目標(biāo)地址為對(duì)應(yīng)的存儲(chǔ)設(shè)備(即安全存儲(chǔ)設(shè)備)上的存儲(chǔ)地址;并修改第一映射位圖;
[0415]對(duì)于讀取指令,獲取讀取指令中的源地址,查找第一映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改讀取指令中的讀取地址;
[0416]如果寫本地硬盤指令本身與寫網(wǎng)絡(luò)硬盤指令不同或者讀取本地硬盤指令本身與讀取網(wǎng)絡(luò)硬盤指令不同,那么不僅需要修改地址,還需要相應(yīng)的修改存儲(chǔ)指令或讀取指令;
[0417]S6015,將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址;
[0418]S6016,恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行。
[0419]本領(lǐng)域技術(shù)人員可以理解,該實(shí)施例只是為了說明而舉例,并不限制安全讀取方法、安全存儲(chǔ)方法和指令重組方法的組合方式,上述介紹的各種安全讀取方法、安全存儲(chǔ)方法和指令重組方法可以以各種所需的方式組合使用。
[0420]存儲(chǔ)和讀取一般是針對(duì)本地的存儲(chǔ)設(shè)備進(jìn)行的數(shù)據(jù)交換;傳輸一般是指通過網(wǎng)絡(luò)設(shè)備進(jìn)行的數(shù)據(jù)交換。
[0421 ] 進(jìn)一步的,本發(fā)明一個(gè)實(shí)施例中提供一種數(shù)據(jù)安全傳輸方法。
[0422]如圖21所示,該方法包括:
[0423]S7010,接收(例如來自硬件映射層的)硬件指令;
[0424]S7020,分析并判斷該硬件指令是否為網(wǎng)絡(luò)傳輸指令;[0425]S7030,如果該硬件指令是傳輸指令,讀取目標(biāo)地址;
[0426]S7040,判斷目標(biāo)地址是否為安全地址;
[0427]S7050,如果是安全地址,將硬件指令發(fā)送到硬件層;如果不是安全地址,拒絕該指令;
[0428]S7060,硬件層發(fā)送傳輸指令和數(shù)據(jù)到目標(biāo)地址的終端系統(tǒng);
[0429]S7070,目標(biāo)地址的終端系統(tǒng)接收并利用數(shù)據(jù)安全存儲(chǔ)方法保存數(shù)據(jù)。
[0430]在步驟S7040中,判斷目標(biāo)地址是否為安全地址的方法如下。參考圖22,安全服務(wù)器820通過網(wǎng)絡(luò)與終端系統(tǒng)800、810連接,終端系統(tǒng)800、810在部署本發(fā)明上述實(shí)施例中提供的數(shù)據(jù)安全傳輸方法時(shí),都已經(jīng)向安全服務(wù)器820進(jìn)行了注冊(cè)操作。安全服務(wù)器820內(nèi)部維護(hù)一個(gè)安全地址表,記錄了已經(jīng)注冊(cè)的所有終端系統(tǒng)。
[0431]當(dāng)安全地址表有更改的時(shí)候,安全服務(wù)器820自動(dòng)將更新的安全地址表發(fā)送給各個(gè)終端,終端系統(tǒng)800的架構(gòu)包括應(yīng)用層801,操作系統(tǒng)內(nèi)核層802,安全層803以及硬件層804,安全層803負(fù)責(zé)維護(hù)該安全地址表。
[0432]安全層803將根據(jù)目標(biāo)地址是否在安全地址表中,判斷目標(biāo)地址是否為安全地址。即在步驟S7040中,如果目標(biāo)地址列入了安全地址表,則目標(biāo)地址為安全地址。
[0433]上述安全傳輸方法的實(shí)施,使木馬或惡意工具即使取得了涉密信息也無法傳輸所取得的信息。安全傳輸方法將在下面的安全互聯(lián)部分結(jié)合實(shí)施例展開介紹。
[0434]雖然本發(fā)明一些實(shí)施例中以計(jì)算機(jī)終端系統(tǒng)作為應(yīng)用本發(fā)明提供的方法的主體,但是,任何手持設(shè)備、智能終端等能夠提供文件或數(shù)據(jù)編輯、保存或傳輸?shù)碾娮釉O(shè)備,都可以成為應(yīng)用本發(fā)明提供的數(shù)據(jù)安全存取及傳輸方法的載體。
[0435]另外,本領(lǐng)域的技術(shù)人員可以理解,上述的數(shù)據(jù)安全存儲(chǔ)方法、讀取方法及傳輸方法可使用軟件或硬件的形式來實(shí)現(xiàn):
[0436](I)如果以軟件實(shí)現(xiàn),則上述方法對(duì)應(yīng)的步驟以軟件代碼的形式存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,成為軟件產(chǎn)品;
[0437](2)如果以硬件實(shí)現(xiàn),則上述方法對(duì)應(yīng)的步驟以硬件代碼(例如Verilog)的形式描述,并固化(經(jīng)過物理設(shè)計(jì)/布局布線/晶圓廠流片等過程)成為芯片產(chǎn)品(例如處理器產(chǎn)品)。
[0438]數(shù)據(jù)安全存取裝置
[0439]與上述的數(shù)據(jù)安全存儲(chǔ)方法相對(duì)應(yīng),根據(jù)本發(fā)明一個(gè)實(shí)施例,提供一種數(shù)據(jù)安全存儲(chǔ)裝置。
[0440]需要注意的是,數(shù)據(jù)安全存儲(chǔ)裝置在本發(fā)明中指:以硬件形式來實(shí)現(xiàn)數(shù)據(jù)安全存儲(chǔ)方法的裝置;安全存儲(chǔ)設(shè)備在本發(fā)明中指:用于轉(zhuǎn)儲(chǔ)信息或數(shù)據(jù)的存儲(chǔ)實(shí)體,例如磁盤
坐寸ο
[0441]參考圖23,數(shù)據(jù)安全存儲(chǔ)裝置7100包括:接收單元7110,指令分析單元7120,指令修改單元7130和發(fā)送單元7140。所述接收單元7110與指令分析單元7120耦接,指令分析單元7120分別與指令修改單元7130以及發(fā)送單元7140耦接,發(fā)送單元7140還與指令修改單元7130耦接。
[0442]其中,接收單元7110適于接收硬件指令,所述硬件指令可以來自硬件映射層;
[0443]指令分析單元7120適于分析所述硬件指令并判斷所述硬件指令是否為存儲(chǔ)指令;如果是存儲(chǔ)指令,指令分析單元7120還適于將其發(fā)送給指令修改單元7130,如果不是存儲(chǔ)指令,指令分析單元7120還適于將其發(fā)送給發(fā)送單元7140 ;
[0444]指令修改單元7130適于修改所述存儲(chǔ)指令中的目標(biāo)地址為對(duì)應(yīng)的在安全存儲(chǔ)設(shè)備上的存儲(chǔ)地址,然后將修改后的存儲(chǔ)指令發(fā)送給發(fā)送單元7140 ;
[0445]發(fā)送單元7150適于將接收到的指令轉(zhuǎn)發(fā)給硬件層7200。
[0446]進(jìn)一步的,該數(shù)據(jù)安全存儲(chǔ)裝置還可以包括:更新單元7150和同步單元7160。其中,更新單元7150與指令修改單元7130耦接;同步單元7160與更新單元7150耦接。
[0447]所述更新單元7150適于在指令修改單元7130修改所述存儲(chǔ)指令之后,更新映射位圖中所述目標(biāo)地址對(duì)應(yīng)的位。本實(shí)施例中,將存儲(chǔ)指令目標(biāo)地址包含的扇區(qū)在第一映射位圖中對(duì)應(yīng)的“位”數(shù)據(jù)置“ I ”,表示已經(jīng)轉(zhuǎn)儲(chǔ)。
[0448]所述同步單元7160適于建立計(jì)算終端系統(tǒng)與所述安全存儲(chǔ)設(shè)備的通訊,并將映射位圖在所述計(jì)算終端系統(tǒng)和所述安全存儲(chǔ)設(shè)備之間進(jìn)行同步。
[0449]具體的,在計(jì)算終端系統(tǒng)啟動(dòng)時(shí),同步單元7160建立計(jì)算終端系統(tǒng)與所述安全存儲(chǔ)設(shè)備的通訊,并將所述安全存儲(chǔ)設(shè)備上的第二映射位圖同步到所述計(jì)算終端系統(tǒng),保存為第一映射位圖。
[0450]如果將所述安全存儲(chǔ)設(shè)備上的第二映射位圖同步到所述計(jì)算終端系統(tǒng)失敗,表示計(jì)算終端系統(tǒng)與安全存儲(chǔ)設(shè)備是第一次通訊,同步單元7160將計(jì)算機(jī)終端系統(tǒng)中的本地存儲(chǔ)空間映射到所述安全存儲(chǔ)設(shè)備上,并建立映射位圖和第二映射位圖。例如在本實(shí)施例中,先在安全存儲(chǔ)設(shè)備上建立第二映射位圖,然后同步到本地,成為第一映射位圖。
[0451]當(dāng)更新單元7150更新了第一映射位圖(即映射位圖)中所述目標(biāo)地址對(duì)應(yīng)的位,同步單元7160將把更新后的第一映射位圖發(fā)送給安全存儲(chǔ)設(shè)備,并在安全存儲(chǔ)設(shè)備上保存為第二映射位圖。
[0452]所述安全存儲(chǔ)設(shè)備可以為遠(yuǎn)程存儲(chǔ)設(shè)備或本地存儲(chǔ)設(shè)備,所述遠(yuǎn)程存儲(chǔ)設(shè)備可以為一個(gè)計(jì)算設(shè)備服務(wù),也可以被多個(gè)計(jì)算設(shè)備共享。
[0453]所述硬件指令可以為硬件端口 I/O指令。
[0454]與上述的數(shù)據(jù)安全讀取方法相對(duì)應(yīng),根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供了一種數(shù)據(jù)安全讀取裝置。
[0455]參考圖24,數(shù)據(jù)安全讀取裝置8100包括:
[0456]接收單元8110,指令分析單元8120,指令修改單元8130以及發(fā)送單元8140。其中,接收單元8110與指令分析單元8120耦接,指令分析單元8120分別與指令修改單元8130以及發(fā)送單元8140耦接,指令修改單元8130還與發(fā)送單元8140耦接。發(fā)送單元8140與硬件層8200耦接。
[0457]所述接收單元8110適于接收硬件指令,本實(shí)施例中,所述硬件指令來自硬件映射層。
[0458]所述指令分析單元8120適于分析所述硬件指令并判斷所述硬件指令是否為讀取指令,如果所述硬件指令是讀取指令,獲取讀取指令的源地址并判斷所述源地址是否為安全存儲(chǔ)設(shè)備上的地址。
[0459]如果所述硬件指令不是讀取指令,或者所述源地址是安全存儲(chǔ)設(shè)備上的地址,指令分析單元8120將所述硬件指令發(fā)送到發(fā)送單元8140。[0460] 如果所述源地址不是安全存儲(chǔ)設(shè)備上的地址,指令修改單元8130查找映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改所述讀取指令中的讀取地址。
[0461 ] 與上述實(shí)施例中的映射位圖相同,本實(shí)施例中所述映射位圖也用于表示本地存儲(chǔ)地址的數(shù)據(jù)是否轉(zhuǎn)儲(chǔ)到所述安全存儲(chǔ)設(shè)備。例如,指令修改單元8130查找源地址包含的扇區(qū)在第一映射位圖中對(duì)應(yīng)的位。如果“位”數(shù)據(jù)顯示為1,表示已經(jīng)發(fā)生轉(zhuǎn)儲(chǔ),如果“位”數(shù)據(jù)顯示為O或NULL (空),表示沒有發(fā)生轉(zhuǎn)儲(chǔ)。如果已經(jīng)發(fā)生轉(zhuǎn)儲(chǔ),指令修改單元8130將所述源地址(讀取地址)改為對(duì)應(yīng)的轉(zhuǎn)儲(chǔ)地址,并將修改后的硬件指令發(fā)送給發(fā)送單元8140。
[0462]進(jìn)一步的,所述數(shù)據(jù)安全讀取裝置還可以包括同步單元8150。所述同步單元8150與指令修改單元8130耦接。所述同步單元8150適于建立計(jì)算終端系統(tǒng)與所述安全存儲(chǔ)設(shè)備的通訊,并將映射位圖在所述計(jì)算終端系統(tǒng)和所述安全存儲(chǔ)設(shè)備之間進(jìn)行同步。具體的,同步單元8150在計(jì)算終端系統(tǒng)啟動(dòng)時(shí),建立計(jì)算終端系統(tǒng)與所述安全存儲(chǔ)設(shè)備的通訊,并將所述安全存儲(chǔ)設(shè)備上的第二映射位圖同步到所述計(jì)算終端系統(tǒng),保存為第一映射位圖,提供指令修改單元8130使用。
[0463]所述安全存儲(chǔ)設(shè)備可以為遠(yuǎn)程存儲(chǔ)設(shè)備,所述遠(yuǎn)程存儲(chǔ)設(shè)備可以被多個(gè)計(jì)算終端系統(tǒng)共享。
[0464]在本發(fā)明的其他實(shí)施例中,所述的安全存儲(chǔ)設(shè)備也可以為本地存儲(chǔ)設(shè)備。
[0465]根據(jù)本發(fā)明另一個(gè)實(shí)施例,上述數(shù)據(jù)安全讀取裝置和數(shù)據(jù)安全存儲(chǔ)裝置可以合并為一個(gè)裝置,其中指令分析單元和指令修改單元既能處理存儲(chǔ)指令又能處理讀取指令,下面舉例介紹。
[0466]根據(jù)本發(fā)明另一個(gè)實(shí)施例,提供一種數(shù)據(jù)安全存儲(chǔ)和讀取裝置。如圖25,數(shù)據(jù)安全存儲(chǔ)和讀取裝置9100包括:
[0467]指令運(yùn)行環(huán)境緩存和恢復(fù)單元9101,適于緩存和恢復(fù)指令運(yùn)行環(huán)境;
[0468]指令獲取單元9102,適于獲取下一條即將運(yùn)行的指令地址,該地址為第一地址;還適于根據(jù)第一地址獲取待調(diào)度/執(zhí)行的機(jī)器指令片段;其中,待調(diào)度機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令;獲取待調(diào)度機(jī)器指令片段的具體方式在前面的實(shí)施例中已經(jīng)詳細(xì)描述,這里不再贅述;
[0469]指令檢索單元9104,適于利用所述第一地址查找地址對(duì)應(yīng)表;所述地址對(duì)應(yīng)表用于表示第一地址指向的待調(diào)度指令片段是否具有已保存的重組指令片段,地址對(duì)應(yīng)表的數(shù)據(jù)為地址對(duì);
[0470]如果找到相應(yīng)的記錄,指令檢索單元9104適于調(diào)用指令運(yùn)行環(huán)境緩存和恢復(fù)單元9101恢復(fù)所緩存的指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到找到的對(duì)應(yīng)地址繼續(xù)執(zhí)行(本次重組完成);
[0471]如果沒有找到相應(yīng)的記錄,調(diào)用指令重組單元9103進(jìn)行重組操作。
[0472]其中,指令重組單元9103包括:
[0473]指令解析單元9111,是上述指令分析單元7120和指令分析單元8120的組合,適于分析所述硬件指令并判斷所述待調(diào)度/執(zhí)行的機(jī)器指令片段中的每一條硬件指令是否為存儲(chǔ)或讀取指令;
[0474]指令修改單元9112,如果指令解析單元9111發(fā)現(xiàn)存儲(chǔ)或讀取指令:
[0475]對(duì)于存儲(chǔ)指令,修改所述存儲(chǔ)指令中的目標(biāo)地址為對(duì)應(yīng)的在安全存儲(chǔ)設(shè)備上的存儲(chǔ)地址;
[0476]對(duì)于讀取指令,查找映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改所述讀取指令中的讀取地址;
[0477]更新單元9113,適于在指令修改單元9112修改所述存儲(chǔ)指令之后,更新映射位圖中所述目標(biāo)地址對(duì)應(yīng)的位,以體現(xiàn)已經(jīng)轉(zhuǎn)儲(chǔ);
[0478]同步單元9114,適于建立計(jì)算終端系統(tǒng)與所述安全存儲(chǔ)設(shè)備的通訊,并將映射位圖在所述計(jì)算終端系統(tǒng)和所述安全存儲(chǔ)設(shè)備之間進(jìn)行同步。
[0479]在指令解析單元9111、指令修改單元9112、更新單元9113和同步單元9114操作完成后,指令重組單元9103適于替換第一跳轉(zhuǎn)指令為壓棧指令,在壓棧指令中記錄第一跳轉(zhuǎn)指令的地址和操作數(shù);還適于在壓棧指令之后加入第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置9100的入口地址;還適于將重組指令片段的第二地址與第一地址在地址對(duì)應(yīng)表中建立一條記錄。
[0480]基于上一段的描述,指令重組單元9103在其他實(shí)施例中,也可以與指令解析單元9111、指令修改單元9112、更新單元9113和同步單元9114作為同一層次的并列單元(如圖26所示)ο
[0481]指令重組單元9103獲得重組指令片段后,還適于調(diào)用指令運(yùn)行環(huán)境緩存和恢復(fù)單元9101恢復(fù)所緩存的指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到重組指令片段的地址繼續(xù)執(zhí)行(重組操作完成)。
[0482]本領(lǐng)域技術(shù)人員可以理解,該實(shí)施例只是為了說明而舉例,并不限制數(shù)據(jù)安全讀取裝置、數(shù)據(jù)安全存儲(chǔ)裝置和指令重組裝置合并方式,上述介紹的各種數(shù)據(jù)安全讀取裝置、數(shù)據(jù)安全存儲(chǔ)裝置和指令重組裝置可以以各種所需的方式合并。
[0483]另外,上述安全存儲(chǔ)方法和裝置還可以與云技術(shù)結(jié)合,確保云內(nèi)數(shù)據(jù)的安全,從而加快云計(jì)算(cloud computing)的應(yīng)用和普及。具體實(shí)施例在下面將給予介紹。
[0484]本領(lǐng)域技術(shù)人員可以理解,在安全層實(shí)現(xiàn)的上述方法也可以在操作系統(tǒng)內(nèi)核層至硬件層中的各個(gè)層內(nèi)完成。具體功能的實(shí)現(xiàn)位置并不脫離本發(fā)明的精神和范圍。
[0485]上述實(shí)施例中詳細(xì)的介紹了本發(fā)明提供的安全存儲(chǔ)方法和裝置,與現(xiàn)有技術(shù)相t匕,具有如下優(yōu)點(diǎn):
[0486]1、數(shù)據(jù)安全存儲(chǔ)方法實(shí)現(xiàn)了指令級(jí)數(shù)據(jù)轉(zhuǎn)儲(chǔ)即數(shù)據(jù)全轉(zhuǎn)儲(chǔ),以此為基礎(chǔ),實(shí)現(xiàn)了計(jì)算終端系統(tǒng)全運(yùn)行周期的數(shù)據(jù)安全存儲(chǔ)方法,一方面,使木馬或惡意工具即使取得了涉密信息也無法保存所取得的信息,使數(shù)據(jù)始終存在于可控的安全范圍內(nèi);另一方面,本地不再保存在涉密狀態(tài)下的任何數(shù)據(jù),因此防止了涉密人員的主動(dòng)泄密和被動(dòng)泄密;
[0487]2、接收來自硬件映射層的硬件指令可以100%的篩查所有指令,進(jìn)一步提高數(shù)據(jù)安全性。
[0488]上述實(shí)施例中還詳細(xì)的介紹了本發(fā)明提供的安全讀取方法和裝置,與現(xiàn)有技術(shù)相t匕,具有如下優(yōu)點(diǎn):
[0489]1、數(shù)據(jù)安全讀取方法配合數(shù)據(jù)安全存儲(chǔ)方法使數(shù)據(jù)始終存在于可控的安全范圍內(nèi),并且保證在安全存儲(chǔ)數(shù)據(jù)(轉(zhuǎn)儲(chǔ))之后,可以將轉(zhuǎn)儲(chǔ)數(shù)據(jù)讀出;由于本地將不再保存在涉密狀態(tài)下的任何數(shù)據(jù),因此防止了涉密人員的主動(dòng)泄密和被動(dòng)泄密;
[0490]2、安全存儲(chǔ)設(shè)備為遠(yuǎn)程存儲(chǔ)設(shè)備時(shí),可以為多個(gè)終端共享,提高安全存儲(chǔ)設(shè)備的空間使用效率。
[0491] 應(yīng)該注意到并理解,在不脫離后附的權(quán)利要求所要求的本發(fā)明的精神和范圍的情況下,能夠?qū)ι鲜鲈敿?xì)描述的本發(fā)明做出各種修改和改進(jìn)。因此,要求保護(hù)的技術(shù)方案的范圍不受所給出的任何特定示范教導(dǎo)的限制。
【權(quán)利要求】
1.一種數(shù)據(jù)安全讀取方法,包括: 步驟1、緩存指令運(yùn)行環(huán)境; 步驟2、從第一存儲(chǔ)位置讀取目標(biāo)地址,根據(jù)目標(biāo)地址獲取待調(diào)度的機(jī)器指令片段;待調(diào)度的機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令; 步驟3、在第一存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址; 步驟4、分析待調(diào)度的機(jī)器指令片段中的每一條指令,如果其為讀取指令,獲取讀取指令中的源地址,并且查找映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改讀取指令中的讀取地址;所述映射位圖用于表示本地存儲(chǔ)地址的數(shù)據(jù)是否轉(zhuǎn)儲(chǔ)到所述安全存儲(chǔ)設(shè)備; 步驟5、將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向指令重組平臺(tái)的入口地址;和 步驟6、恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到第二地址繼續(xù)執(zhí)行; 其中,步驟3和步驟4的執(zhí)行順序可以互換。
2.如權(quán)利要求1所述的數(shù)據(jù)安全讀取方法,在步驟4之前,還包括: 建立計(jì)算終端系統(tǒng)與所述安全存儲(chǔ)設(shè)備的通訊; 將所述安全存儲(chǔ)設(shè)備上的第二映射位圖同步到所述計(jì)算終端系統(tǒng),保存為映射位圖。
3.如權(quán)利要求1所述的數(shù)據(jù)安全讀取方法,其中,所述的硬件指令為硬件端口I/O指令。
4.如權(quán)利要求1所述的數(shù)據(jù)安全讀取方法,其中,所述安全存儲(chǔ)設(shè)備為遠(yuǎn)程存儲(chǔ)設(shè)備,所述遠(yuǎn)程存儲(chǔ)設(shè)備被多個(gè)計(jì)算終端系統(tǒng)共享。
5.如權(quán)利要求1所述的數(shù)據(jù)安全讀取方法,其中,所述硬件指令來自硬件映射層。
6.如權(quán)利要求1所述的數(shù)據(jù)安全讀取方法,步驟2中,根據(jù)目標(biāo)地址獲取待調(diào)度指令片段包括: 從目標(biāo)地址開始,獲取待調(diào)度的一段機(jī)器指令,將該段機(jī)器指令進(jìn)行反匯編; 檢查反匯編結(jié)果中是否包含跳轉(zhuǎn)指令,如果不包含則繼續(xù)獲取后面一段待調(diào)度的機(jī)器指令,直到匹配到跳轉(zhuǎn)指令為止,該跳轉(zhuǎn)指令為第一跳轉(zhuǎn)指令;其中,第一跳轉(zhuǎn)指令以及之前的所有指令組成待調(diào)度指令片段。
7.如權(quán)利要求6所述的數(shù)據(jù)安全讀取方法,在步驟5和步驟6之間,還包括: 將生成的重組后的匯編代碼通過匯編器生成對(duì)應(yīng)的機(jī)器碼。
8.如權(quán)利要求1所述的數(shù)據(jù)安全讀取方法,在步驟I和步驟2之間,還包括: 從第一存儲(chǔ)位置讀取目標(biāo)地址,利用所述目標(biāo)地址查找地址對(duì)應(yīng)表;所述地址對(duì)應(yīng)表用于表示待調(diào)度的機(jī)器指令片段是否具有已保存的重組指令片段; 如果找到相應(yīng)的記錄,恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到紀(jì)錄中的保存地址繼續(xù)執(zhí)行。
9.如權(quán)利要求8所述的數(shù)據(jù)安全讀取方法,如果在地址對(duì)應(yīng)表中沒有找到相應(yīng)的紀(jì)錄,在步驟5之后,還包括: 利用重組指令片段的地址與所述目標(biāo)地址在地址對(duì)應(yīng)表中建立一條記錄。
10.一種計(jì)算機(jī)可讀介質(zhì),所述可讀介質(zhì)中存儲(chǔ)有計(jì)算機(jī)可執(zhí)行的程序代碼,所述程序代碼用于執(zhí)行權(quán)利要求1-9任一所述方法的步驟。
11.一種數(shù)據(jù)安全讀取裝置,包括: 指令運(yùn)行環(huán)境緩存和恢復(fù)單元,適于緩存和恢復(fù)指令運(yùn)行環(huán)境;第一存儲(chǔ)位置,適于保存目標(biāo)地址; 指令獲取單元,與指令運(yùn)行環(huán)境緩存和恢復(fù)單元耦接,適于從第一存儲(chǔ)位置讀取目標(biāo)地址,并根據(jù)目標(biāo)地址獲取待調(diào)度的機(jī)器指令片段;其中,待調(diào)度機(jī)器指令片段的最后一條指令為第一跳轉(zhuǎn)指令; 指令分析單元,適于分析所述待調(diào)度機(jī)器指令片段中每一條硬件指令并判斷所述硬件指令是否為讀取指令; 指令修改單元,適于查找映射位圖,并根據(jù)映射位圖的數(shù)據(jù)修改讀取指令中的讀取地址;所述映射位圖用于表示本地存儲(chǔ)地址的數(shù)據(jù)是否轉(zhuǎn)儲(chǔ)到所述安全存儲(chǔ)設(shè)備;和 指令重組單元,與指令運(yùn)行環(huán)境緩存和恢復(fù)單元耦接,適于在第一存儲(chǔ)位置保存第一跳轉(zhuǎn)指令的目標(biāo)地址;還適于將第一跳轉(zhuǎn)指令替換為第二跳轉(zhuǎn)指令,生成具有第二地址的重組指令片段;所述第二跳轉(zhuǎn)指令指向裝置的入口地址。
12.如權(quán)利要求11所述的數(shù)據(jù)安全讀取裝置,還包括: 同步單元,適于建立計(jì)算終端系統(tǒng)與所述安全存儲(chǔ)設(shè)備的通訊,并將映射位圖在所述計(jì)算終端系統(tǒng)和所述安全存儲(chǔ)設(shè)備之間進(jìn)行同步。
13.如權(quán)利要求11所述的數(shù)據(jù)安全讀取裝置,其中,所述安全存儲(chǔ)設(shè)備為遠(yuǎn)程存儲(chǔ)設(shè)備,所述遠(yuǎn)程存儲(chǔ)設(shè)備被多個(gè)計(jì)算終端系統(tǒng)共享。
14.如權(quán)利要求11所述的數(shù)據(jù)安全讀取裝置,還包括: 指令檢索單元,適于利用所述目標(biāo)地址查找地址對(duì)應(yīng)表;所述地址對(duì)應(yīng)表用于表示待調(diào)度機(jī)器指令片段是否具有已保 存的重組指令片段; 如果找到相應(yīng)的記錄,指令檢索單元還適于調(diào)用指令運(yùn)行環(huán)境緩存和恢復(fù)單元,恢復(fù)所述指令運(yùn)行環(huán)境,并跳轉(zhuǎn)到紀(jì)錄中的保存地址繼續(xù)執(zhí)行; 如果沒有找到相應(yīng)的記錄,指令檢索單元還適于利用重組指令片段的地址與所述目標(biāo)地址在地址對(duì)應(yīng)表中建立一條記錄。
15.如權(quán)利要求11所述的數(shù)據(jù)安全讀取裝置,還包括: 反匯編單元,適于在指令分析單元分析所述待調(diào)度的機(jī)器指令片段之前,反匯編所述待調(diào)度的機(jī)器指令片段,生成待調(diào)度的匯編指令片段; 匯編單元,適于匯編重組后的匯編指令片段,得到機(jī)器碼表示的重組指令片段。
【文檔編號(hào)】G06F21/60GK103679040SQ201210325943
【公開日】2014年3月26日 申請(qǐng)日期:2012年9月6日 優(yōu)先權(quán)日:2012年9月6日
【發(fā)明者】汪家祥, 楊瀟 申請(qǐng)人:北京中天安泰信息科技有限公司