国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種熱點模塊指令跟蹤的方法及系統(tǒng)的制作方法

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

      【發(fā)明內(nèi)容】

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