[發明專利]一種結合全量型檢查點與增量型重做的目標程序逆向執行實現方法在審
| 申請號: | 201710157188.4 | 申請日: | 2017-03-16 |
| 公開(公告)號: | CN107102940A | 公開(公告)日: | 2017-08-29 |
| 發明(設計)人: | 盧建鵬 | 申請(專利權)人: | 浙江大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 杭州求是專利事務所有限公司33200 | 代理人: | 邱啟旺 |
| 地址: | 310058 浙江*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 結合 全量型 檢查點 增量 重做 目標 程序 逆向 執行 實現 方法 | ||
技術領域
本發明涉及程序逆向執行,尤其涉及一種結合全量型檢查點與增量型重做的目標程序逆向執行實現方法。
背景技術
傳統的軟件調試方法已經逐漸不能滿足用戶的需求了,基于模擬器的負載程序逆向執行、調試越來越得到工程師與研究人員的關注。負載逆向執行功能能夠幫助開發者調試程序,當開發者需要讓程序回退時,不必從頭開始執行,而是可以讓程序從當前位置進行回退,從而減少了程序調試的時間。
傳統的軟件逆向執行方法,通常是通過保存全量型檢查點的方法來保存系統狀態,然后通過恢復到保存時間較早的檢查點將系統恢復到時間較早的狀態,以達到程序回退的功能。但是由于一個全量型檢查點需要占用較大的磁盤空間,導致對全量型檢查點的個數有限,所以這種軟件回退的方法是一種粗粒度的回退。當對軟件回退的精度要求很高時,比如逆向單步,那么這種方法顯然就滿足不了要求。為了應對這種場景,一種可行的方法是采取逆操作的方法,然而這種方法在代碼上不易實現、維護困難,給工程帶來了具大的挑戰。
發明內容
本發明的目的是克服現有技術的不足,提供一種新的負載逆向執行功能的實現。
本發明的目的是通過以下技術方案來實現的:一種結合全量型檢查點與增量型重做的目標程序逆向執行功能實現方法,具體包括如下步驟:
(1)加載目標程序到模擬器。
(2)生成第一個全量型檢查點,全量型檢查點記錄的內容包括CPU狀態、內存狀態和系統時鐘,將第一個全量型檢查點記錄的內容作為模擬器的初始狀態。
(3)開始執行目標程序,每次向前迭代一個時鐘,且每隔一定的系統時鐘數生成一個全量型檢查點,保存相應時刻的全量型檢查點,將這些全量型檢查點作為模擬器的對應時刻的狀態。
(4)在執行過程中,遇到斷點時目標程序暫停執行,用戶可選擇逆向單步執行,首先,下一次目標程序暫停時的時鐘數為當前時鐘數減一,其次,模擬器恢復到最近的一個已保存狀態,即從最近生成的一個全量型檢查點中,恢復CPU狀態、內存狀態和系統時鐘;然后,模擬器從恢復的狀態開始繼續正向執行程序,并且判斷當前的系統時鐘數是否與下一次目標程序暫停的時鐘數一致,若一致則表示逆向單步執行完畢,否則目標程序繼續正向執行。
本發明的有益效果是,在正確實現功能的基礎上,使得檢查點記錄的量與系統恢復速度之間有一個較好的平衡,即在時間效率與空間效率上取得一個較好的平衡:
(1)定期保存全量型檢查點,可使模擬器迅速恢復到某個時刻的狀態。在正向執行的過程中,模擬器每隔一定的時鐘數就記錄一個全量型檢查點,保存整個系統的狀態,并將這些檢查點持久化到磁盤中,可供未來恢復系統狀時使用。兩個檢查點之間間隔的時鐘數越少,則整個系統記錄的檢查點個數就越多,在恢復系統狀態時,可供選擇的系統狀態就越多,但占用的磁盤空間也越大。所以,兩次檢查點之間間隔的時鐘數需要根據具體的系統,在實踐中獲得。檢查點保存的內容也需根據具體的系統來確定,但一些必不可少的要素有:內存的狀態,CPU的態,全局變量的狀態等。其中內存不必保存整個內存空間的狀態,只需要保存被使用過的內存頁即可,CPU的狀主要包括一些通過寄存器和控制、狀態寄存器等。全局變量主要包括虛擬化系統在實現時用到的一些全局變量,比如延遲槽的狀態,日志文件的當前讀寫位置等。
(2)通過增量型重做,可使模擬器迅速恢復到兩個檢查點之間任何一個時刻的狀態。全量型的檢查點只能讓模擬器恢復到某個時鐘的狀態,比如第0個時鐘的狀態,第N個時鐘的狀態,第N*2個時鐘的狀態,第N*3個時鐘的狀態等等,并不能讓我們隨意恢復到任意一個時鐘比如第N+9個時鐘時的狀態。通過增量型的重做技術,就可以讓模擬器的狀態恢復到兩個檢查點之間的任意一個時鐘的狀態。比如系統處在第N個時鐘,要恢復到第N+9個時鐘的狀,只需要重新執行一次N+1、N+2、N+2、N+4、N+5、N+6、N+7、N+8個時鐘時指令即可。
(3)結合全量型檢查點與增量型重做,可使模擬器迅速恢復到之前任何一個時鐘的狀態,從而達到軟件逆向執行的功能。無論當前模擬器處于任何一個時鐘,都可以迅速恢復到這之前的任何一個時鐘的狀,其方法是:選擇要恢復到的那個時鐘之前的一個離它最近的全量型檢查點,恢復該檢查點的系統狀態,然后從該點開始正向執行,直到系統時鐘數與我們要恢復的時鐘數相等為止。
附圖說明
圖1表示了逆向單步的方法流程圖;
圖2是整個模擬器中全量型檢查點示意圖;
圖3是兩個相鄰的全量型檢查點示意圖;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浙江大學,未經浙江大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710157188.4/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:測試腳本的更新方法及裝置
- 下一篇:一種測試用例的生成方法及裝置





