<listing id="vjp15"></listing><menuitem id="vjp15"></menuitem><var id="vjp15"></var><cite id="vjp15"></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><menuitem id="vjp15"></menuitem></video></cite>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<var id="vjp15"><strike id="vjp15"><listing id="vjp15"></listing></strike></var>
<menuitem id="vjp15"><strike id="vjp15"></strike></menuitem>
<cite id="vjp15"></cite>
<var id="vjp15"><strike id="vjp15"></strike></var>
<var id="vjp15"></var>
<var id="vjp15"></var>
<var id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></var>
<menuitem id="vjp15"></menuitem><cite id="vjp15"><video id="vjp15"></video></cite>
<var id="vjp15"></var><cite id="vjp15"><video id="vjp15"><thead id="vjp15"></thead></video></cite>
<var id="vjp15"></var>
<var id="vjp15"></var>
<menuitem id="vjp15"><span id="vjp15"><thead id="vjp15"></thead></span></menuitem>
<cite id="vjp15"><video id="vjp15"></video></cite>
<menuitem id="vjp15"></menuitem>

一種熱點模塊指令跟蹤的方法及系統的制作方法

文檔序號:9950196閱讀:974來源:國知局
一種熱點模塊指令跟蹤的方法及系統的制作方法
【技術領域】
[0001] 本發明涉及一種熱點模塊指令跟蹤的方法及系統,屬于軟件分析技術領域。
【背景技術】
[0002] 調試器是自從計算機誕生時就存在的,期初的調試器都是基于硬件直接實現的, 調試器的工作原理是基于中央處理器的異常機制,并由操作系統的異常分發\事件分發的 子系統(或模塊)負責將其封裝處理后,以比較友好的方式與調試器進行實時交互,調試是 軟件維護與錯誤修正的一個最重要、最直接,也是必不可少的一種機制。
[0003] 調試器最基本的功能包括控制軟件運行,查看軟件運行中信息,修改軟件執行流 程。控制軟件運行就是指,將一個飛速運行的程序中斷下來,并且使其按照用戶的意愿執 行,調試器是靠迫使目標程序觸發一個精心構造的異常來完成這些工作的;查看軟件運行 中信息,這些信息包含但不限于當前線程的寄存器信息,堆棧信息,內存信息,當前EIP(EIP 寄存器,用來存儲CPU要讀取指令的地址,CPU通過EIP寄存器讀取即將要執行的指令。每次 CPU執行完相應的匯編指令之后,EIP寄存器的值就會增加。)附近的反匯編信息等;修改軟 件執行流程包括修改內存信息、反匯編信息、堆棧信息、寄存器信息等。
[0004] 普通的調試器無法對指定的內存頁進行全指令追蹤,單步跟蹤可以較好的跟蹤線 程指令,但仍然無法處理系統回調觸發的指令執行,單步跟蹤的性能開銷同時也是非常大; 斷點跟蹤可以較好的解決性能開銷,但是斷點的設置開銷非常大,并且同樣無法處理系統 回調觸發的指令執行,因此斷點跟蹤往往只用有限數量指令的跟蹤。

【發明內容】

[0005] 針對上述現有技術問題,本發明的目的在于提供一種針對熱點模塊進行指令追蹤 的方法,該方法能夠動態的分析進程所訪問的內存頁,對被調試進程進行有效追蹤查看,并 有效檢測惡意代碼對內存頁的訪問,同時在指令跟蹤的完備性和性能開銷上都有良好的表 現,被指定的熱點模塊可以是用戶自己指定的文件所在的內存頁。
[0006] 為了達到上述目的,本發明采用如下技術方案:
[0007] -種熱點模塊指令跟蹤的方法,首先標志熱點模塊,即用戶感興趣的頁;當線程訪 問到用戶感興趣的頁,那么將觸發PAGE_GUARD (PAGE_GUARD標志指定了一個防護頁(guar d page),即當一個頁被提交時會因第一次被訪問而產生一個one-shot異常,接著取得指定的 訪問權限。)異常,從而觸發調試器進行處理;然后通過調試器設置所有線程為單步調試,并 把該頁的頁號加入恢復鏈表,因為已經觸發PAGE_GUARD異常的頁會自動丟失PAGE_GUARD屬 性,從而確保多線程環境和內核回調環境下指令跟蹤的完備性;最后在當前執行線程中分 析執行指令的所在地址是否位于感興趣的頁,如果是,則繼續單步調試,否則,那么就對該 線程不進行操作,并根據之前使用的鏈表重新設置感興趣的頁面的PAGE_GUARD屬性。
[0008] -種熱點模塊指令跟蹤的系統,包括以下模塊:
[0009]調試循環模塊:一個進程成為被調試進程之后,在完成了某些操作或者發生異常 時,它會發送通知給調試器,然后將自身掛起,直到調試器命令它繼續執行;
[0010] 異常處理模塊:通過異常的分發,對不同的異常事件進行處理,異常處理分離了接 收和處理錯誤代碼,是編程語言或計算機硬件里的一種機制,用于處理軟件或信息系統中 出現的異常狀況(即超出程序正常執行流程的某些特殊條件);
[0011] 讀取寄存器和內存模塊:線程都有一個上下文環境,它包含了有關線程的大部分 信息,例如線程棧的地址,線程當前正在執行的指令地址等。上下文環境保存在寄存器中, 系統進行線程調度的時候會發生上下文切換,實際上就是將一個線程的上下文環境保存到 內存中,然后將另一個線程的上下文環境裝入寄存器;
[0012] 斷點功能模塊:在進行調試的時候,只有被調試進程暫停執行時調試器才可以對 它執行操作,例如觀察內存內容等。如果被調試進程不停下來的話,調試器是什么也做不了 的。要使被調試進程停下來,除了幾個在特定時刻才發生的調試事件外,唯一的途徑就是引 發異常,斷點就是達到以上目的的異常;
[0013] 單步執行模塊:單步執行是最常見的調試手段之一,即每次執行一行代碼,它也包 括逐語句、逐過程、跳出三種命令;
[0014] 通過使用CreateProcess(WIN32API函數CreateProcess用來創建一個新的進程和 它的主線程,這個新進程運行指定的可執行文件。)這個Windows API函數來啟動被調試程 序,通過調試循環模塊,調試程序循環等待被調試程序觸發異常事件;所述異常處理模塊對 異常事件進行分發處理;通過讀取寄存器和內存這一模塊,得到被調試進程訪問頁的位置 信息,判斷是否訪問到感興趣的內存頁,如果訪問的是熱點模塊,則觸發PAGE_GUARD異常; 通過異常處理模塊處理PAGE_GUARD異常,被調試進程的所有線程被設置為單步調試,一條 一條的執行指令;而斷點功能模塊可以在主程序進行調試時更靈活的操作。
[0015]本發明在于使用了 PAGE_GUARD屬性來標識熱點模塊和有限單步調試來跟蹤模塊 指令執行,從而實現了熱點模塊指令跟蹤的完備性,避免了單純斷點跟蹤的非完備性問題 和復雜性問題,也避免了單純指令跟蹤的效率低下問題。
[0016]本發明同現有技術相比,其有益效果表現在:
[0017] -、使用PAGE_GUARD屬性實時監控內存頁,針對性強,確保了 了每條進入感興趣頁 面的線程指令都能被探測到;
[0018] 二、當觸發PAGE_GUARD異常以后將對被調試進程的線程進行單步調試,所有線程 將進行臨時的單步運行,確保了多線程環境下指令跟蹤的完備性;
[0019] 三、對熱點模塊百分之百跟蹤,對非熱點模塊幾乎不跟蹤,性能開銷低,可用于大 型程序的分析。
【附圖說明】
[0020] 當結合附圖考慮時,通過參照下面的詳細描述,能夠更完整更好地理解本發明以 及容易得知其中許多伴隨的優點,但此處所說明的附圖用來提供對本發明的進一步理解, 構成本發明的一部分,本發明的示意性實施例及其說明用于解釋本發明,并不構成對本發 明的不當限定,如圖其中:
[0021 ]圖1是本發明的總體架構圖;
[0022]圖2為本發明實施單步調試的用例圖;
[0023]圖3是本發明的程序流程圖;
[0024]圖4為本發明模塊連接框圖。
【具體實施方式】
[0025]下面將結合附圖及【具體實施方式】對本發明作進一步的描述。
[0026] 實施例1:
[0027] -種熱點模塊指令跟蹤的方法,包括以下步驟:
[0028] 調試循環步驟:一個進程成為被調試進程之后,在完成了某些操作或者發生異常 時,它會發送通知給調試器,然后將自身掛起,直到調試器命令它繼續執行;
[0029]異常處理步驟:通過異常的分發,對不同的異常事件進行處理,異常處理分離了接 收和處理錯誤代碼,是編程語言或計算機硬件里的一種機制,用于處理軟件或信息系統中 出現的異常狀況(即超出程序正常執行流程的某些特殊條件);
[0030] 讀取寄存器和內存步驟:線程都有一個上下文環境,它包含了有關線程的大部分 信息,例如線程棧的地址,線程當前正在執行的指令地址等。上下文環境保存在寄存器中, 系統進行線程調度的時候會發生上下文切換,實際上就是將一個線程的上下文環境保存到 內存中,然后將另一個線程的上下文環境裝入寄存器;
[0031] 斷點功能步驟:在進行調試的時候,只有被調試進程暫停執行時調試器才可以對 它執行操作,例如觀察內存內容等。如果被調試進程不停下來的話,調試器是什么也做不了 的。要使被調試進程停下來,除了幾個在特定時刻才發生的調試事件外,唯一的途徑就是引 發異常,斷點就是達到以上目的的異常;
[0032] 單步執行步驟:單步執行是最常見的調試手段之一,即每次執行一行代碼,它也包 括逐語句、逐過程、跳出三種命令;
[0033] 通過使用CreateProcess這個Windows API函數來啟動被調試程序,通過調試循環 模塊,調試程序循環等待被調試程序觸發異常事件;所述異常處理模塊對異常事件進行分 發處理;通過讀取寄存器和內存這一模塊,得到被調試進程訪問頁的位置信息,判斷是否訪 問到感興趣的內存頁,如果訪問的是熱點模塊,則觸發PAGE_GUARD異常;通過異常處理模塊 處理PAGE_GUARD異常,被調試進程的所有線程被設置為單步調試,一條一條的執行指令;而 斷點功能模塊可以在主程序進行調試時更靈活的操作。
[0034] 實施例2:
[0035] 一種針對熱點模塊進行指令追蹤方法,在進行單步調試后熱點模塊的PAGE_GUARD 屬性將丟失,并將丟失PAGE_GUARD屬性的頁號加到一個鏈表中,當單步調試的線程被判定 未訪問熱點模塊,將根據該鏈表重新把熱點模塊的PAGE_GUARD屬性加上,并以非單步方式 直接執行這個線程;該方法主要包括以下步驟:
[0036] S1:標識感興趣的頁:針對熱點模塊所在代碼頁設置為PAGE_GUARD屬性,標識這些 頁的PAGE_GUARD屬性;
[0037] S2:進程訪問內存頁:被調試進程在運行時訪問內存頁,因為感興趣的頁已經被設 置PAGE_GUARD屬性,一旦線程訪問到標識為感興趣的內存頁,異常就會被觸發,主程序就將 對被調試進程進行掛起處理,如果訪問的頁不在熱點模塊所在代碼頁內,那么將不對線程 進行操作;
[0038] S3:處理PAGE_GUARD異常:當觸發PAGE_GUARD異常之后,被調試進程被掛起,等待 調試進程進行處理后將其喚起,調試進程設置被調試進程的所有線程為單步調試,并把該 頁寫入一個鏈表中,該頁的PAGE_GUARD屬性丟失;
[0039] S4:線程單步調試:一步一步跟蹤程序執行的流程,再次判斷線程是否訪問熱點模 塊所在代碼頁,如果不訪問感興趣的頁,則不對該線程進行操作,此時根據S3中創建的鏈表 重設頁的PAGE_GUARD屬性;如果訪問感興趣的頁,則設置所有線程單步調試;
[0040] S5:重設PAGE_GUARD屬性:由于PAGE_GUARD屬性在進行單步調試的時候就將丟失, 為了保證感興趣的頁面被實時監測,如果單步調試的線程未訪問感興趣的頁,就根據S2設 置的鏈表重新設置頁的PAGE_GUARD屬性,當然如果訪問的是感興趣的頁,就繼續線程單步 調試。
[0041 ] 實施例3:
[0042] 針對微軟公司的Windows7系統
[0043] 將開發的基于熱點模塊追蹤的調試器在Wind〇ws7系統下進行調試。使用visual stdio2013對項目進行
當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
韩国伦理电影