[發(fā)明專利]基于塊對目標代碼掃描并替換敏感指令的方法無效
| 申請?zhí)枺?/td> | 200910043831.6 | 申請日: | 2009-07-03 |
| 公開(公告)號: | CN101630269A | 公開(公告)日: | 2010-01-20 |
| 發(fā)明(設(shè)計)人: | 張衛(wèi)華;劉曉建;易曉東;譚郁松;吳慶波;戴華東;孔金珠 | 申請(專利權(quán))人: | 中國人民解放軍國防科學(xué)技術(shù)大學(xué) |
| 主分類號: | G06F9/455 | 分類號: | G06F9/455;G06F17/30 |
| 代理公司: | 國防科技大學(xué)專利服務(wù)中心 | 代理人: | 郭 敏 |
| 地址: | 410073湖*** | 國省代碼: | 湖南;43 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 目標 代碼 掃描 替換 敏感 指令 方法 | ||
1.一種基于塊對目標代碼掃描并替換敏感指令的方法,其特征在于包括以下步驟:
步驟1.創(chuàng)建并初始化全局數(shù)據(jù)結(jié)構(gòu):
1.1創(chuàng)建并初始化掃描信息位圖頁目錄頁:分配一個數(shù)據(jù)頁作為掃描信息位圖索引結(jié)構(gòu)中的頁目錄頁,并將頁目錄頁中的頁目錄項全部初始化為0;掃描信息位圖是指以位圖形式實現(xiàn)的、用于保存GOS內(nèi)核虛地址掃描狀態(tài)及相關(guān)信息的數(shù)據(jù)結(jié)構(gòu);在掃描信息位圖中,每條GOS虛地址的掃描信息由與該地址一一對應(yīng)的掃描信息位元 稱為位元進行描述,每個掃描信息位元由二個比特位組成:00表示該位元對應(yīng)的虛地址未掃描或非指令首地址;01表示該位元對應(yīng)的虛地址已掃描;10表示該位元對應(yīng)的虛地址未掃描或非指令首地址且為基本塊邊界或控制轉(zhuǎn)移指令目標地址;11表示該位元對應(yīng)的虛地址已掃描且為基本塊邊界地址或控制轉(zhuǎn)移指令目標地址;基本塊是指以GOS起始執(zhí)行地址、GOS中斷處理函數(shù)首地址或控制轉(zhuǎn)移指令目標地址為起始邊界,以無條件控制轉(zhuǎn)移指令或已掃描地址為結(jié)束邊界的連續(xù)目標指令序列;掃描信息位圖索引結(jié)構(gòu)由掃描信息位圖頁目錄頁、掃描信息位圖頁表頁和掃描信息位圖頁組成,GOS內(nèi)核虛地址劃分為頁目錄索引、頁表索引和頁內(nèi)偏移三個位段,頁目錄索引存放頁表頁的首地址,頁表索引存放位圖頁的首地址,頁內(nèi)偏移存放內(nèi)核虛地址對應(yīng)的掃描信息位元在位圖頁中的偏移量;
1.2初始化待掃描入口地址隊列及已替換RB有效信息平衡二叉樹:將待掃描入口地址隊列及已替換RB有效信息平衡二叉樹的頭指針設(shè)為NULL;待掃描入口地址隊列是指以線性鏈表形式實現(xiàn)的、保存動態(tài)掃描時發(fā)現(xiàn)的控制轉(zhuǎn)移指令目標地址及其調(diào)用地址的數(shù)據(jù)結(jié)構(gòu),待掃描入口地址隊列節(jié)點以目標地址為索引值,按地址大小按序排列;已替換RB有效信息平衡二叉樹是指以平衡二叉樹AVL形式實現(xiàn)的、保存被替換RB相關(guān)信息的數(shù)據(jù)結(jié)構(gòu),樹中節(jié)點以被替換RB首地址為索引值,其它信息包括被替換RB的長度及其與對應(yīng)TB中每條指令地址的對應(yīng)關(guān)系;RB是替換塊,指滿足以下條件的最短連續(xù)目標指令序列:位于基本塊內(nèi)部,包括基本塊自身;包含指定敏感指令且長度不小于JMP指令長度;不含所屬基本塊范圍之內(nèi)、本替換塊范圍之外任何控制轉(zhuǎn)移指令的目標地址,本替換塊首地址除外;TB是轉(zhuǎn)換塊,指替換塊被替換之后,經(jīng)由替換指令執(zhí)行、包含虛擬化代碼或安全檢查代碼且與原替換塊具有等價執(zhí)行語義的一組指令序列;
1.3令全局變量M=JMP替換指令長度;
步驟2.從GOS內(nèi)核加載程序輸入?yún)?shù)中獲取GOS內(nèi)核起始執(zhí)行地址,記為首個掃描?入口地址,然后對首個掃描入口地址進行動態(tài)掃描:
2.1.采用掃描狀態(tài)查詢方法檢查首個掃描入口地址的掃描狀態(tài):若已掃描,轉(zhuǎn)步驟3;若未掃描,將首個掃描入口地址記為基本塊起始邊界,轉(zhuǎn)2.2;
2.2.對基本塊起始邊界進行基本塊掃描,方法是:
2.2.1初始化待轉(zhuǎn)換敏感指令隊列:將待轉(zhuǎn)換敏感指令隊列頭指針設(shè)為NULL;待轉(zhuǎn)換敏感指令隊列是指以線性鏈表形式實現(xiàn)的、保存基本塊掃描時發(fā)現(xiàn)的敏感指令地址及其相關(guān)信息的數(shù)據(jù)結(jié)構(gòu),待轉(zhuǎn)換敏感指令隊列節(jié)點以敏感指令地址為索引值,按地址大小按序排列;
2.2.2將基本塊起始地址設(shè)為待掃描地址;
2.2.3對待掃描地址處指令進行譯碼,根據(jù)譯碼結(jié)果執(zhí)行以下操作:
2.2.3.1若為敏感指令或間接控制轉(zhuǎn)移指令,則將該指令添加到待轉(zhuǎn)換敏感指令隊列,轉(zhuǎn)2.2.4;
2.2.3.2若為直接控制轉(zhuǎn)移指令,則首先采用目標地址有效性檢查方法檢查該目標地址是否指向已替換RB內(nèi)部:若指向已替換RB內(nèi)部,則將直接控制轉(zhuǎn)移指令添加到待轉(zhuǎn)換敏感指令隊列,然后轉(zhuǎn)2.2.4;若不指向已替換RB內(nèi)部,則采用掃描狀態(tài)查詢方法檢查目標地址的掃描狀態(tài),若目標地址已掃描則轉(zhuǎn)2.2.4,否則將目標地址添加到待掃描入口地址隊列,轉(zhuǎn)2.2.4;
2.2.3.3若為普通指令,則轉(zhuǎn)2.2.4;
2.2.4根據(jù)譯碼結(jié)果記錄被掃描指令的掃描狀態(tài),方法為:首先采用掃描信息位元索引方法得到被掃描指令首地址對應(yīng)位元的實際位置,將該位元的低位設(shè)為1;然后采用掃描信息位元索引方法依次得到被掃描指令所有剩余字節(jié)對應(yīng)位元的實際位置,將這些位元設(shè)為00;最后若被掃描指令為直接控制轉(zhuǎn)移指令,則采用掃描信息位元索引方法得到該控制轉(zhuǎn)移指令目標地址對應(yīng)的位元的實際位置,并將該位元的高位設(shè)為1;
2.2.5將被掃描指令地址加上該指令長度,得到下一條指令的首地址;
2.2.6若被掃描指令為無條件控制轉(zhuǎn)移指令或下一條指令首地址已掃描,則將下一條指令首地址設(shè)為基本塊的結(jié)束邊界,并將其掃描信息位元的高位設(shè)為1,表示該地址為基本塊邊界地址或控制轉(zhuǎn)移指令目標地址,然后結(jié)束本次基本塊掃描并轉(zhuǎn)2.3;否則轉(zhuǎn)2.2.7;
2.2.7將下一條指令首地址設(shè)為待掃描地址,轉(zhuǎn)2.2.3,繼續(xù)進行基本塊掃描;
2.3對待轉(zhuǎn)換敏感指令隊列中的敏感指令進行基于替換塊的敏感指令本地替換:
2.3.1若待轉(zhuǎn)換敏感指令隊列為空,則停止替換,轉(zhuǎn)步驟3;若待轉(zhuǎn)換敏感指令隊列?不為空,從待轉(zhuǎn)換敏感指令隊列中取出最小的敏感指令地址,在基本塊內(nèi)尋找包含該敏感指令的替換塊,尋找方法如下:
2.3.1.1將該敏感指令自身設(shè)為當前RB;
2.3.1.2若當前RB長度不小于M字節(jié),則將當前RB設(shè)為待轉(zhuǎn)換RB,轉(zhuǎn)2.3.3;若當前RB長度小于M字節(jié),嘗試向低地址空間擴展相鄰指令到當前RB,擴展方法如下:
A1.若當前RB首地址為基本塊起始邊界,轉(zhuǎn)2.3.1.3;否則向低地址空間擴展一條指令到當前RB,轉(zhuǎn)B1;
B1.若該低位為1的位元的高位為1,執(zhí)行C1,否則轉(zhuǎn)2.3.1.2;
C1.檢查待掃描入口地址隊列,若發(fā)現(xiàn)以低位為1位元對應(yīng)的虛地址為索引值的節(jié)點,則采用遍歷擴展方法檢查該節(jié)點的調(diào)用者隊列,將所有位于基本塊范圍之內(nèi)的調(diào)用者地址與當前RB之間的所有指令擴展到當前RB,轉(zhuǎn)2.3.1.2;若未發(fā)現(xiàn)以低位為1位元對應(yīng)的虛地址為索引值的節(jié)點,則轉(zhuǎn)2.3.1.2;調(diào)用者隊列是指以線性鏈表形式實現(xiàn)的、保存具有相同目標地址的控制轉(zhuǎn)移指令地址的數(shù)據(jù)結(jié)構(gòu),調(diào)用者地址隊列節(jié)點以控制轉(zhuǎn)移指令地址為索引值,包含在待掃描入口地址隊列的每個節(jié)點之中;
2.3.1.3嘗試向高地址空間擴展相鄰指令到當前RB,擴展方法如下:
A2.若當前RB結(jié)束邊界為基本塊的結(jié)束邊界,轉(zhuǎn)2.3.2,否則向高地址空間擴展一條基本塊指令到當前RB;
B2.若被擴展指令首地址對應(yīng)的位元為10,轉(zhuǎn)2.3.2;否則檢查被擴展指令首地址對應(yīng)位元的高位,若高位為1,轉(zhuǎn)C2,若高位為0,轉(zhuǎn)2.3.1.2;
C2.檢查待掃描入口地址隊列,若發(fā)現(xiàn)以被擴展指令首地址為索引值的節(jié)點,則采用遍歷擴展方法檢查該節(jié)點的調(diào)用者隊列,將所有位于基本塊范圍之內(nèi)的調(diào)用者地址與當前RB之間的所有指令擴展到當前RB,轉(zhuǎn)2.3.1.2,若未發(fā)現(xiàn)以被擴展指令首地址為索引值的節(jié)點,直接轉(zhuǎn)2.3.1.2;
2.3.2若當前RB長度小于M字節(jié),則將敏感指令設(shè)為待轉(zhuǎn)換RB;否則將當前RB設(shè)為待轉(zhuǎn)換RB;
2.3.3采用二進制翻譯中的常規(guī)方法生成與待轉(zhuǎn)換RB具有等價執(zhí)行語義的轉(zhuǎn)換代碼塊,記為TB;
2.3.4若待轉(zhuǎn)換RB的長度不小于M字節(jié),則將該RB前M字節(jié)替換為JMP指令,目標地址為TB首地址,剩余字節(jié)用NOP指令填充,得到已替換RB;若待轉(zhuǎn)換RB的長度小于M字節(jié),則將該RB的首字節(jié)替換為INT3指令,剩余字節(jié)用NOP指令填充,得到已替?換RB;
2.3.5在已替換RB有效信息平衡二叉樹中創(chuàng)建已替換RB的節(jié)點,該節(jié)點包括已替換RB的首地址、長度及其與TB指令之間的地址對應(yīng)關(guān)系這些有效信息;
2.3.6遍歷待掃描敏感指令隊列,刪除所有以已替換RB中的敏感指令地址為索引值的節(jié)點,轉(zhuǎn)2.3.1;
2.4遍歷待掃描入口地址隊列,刪除所有以已掃描入口地址為索引值的節(jié)點;
2.5若待掃描入口地址隊列為空,則結(jié)束本次動態(tài)掃描,轉(zhuǎn)步驟3;否則從待掃描入口地址隊列中取出最大未掃描入口地址,記為基本塊起始邊界,轉(zhuǎn)2.2執(zhí)行下一次基本塊掃描;
步驟3從首個掃描入口地址開始執(zhí)行GOS內(nèi)核代碼,直至產(chǎn)生硬件中斷或異常或執(zhí)行間接控制轉(zhuǎn)移指令的轉(zhuǎn)換代碼;
步驟4.將GOS中斷或異常處理函數(shù)的入口地址或間接控制轉(zhuǎn)移指令的目標地址設(shè)為首個掃描入口地址,轉(zhuǎn)2.1。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于中國人民解放軍國防科學(xué)技術(shù)大學(xué),未經(jīng)中國人民解放軍國防科學(xué)技術(shù)大學(xué)許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/200910043831.6/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 上一篇:一種塔機頂升油缸
- 下一篇:雙作用葉片式液壓變壓器





