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

去除花指令的方法及裝置的制作方法

文檔序號(hào):6338850閱讀:438來源:國知局
專利名稱:去除花指令的方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及信息安全領(lǐng)域,特別涉及去除花指令的方法及裝置。
技術(shù)背景
當(dāng)前的網(wǎng)絡(luò)環(huán)境中,存在著大量的惡意代碼,并且,惡意代碼的作者為了干擾 信息安全人員對惡意代碼進(jìn)行分析,增加代碼的逆向難度,常會(huì)使用加入花指令或隨機(jī) 插入垃圾代碼等方法,這既造成了信息安全人員對惡意代碼分析困難,也造成了難以提 取特征碼的問題,導(dǎo)致一個(gè)文件就需要一段特征來匹配,有多少文件,就需要多少特 征,這無疑增加了信息安全人員的工作量?,F(xiàn)在的技術(shù)只能通過虛擬執(zhí)行的方法,強(qiáng)制 執(zhí)行代碼,直至解密出固定可供提取特征的數(shù)據(jù)來解決這種問題,并且,虛擬執(zhí)行的速 度很慢,而且有分析失控而導(dǎo)致誤運(yùn)行惡意代碼的可能。發(fā)明內(nèi)容
本發(fā)明提供了一種去除花指令的方法及裝置,解決了虛擬執(zhí)行速度慢,易分析 失控的問題。
一種去除花指令的方法,包括步驟a:對內(nèi)存緩沖區(qū)中的指令進(jìn)行反匯編,并保存反匯編得到的指令; 步驟b:判斷反匯編得到的指令是否是寫內(nèi)存指令,如果是,則查找并保存寫內(nèi)存 指令寄存器,轉(zhuǎn)步驟d,否則,轉(zhuǎn)步驟C;步驟c:判斷反匯編得到的指令是否是循環(huán)跳轉(zhuǎn)指令,如果是,則查找并保存控制循 環(huán)體寄存器,轉(zhuǎn)步驟d,否則,直接轉(zhuǎn)步驟d;步驟d:判斷是否達(dá)到停止進(jìn)行反匯編的條件,如果是,則轉(zhuǎn)步驟e,否則,轉(zhuǎn)步驟a ;步驟e:對于保存的任意一個(gè)寄存器,在反匯編得到的所有指令中逆向查找與所述寄 存器相關(guān)的指令,當(dāng)滿足停止查找的條件時(shí),停止查找與所述寄存器相關(guān)的指令;步驟f:當(dāng)查找完所有寄存器的相關(guān)指令后,刪除反匯編得到的所有指令中與寄存器 的相關(guān)指令不同的指令。
所述的方法中,判斷反匯編得到的指令是否是寫內(nèi)存指令包括判斷反匯編得到的指令中的目的操作數(shù)是否為內(nèi)存地址,如果是,則確定為寫內(nèi)存 指令,否則,為非寫內(nèi)存指令;或者,判斷反匯編得到的指令是否為隱式操作數(shù)指令,如果是,則確定為寫內(nèi)存指 令,否則,為非寫內(nèi)存指令。
所述的方法中,如果反匯編得到的指令為循環(huán)跳轉(zhuǎn)指令,則查找并保存控制循 環(huán)體寄存器包括如果循環(huán)跳轉(zhuǎn)指令為LOOP指令、LOOPNE指令或LOOPZ指令,則保存ECX寄存器;如果循環(huán)跳轉(zhuǎn)指令為jcc指令,則逆向查找第一個(gè)CMP指令、SUB指令、TEST指 令、OR指令或AND指令,保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存 器、OR指令寄存器或AND指令寄存器;如果循環(huán)跳轉(zhuǎn)指令為jmp指令,則查找能夠調(diào)出循環(huán)體的組合指令,保存所述組合 指令寄存器。
所述的方法中,保存寫內(nèi)存指令寄存器包括將寫內(nèi)存指令寄存器保存到寄存 器鏈表中;保存控制循環(huán)體寄存器包括將控制循環(huán)體寄存器保存到寄存器鏈表中; 對于保存的任意一個(gè)寄存器具體為對于寄存器鏈表中的任意一個(gè)寄存器。
所述的方法中,判斷是否達(dá)到停止進(jìn)行反匯編的條件具體為 判斷反匯編得到的指令是否是循環(huán)體結(jié)束指令;或者,判斷反匯編指令的數(shù)量是否達(dá)到預(yù)設(shè)的數(shù)量。
所述的方法中,滿足停止查找的條件具體為查找到將數(shù)據(jù)從內(nèi)存讀取到CPU的 指令。
一種去除花指令的裝置,包括反匯編單元,用于對緩沖區(qū)中的指令進(jìn)行反匯編,并保存反匯編得到的指令; 第一判斷單元,用于判斷反匯編得到的指令是否是寫內(nèi)存指令; 存儲(chǔ)單元,用于當(dāng)?shù)谝慌袛鄦卧袛喾磪R編得到的指令是寫內(nèi)存指令時(shí),查找并保 存寫內(nèi)存指令寄存器;第二判斷單元,用于在第一判斷單元判斷反匯編得到的指令為非寫內(nèi)存指令后,判 斷反匯編得到的指令是否是循環(huán)跳轉(zhuǎn)指令,如果是,則存儲(chǔ)單元查找并保存控制循環(huán)體 寄存器;第三判斷單元,用于當(dāng)?shù)谝慌袛鄦卧袛喾磪R編得到的指令是寫內(nèi)存指令后,或者 當(dāng)?shù)诙袛鄦卧袛喾磪R編得到的指令是否是循環(huán)跳轉(zhuǎn)指令后,判斷是否達(dá)到停止進(jìn)行 反匯編的條件,如果沒有達(dá)到停止進(jìn)行反匯編的條件,則有反匯編單元對緩沖區(qū)的下一 指令進(jìn)行反匯編;查找單元,用于在第三判斷單元判斷達(dá)到停止進(jìn)行反匯編的條件后,對于存儲(chǔ)單元 保存的任意一個(gè)寄存器,在反匯編單元進(jìn)行反匯編得到的所有指令中,逆向查找與所述 寄存器相關(guān)的指令,當(dāng)滿足停止查找條件時(shí),停止查找與所述寄存器相關(guān)的指令;比較單元,用于當(dāng)查找單元查找完所有寄存器的相關(guān)指令后,刪除反匯編得到的所 有指令中與寄存器的相關(guān)指令不同的指令。
所述的裝置中,第一判斷單元具體用于判斷反匯編得到的指令中的目的操作數(shù) 是否為內(nèi)存地址,如果是,則確定為寫內(nèi)存指令,否則,為非寫內(nèi)存指令;或者,第一判斷單元具體用于判斷反匯編得到的指令是否為隱式操作數(shù)指令,如果 是,則確定為寫內(nèi)存指令,否則,為非寫內(nèi)存指令。
所述的裝置中,如果第二判斷單元判斷出循環(huán)跳轉(zhuǎn)指令為LOOP指令、 LOOPNE指令或LOOPZ指令,則存儲(chǔ)單元保存ECX寄存器;如果第二判斷單元判斷出循環(huán)跳轉(zhuǎn)指令為jcc指令,則逆向查找第一個(gè)CMP指令、 SUB指令、TEST指令、OR指令或AND指令,則存儲(chǔ)單元保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存器、OR指令寄存器或AND指令寄存器;如果第二判斷單元判斷出循環(huán)跳轉(zhuǎn)指令為jmp指令,則存儲(chǔ)單元查找能夠調(diào)出循環(huán) 體的組合指令,并保存所述指令寄存器。
所述的裝置中,存儲(chǔ)單元具體用于將寫內(nèi)存指令寄存器保存到寄存器鏈表中; 存儲(chǔ)單元保存控制循環(huán)體寄存器包括將控制循環(huán)體寄存器保存到寄存器鏈表中; 對于保存的任意一個(gè)寄存器具體為對于寄存器鏈表中的任意一個(gè)寄存器。
所述的裝置中,第三判斷單元具體用于判斷反匯編得到的指令是否是循環(huán)體結(jié) 束指令;或者,第三判斷單元具體用于判斷反匯編指令的數(shù)量是否達(dá)到預(yù)設(shè)的數(shù)量。
所述的裝置中,滿足停止查找的條件具體為查找到將數(shù)據(jù)從內(nèi)存讀取到CPU的 指令。
本發(fā)明提供了一種去除花指令的方法和裝置,通過對緩沖區(qū)中的指令進(jìn)行反匯 編,并保存所有反匯編得到的指令,保存所有的寫內(nèi)存指令及寫內(nèi)存指令寄存器,根據(jù) 寫內(nèi)存指令寄存器,逆向查找反匯編得到的所有指令,查找到所有與寫內(nèi)存指令寄存器 相關(guān)的指令,將反匯編得到的所有指令與寄存器相關(guān)指令進(jìn)行比較,刪除不同的指令, 刪除的指令即為花指令,刪除花指令不影響程序的正常運(yùn)行,并解決了虛擬執(zhí)行速度 慢,易分析失控的問題。


為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描 述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明中 記載的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還 可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明提供的一種去除花指令的方法流程圖; 圖2為本發(fā)明提供的一種去除花指令的裝置結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實(shí)施例中的技術(shù)方案,并使本發(fā)明 的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明中技術(shù)方案作進(jìn)一 步詳細(xì)的說明。
本發(fā)明提供了一種去除花指令的方法及裝置,解決了虛擬執(zhí)行速度慢,易分析 失控的問題。
本發(fā)明提供了一種去除花指令的方法,包括步驟a:對內(nèi)存緩沖區(qū)中的指令進(jìn)行反匯編,并保存反匯編得到的指令; 步驟b:判斷反匯編得到的指令是否是寫內(nèi)存指令,如果是,則查找并保存寫內(nèi)存 指令寄存器,轉(zhuǎn)步驟d,否則,轉(zhuǎn)步驟C;步驟c:判斷反匯編得到的指令是否是循環(huán)跳轉(zhuǎn)指令,如果是,則查找并保存控制循 環(huán)體寄存器,轉(zhuǎn)步驟d,否則,直接轉(zhuǎn)步驟d;步驟d:判斷是否達(dá)到停止進(jìn)行反匯編的條件,如果是,則轉(zhuǎn)步驟e,否則,轉(zhuǎn)步驟步驟e:對于保存的任意一個(gè)寄存器,在反匯編得到的所有指令中逆向查找與所述寄 存器相關(guān)的指令,當(dāng)滿足停止查找的條件時(shí),停止查找與所述寄存器相關(guān)的指令;步驟f:當(dāng)查找完所有寄存器的相關(guān)指令后,刪除反匯編得到的所有指令中與寄存器 的相關(guān)指令不同的指令。
所述的方法中,判斷反匯編得到的指令是否是寫內(nèi)存指令包括判斷反匯編得到的指令中的目的操作數(shù)是否為內(nèi)存地址,如果是,則確定為寫內(nèi)存 指令,否則,為非寫內(nèi)存指令;或者,判斷反匯編得到的指令是否為隱式操作數(shù)指令,如果是,則確定為寫內(nèi)存指 令,否則,為非寫內(nèi)存指令。
所述的方法中,如果反匯編得到的指令為循環(huán)跳轉(zhuǎn)指令,則查找并保存控制循 環(huán)體寄存器包括如果循環(huán)跳轉(zhuǎn)指令為LOOP指令、LOOPNE指令或LOOPZ指令,則保存ECX寄存器;如果循環(huán)跳轉(zhuǎn)指令為jcc指令,則逆向查找第一個(gè)CMP指令、SUB指令、TEST指 令、OR指令或AND指令,保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存 器、OR指令寄存器或AND指令寄存器;如果循環(huán)跳轉(zhuǎn)指令為jmp指令,則查找能夠調(diào)出循環(huán)體的組合指令,保存所述組合 指令寄存器。
所述的方法中,保存寫內(nèi)存指令寄存器包括將寫內(nèi)存指令寄存器保存到寄存 器鏈表中;保存控制循環(huán)體寄存器包括將控制循環(huán)體寄存器保存到寄存器鏈表中; 對于保存的任意一個(gè)寄存器具體為對于寄存器鏈表中的任意一個(gè)寄存器。
所述的方法中,判斷是否達(dá)到停止進(jìn)行反匯編的條件具體為 判斷反匯編得到的指令是否是循環(huán)體結(jié)束指令;或者,判斷反匯編指令的數(shù)量是否達(dá)到預(yù)設(shè)的數(shù)量。
所述的方法中,滿足停止查找的條件具體為查找到將數(shù)據(jù)從內(nèi)存讀取到CPU的 指令。
結(jié)合上述方法的應(yīng)用,對本發(fā)明涉及的技術(shù)方案做進(jìn)一步舉例說明,本發(fā)明提 供了一種去除花指令的方法,如圖1所示,包括SlOl 對內(nèi)存緩沖區(qū)中的指令進(jìn)行反匯編,并保存反匯編得到的指令; S102判斷反匯編得到的指令是否是寫內(nèi)存指令,如果是,則執(zhí)行S103,否則,執(zhí) 行 S104 ;S103查找并保存所有寫內(nèi)存指令寄存器到寄存器鏈表中,執(zhí)行S106; 查找并保存所有寫內(nèi)存指令寄存器到寄存器鏈表包括 當(dāng)寫內(nèi)存指令為STOS指令時(shí),直接記錄寄存器EAX、EDI ; 當(dāng)寫內(nèi)存指令為pop指令時(shí),如果所述的pop指令操作寄存器,則記錄所操作的寄存 器,并逆向查找到第一個(gè)push指令,并記錄相寄存器; 其他情況則直接記錄寄存器。
S104判斷是否是循環(huán)跳轉(zhuǎn)指令,如果是,則執(zhí)行S105,否則直接執(zhí)行S106 ;S105查找并保存控制循環(huán)體寄存器到寄存器鏈表,執(zhí)行S106; S106 判斷是否到達(dá)停止進(jìn)行反匯編的條件;S107根據(jù)寄存器鏈表中記錄的任意一個(gè)寄存器,逐一在反匯編得到的指令鏈中逆 向查找并存儲(chǔ)與所述寄存器相關(guān)指令,當(dāng)查找到將數(shù)據(jù)從內(nèi)存讀取到CPU的指令時(shí),停 止對當(dāng)前寄存器的查找;S108 刪除反匯編得到的所有指令中與寄存器相關(guān)指令不同的指令。
判斷反匯編得到的指令是否是寫內(nèi)存指令包括判斷反匯編得到的指令中的目的操作數(shù)是否為內(nèi)存地址,如果是,則確定為寫內(nèi)存 指令,否則,為非寫內(nèi)存指令;或者,判斷反匯編得到的指令是否為隱式操作數(shù)指令,如果是,則確定為寫內(nèi)存指 令,否則,為非寫內(nèi)存指令。
如果反匯編得到的指令為循環(huán)跳轉(zhuǎn)指令,則查找并保存控制循環(huán)體寄存器包 括如果循環(huán)跳轉(zhuǎn)指令為LOOP指令、LOOPNE指令或LOOPZ指令,則保存ECX寄存器;如果循環(huán)跳轉(zhuǎn)指令為jcc指令,則逆向查找第一個(gè)CMP指令、SUB指令、TEST指 令、OR指令或AND指令,保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存 器、OR指令寄存器或AND指令寄存器;如果循環(huán)跳轉(zhuǎn)指令為jmp指令,則查找能夠調(diào)出循環(huán)體的組合指令,保存所述組合 指令寄存器。
判斷是否達(dá)到停止進(jìn)行反匯編的條件具體為 判斷反匯編得到的指令是否是循環(huán)體結(jié)束指令; 或者,判斷反匯編指令的數(shù)量是否達(dá)到預(yù)設(shè)的數(shù)量。
本發(fā)明還提供了一種去除花指令的裝置,包括反匯編單元201,用于對緩沖區(qū)中的指令進(jìn)行反匯編,并保存反匯編得到的指令; 第一判斷單元202,用于判斷反匯編得到的指令是否是寫內(nèi)存指令; 存儲(chǔ)單元203,用于當(dāng)?shù)谝慌袛鄦卧?02判斷反匯編得到的指令是寫內(nèi)存指令時(shí),查 找并保存寫內(nèi)存指令寄存器;第二判斷單元204,用于在第一判斷單元202判斷反匯編得到的指令為非寫內(nèi)存指令 后,判斷反匯編得到的指令是否是循環(huán)跳轉(zhuǎn)指令,如果是,則存儲(chǔ)單元203查找并保存 控制循環(huán)體寄存器;第三判斷單元205,用于當(dāng)?shù)谝慌袛鄦卧?02判斷反匯編得到的指令是寫內(nèi)存指令 后,或者當(dāng)?shù)诙袛鄦卧?04判斷反匯編得到的指令是否是循環(huán)跳轉(zhuǎn)指令后,判斷是否 達(dá)到停止進(jìn)行反匯編的條件,如果沒有達(dá)到停止進(jìn)行反匯編的條件,則由反匯編單元對 緩沖區(qū)中的下一個(gè)指令進(jìn)行反匯編;查找單元206,用于在第三判斷單元205判斷達(dá)到停止進(jìn)行反匯編的條件后,對于存 儲(chǔ)單元保存的任意一個(gè)寄存器,在反匯編單元201進(jìn)行反匯編得到的所有指令中,逆向 查找與所述寄存器相關(guān)的指令,當(dāng)滿足停止查找條件時(shí),停止查找與所述寄存器相關(guān)的指令;比較單元207,用于當(dāng)查找單元206查找完所有寄存器的相關(guān)指令后,刪除反匯編得 到的所有指令中與寄存器的相關(guān)指令不同的指令。
所述的裝置中,第一判斷單元202具體用于判斷反匯編得到的指令中的目的操 作數(shù)是否為內(nèi)存地址,如果是,則確定為寫內(nèi)存指令,否則,為非寫內(nèi)存指令;或者,第一判斷單元202判斷反匯編得到的指令是否為隱式操作數(shù)指令,如果是, 則確定為寫內(nèi)存指令,否則,為非寫內(nèi)存指令。
所述的裝置中,如果第二判斷單元204判斷出循環(huán)跳轉(zhuǎn)指令為LOOP指令、 LOOPNE指令或LOOPZ指令,則存儲(chǔ)單元保存ECX寄存器;如果第二判斷單元204判斷出循環(huán)跳轉(zhuǎn)指令為jcc指令,則逆向查找第一個(gè)CMP指 令、SUB指令、TEST指令、OR指令或AND指令,則存儲(chǔ)單元保存CMP指令寄存器、 SUB指令寄存器、TEST指令寄存器、OR指令寄存器或AND指令寄存器;如果第二判斷單元204判斷出循環(huán)跳轉(zhuǎn)指令為jmp指令,則存儲(chǔ)單元203查找能夠調(diào) 出循環(huán)體的組合指令,并保存所述指令寄存器。
所述的裝置中,存儲(chǔ)單元203具體用于將寫內(nèi)存指令寄存器保存到寄存器鏈表 中;存儲(chǔ)單元203具體用于將控制循環(huán)體寄存器保存到寄存器鏈表中; 對于保存的任意一個(gè)寄存器具體為對于寄存器鏈表中的任意一個(gè)寄存器。
所述的裝置中,第三判斷單元205具體用于判斷反匯編得到的指令是否是循環(huán) 體結(jié)束指令;或者,第三判斷單元205具體用于判斷反匯編指令的數(shù)量是否達(dá)到預(yù)設(shè)的數(shù)量。
所述的裝置中,滿足停止查找的條件具體為查找到將數(shù)據(jù)從內(nèi)存讀取到CPU的 指令。
本發(fā)明提供了一種去除花指令的方法和裝置,通過對緩沖區(qū)中的指令進(jìn)行反匯 編,并保存所有反匯編得到的指令,保存所有的寫內(nèi)存指令及寫內(nèi)存指令寄存器,根據(jù) 寫內(nèi)存指令寄存器,逆向查找反匯編得到的所有指令,查找到所有與寫內(nèi)存指令寄存器 相關(guān)的指令,將反匯編得到的所有指令與寄存器相關(guān)指令進(jìn)行比較,刪除不同的指令, 刪除的指令即為花指令,刪除花指令不影響程序的正常運(yùn)行。
雖然通過實(shí)施例描繪了本發(fā)明,本領(lǐng)域普通技術(shù)人員知道,本發(fā)明有許多變形 和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā) 明的精神。
權(quán)利要求
1.一種去除花指令的方法,其特征在于,包括步驟a:對內(nèi)存緩沖區(qū)中的指令進(jìn)行反匯編,并保存反匯編得到的指令; 步驟b:判斷反匯編得到的指令是否是寫內(nèi)存指令,如果是,則查找并保存寫內(nèi)存 指令寄存器,轉(zhuǎn)步驟d,否則,轉(zhuǎn)步驟C;步驟c:判斷反匯編得到的指令是否是循環(huán)跳轉(zhuǎn)指令,如果是,則查找并保存控制循 環(huán)體寄存器,轉(zhuǎn)步驟d,否則,直接轉(zhuǎn)步驟d;步驟d:判斷是否達(dá)到停止進(jìn)行反匯編的條件,如果是,則轉(zhuǎn)步驟e,否則,轉(zhuǎn)步驟a ;步驟e:對于保存的任意一個(gè)寄存器,在反匯編得到的所有指令中逆向查找與所述寄 存器相關(guān)的指令,當(dāng)滿足停止查找的條件時(shí),停止查找與所述寄存器相關(guān)的指令;步驟f:當(dāng)查找完所有寄存器的相關(guān)指令后,刪除反匯編得到的所有指令中與寄存器 的相關(guān)指令不同的指令。
2.如權(quán)利要求1所述的方法,其特征在于,判斷反匯編得到的指令是否是寫內(nèi)存指令 包括判斷反編得到的指令中的目的操作數(shù)是否為內(nèi)存地址,如果是,則確定為寫內(nèi)存 指令,否則,為非寫內(nèi)存指令;或者,判斷反匯編得到的指令是否為隱式操作數(shù)指令,如果是,則確定為寫內(nèi)存指 令,否則,為非寫內(nèi)存指令。
3.如權(quán)利要求1所述的方法,其特征在于,如果反匯編得到的指令為循環(huán)跳轉(zhuǎn)指令, 則查找并保存控制循環(huán)體寄存器包括如果循環(huán)跳轉(zhuǎn)指令為LOOP指令、LOOPNE指令或LOOPZ指令,則保存ECX寄存器;如果循環(huán)跳轉(zhuǎn)指令為jcc指令,則逆向查找第一個(gè)CMP指令、SUB指令、TEST指 令、OR指令或AND指令,保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存 器、OR指令寄存器或AND指令寄存器;如果循環(huán)跳轉(zhuǎn)指令為jmp指令,則查找能夠調(diào)出循環(huán)體的組合指令,保存所述組合 指令寄存器。
4.如權(quán)利要求1所述的方法,其特征在于,保存寫內(nèi)存指令寄存器包括將寫內(nèi)存 指令寄存器保存到寄存器鏈表中;保存控制循環(huán)體寄存器包括將控制循環(huán)體寄存器保存到寄存器鏈表中; 對于保存的任意一個(gè)寄存器具體為對于寄存器鏈表中中的任意一個(gè)寄存器。
5.如權(quán)利要求1所述的方法,其特征在于,判斷是否達(dá)到停止進(jìn)行反匯編的條件具體為判斷反匯編得到的指令是否是循環(huán)體結(jié)束指令; 或者,判斷反匯編指令的數(shù)量是否達(dá)到預(yù)設(shè)的數(shù)量。
6.如權(quán)利要求1所述的方法,其特征在于,滿足停止查找的條件具體為查找到將數(shù)據(jù) 從內(nèi)存讀取到CPU的指令。
7.—種去除花指令的裝置,其特征在于,包括反匯編單元,用于對緩沖區(qū)中的指令進(jìn)行反匯編,并保存反匯編得到的指令;2第一判斷單元,用于判斷反匯編得到的指令是否是寫內(nèi)存指令;存儲(chǔ)單元,用于當(dāng)?shù)谝慌袛鄦卧袛喾磪R編得到的指令是寫內(nèi)存指令時(shí),查找并保 存寫內(nèi)存指令寄存器;第二判斷單元,用于在第一判斷單元判斷反匯編得到的指令為非寫內(nèi)存指令后,判 斷反匯編得到的指令是否是循環(huán)跳轉(zhuǎn)指令,如果是,則存儲(chǔ)單元查找并保存控制循環(huán)體 寄存器;第三判斷單元,用于當(dāng)?shù)谝慌袛鄦卧袛喾磪R編得到的指令是寫內(nèi)存指令后,或者 當(dāng)?shù)诙袛鄦卧袛喾磪R編得到的指令是否是循環(huán)跳轉(zhuǎn)指令后,判斷是否達(dá)到停止進(jìn)行 反匯編的條件,如果沒有達(dá)到停止進(jìn)行反匯編的條件,則由反匯編單元對緩沖區(qū)中的下 一個(gè)指令進(jìn)行反匯編;查找單元,用于在第三判斷單元判斷達(dá)到停止進(jìn)行反匯編的條件后,對于存儲(chǔ)單元 保存的任意一個(gè)寄存器,在反匯編單元進(jìn)行反匯編得到的所有指令中,逆向查找與所述 寄存器相關(guān)的指令,當(dāng)滿足停止查找條件時(shí),停止查找與所述寄存器相關(guān)的指令;比較單元,用于當(dāng)查找單元查找完所有寄存器的相關(guān)指令后,刪除反匯編得到的所 有指令中與寄存器相關(guān)指令不同的指令。
8.如權(quán)利要求7所述的裝置,其特征在于,第一判斷單元具體用于判斷反匯編得到的 指令中的目的操作數(shù)是否為內(nèi)存地址,如果是,則確定為寫內(nèi)存指令,否則,為非寫內(nèi) 存指令;或者,第一判斷單元具體用于判斷反匯編得到的指令是否為隱式操作數(shù)指令,如果 是,則確定為寫內(nèi)存指令,否則,為非寫內(nèi)存指令。
9.如權(quán)利要求7所述的裝置,其特征在于,如果第二判斷單元判斷出循環(huán)跳轉(zhuǎn)指令為 LOOP指令、LOOPNE指令或LOOPZ指令,則存儲(chǔ)單元保存ECX寄存器;如果第二判斷單元判斷出循環(huán)跳轉(zhuǎn)指令為jcc指令,則逆向查找第一個(gè)CMP指令、 SUB指令、TEST指令、OR指令或AND指令,則存儲(chǔ)單元保存CMP指令寄存器、SUB 指令寄存器、TEST指令寄存器、OR指令寄存器或AND指令寄存器;如果第二判斷單元判斷出循環(huán)跳轉(zhuǎn)指令為jmp指令,則存儲(chǔ)單元查找能夠調(diào)出循環(huán) 體的組合指令,并保存所述指令寄存器。
10.如權(quán)利要求7所述的裝置,其特征在于,存儲(chǔ)單元具體用于將寫內(nèi)存指令寄存器 保存到寄存器鏈表中;存儲(chǔ)單元具體用于將控制循環(huán)體寄存器保存到寄存器鏈表中;對于保存的任意一個(gè)寄存器具體為對于寄存器鏈表中的任意一個(gè)寄存器。
11.如權(quán)利要求7所述的裝置,其特征在于,第三判斷單元具體用于判斷反匯編得到 的指令是否是循環(huán)體結(jié)束指令;或者,第三判斷單元具體用于判斷反匯編指令的數(shù)量是否達(dá)到預(yù)設(shè)的數(shù)量。
12.如權(quán)利要求7所述的裝置,其特征在于,滿足停止查找的條件具體為查找到將數(shù) 據(jù)從內(nèi)存讀取到CPU的指令。
全文摘要
本發(fā)明提供了一種去除花指令的方法和裝置,通過對緩沖區(qū)中的指令進(jìn)行反匯編,并保存反匯編得到的指令,保存所有的寫內(nèi)存指令及寫內(nèi)存指令寄存器,根據(jù)寫內(nèi)存指令寄存器,逆向查找反匯編得到的指令,查找到所有與寫內(nèi)存指令寄存器相關(guān)的指令,將反匯編得到的所有指令與寄存器相關(guān)指令進(jìn)行比較,刪除不同的指令,即為花指令。通過本發(fā)明提供的方法,解決了虛擬執(zhí)行代碼速度慢,容易分析失控的問題。
文檔編號(hào)G06F9/30GK102023842SQ20101059115
公開日2011年4月20日 申請日期2010年12月16日 優(yōu)先權(quán)日2010年12月16日
發(fā)明者張栗偉, 李石磊, 童志明 申請人:北京安天電子設(shè)備有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
兴隆县| 定远县| 眉山市| 金湖县| 克拉玛依市| 白山市| 广饶县| 定陶县| 太仓市| 建平县| 南江县| 岗巴县| 邹城市| 德安县| 库尔勒市| 施甸县| 巢湖市| 安国市| 浦城县| 喀喇| 洛宁县| 盈江县| 麦盖提县| 乌拉特后旗| 四会市| 青龙| 旬阳县| 永修县| 洪泽县| 襄樊市| 丰宁| 横峰县| 巴南区| 体育| 永修县| 淮安市| 云龙县| 修武县| 新密市| 通州区| 资阳市|