乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      OD粗跟蹤和Run跟蹤 (OD譯文)

       herowuking 2015-08-06

      本帖主要看 RUN跟蹤-有空可以再看看OD官方的英文文檔,這樣更好,以下為譯文。
      OD之父的設(shè)計(jì)思路其實(shí)也是 RUN跟蹤,(在單步走的時(shí)候條件成立之時(shí)就會(huì)記錄一行可疑的代碼)
      快捷鍵如下:
      Ctrl+T
      - 打開(kāi) 暫停 Run跟蹤 對(duì)話框

      Ctrl+F11
      -Run跟蹤步入,一條一條執(zhí)行命令,進(jìn)入每個(gè)子函數(shù)調(diào)用,并把寄存器的信息加入到Run跟蹤的存儲(chǔ)數(shù)據(jù)中。Run跟蹤不會(huì)同步更新CPU窗口。

      Ctrl+F12 - Run跟蹤
      -Run跟蹤步過(guò),一條一條執(zhí)行命令,但是不進(jìn)入子函數(shù)調(diào)用,,并把寄存器的信息加入到Run跟蹤的存儲(chǔ)數(shù)據(jù)中。Run跟蹤不會(huì)同步更新CPU窗口。



      一、單步進(jìn)入(F7)遇見(jiàn)CALL就進(jìn)!進(jìn)入該子程!行話:"跟進(jìn)去"

            單步跳過(guò)(F8)遇見(jiàn)CALL不進(jìn)去!不去管子程的內(nèi)部!第一次粗跟的時(shí)候常用!

            執(zhí)行到返回(ALT+F9)就是執(zhí)行到該子程的返回語(yǔ)句!



            您可以通過(guò)按 F7(單步步入)或 F8(單步步過(guò)),對(duì)程序進(jìn)行單步調(diào)試。這兩個(gè)單步執(zhí)行操作的主要區(qū)別在于:如果當(dāng)前的命令是一個(gè)子函數(shù),按F7,將會(huì)進(jìn)入子函數(shù),并停在子函數(shù)的第一條命令上;而按 F8,將會(huì)一次運(yùn)行完這個(gè)子函數(shù)。如果您單步步過(guò)的子函數(shù)中含有斷點(diǎn)或其他調(diào)試事件,執(zhí)行將會(huì)被暫停,但 OllyDbg 會(huì)在子函數(shù)的后一條命令上,自動(dòng)下一個(gè)斷點(diǎn),而這個(gè)斷點(diǎn)您遲早會(huì)碰到。


            如果被調(diào)試程序停在異常上,您可以跳過(guò)它,并轉(zhuǎn)到被調(diào)試程序建立的句柄處。只需簡(jiǎn)單的 Shift 鍵和任何一個(gè)單步命令。


             如果需要連續(xù)按F7、F8鍵上百次,您可以使用自動(dòng)執(zhí)行(Ctrl+F7或者Ctrl+F8)功能。在這種情況下,OllyDbg 將自動(dòng)重復(fù)F7或者F8操作,并且實(shí)時(shí)更新所有的窗口。這個(gè)過(guò)程會(huì)在下面情況停止:

             - 按 Esc 鍵或發(fā)出任何單步命令


             - OllyDbg 遇到斷點(diǎn)


             - 被調(diào)試程序發(fā)生異常

             另外 使用“+”和“-”按鍵,可以回朔以前的執(zhí)行歷史  (這個(gè)也夠?qū)嵱玫?,?jīng)常用)

             注意:當(dāng)執(zhí)行停止時(shí) OllyDbg 將會(huì)刷新大部分窗口。如果動(dòng)態(tài)執(zhí)行過(guò)程非常慢,可以嘗試關(guān)掉或最小化沒(méi)有用的窗口。


             另外,更快捷的找到以前執(zhí)行指令的辦法是Run跟蹤[run trace]。它將創(chuàng)建一個(gè)執(zhí)行協(xié)議并告知您指定指令的執(zhí)行時(shí)間和次數(shù)

      二、Run 跟蹤[Run trace]

      Run 跟蹤是一種反方向跟蹤程序執(zhí)行的方式,可以了解以前發(fā)生的事件。您還可以使用Run跟蹤來(lái)了解運(yùn)行的簡(jiǎn)單統(tǒng)計(jì)?;旧希?font color="Green">OllyDbg 是一步一步地執(zhí)行被調(diào)試程序的,就像動(dòng)畫(huà)演示一樣,但不會(huì)實(shí)時(shí)刷新窗口,最重要的是它能將地址、寄存器的內(nèi)容、消息以及已知的操作數(shù)記錄到Run跟蹤緩沖區(qū)中。如果被調(diào)試的代碼是自修改的,您就能夠保存原始的命令??梢酝ㄟ^(guò)按Ctrl+F11(Run跟蹤步入,進(jìn)入子函數(shù))或者 Ctrl+F12(Run跟蹤步過(guò),一次執(zhí)行完子函數(shù))開(kāi)始Run跟蹤,并用F12或者Esc鍵停止跟蹤。

      您可以指定在Run跟蹤時(shí)執(zhí)行每一步的條件集(快捷鍵:Ctrl+T)。如果條件符合,Run跟蹤將暫停。條件包括:

      當(dāng)EIP在某個(gè)地址范圍內(nèi)時(shí)暫停[Pause when EIP is in the address range];

      當(dāng)EIP在某個(gè)地址范圍之外時(shí)暫停[Pause when EIP is outside the address range];

      當(dāng)某個(gè)條件為真時(shí)暫停[Pause when some condition is true];

      當(dāng)下一條指令可疑時(shí)暫停[Pause when next command is suspicious],比如:可能為非法指令(根據(jù)在分析3[Analysis 3]中設(shè)定的規(guī)則而定),訪問(wèn)不存在的內(nèi)存,設(shè)置了單步陷阱標(biāo)志[single-step trap flag]或者越ESP界訪問(wèn)棧。注意這個(gè)選項(xiàng)會(huì)明顯地(大約20%)減慢Run跟蹤的速度;


      當(dāng)命令執(zhí)行達(dá)到指定的次數(shù)(更確切的說(shuō),是添加到Run跟蹤的緩沖區(qū)里面的命令數(shù)量)時(shí)暫停[Pause after specified number of commands is traced]。注意計(jì)數(shù)器不能自動(dòng)歸零。也就是說(shuō),如果您設(shè)置指令次數(shù)為10,則在第10次執(zhí)行到該命令時(shí)暫停,并不是該命令每執(zhí)行10次就暫停一次。


      當(dāng)下一條命令符合指定的樣式之一時(shí)暫停[Pause when next command matches one of the specified patterns]。您可以使用模糊命令和操作數(shù)[imprecise commands and operands]及匹配32位寄存器RA和RB,像R32一樣,這兩個(gè)寄存器可以替代任何通用32位寄存器,但是在同一條命令中其值是不能變的。而 RA 和 RB

      在同一條命令中,則一定是不同的。例如,在程序中含有 XOR EAX,EAX; XOR ESI,EDX 兩條命令,兩條命令均符合樣式 XOR R32,R32;第一條命令符合樣式XOR RA,RA

      ;而等二條命令 XOR ESI,EDX 符合樣式XOR RA,RB。


      毫無(wú)疑問(wèn),Run跟蹤需要足夠的內(nèi)存,每條命令平均需要占用16到35字節(jié),同時(shí)速度也非常慢。在500-MHZ處理器、Windows NT環(huán)境下,它每秒能跟蹤5000條指令。

      Windows95 更慢:每秒鐘僅2200條指令。但是在許多情況下,例如當(dāng)一個(gè)程序跳轉(zhuǎn)到不存在的地址的時(shí)候,這是找到原因的唯一方法。您可以在Run跟蹤時(shí)將準(zhǔn)線性命令序列(即序列尾部只有唯一出口)跳過(guò)。當(dāng)OllyDbg遇到這些需跳過(guò)的命令序列時(shí),會(huì)設(shè)置一個(gè)臨時(shí)斷點(diǎn),然后跟進(jìn)到序列中,并一次運(yùn)行完。當(dāng)然了,如果排除命令中返回或跳轉(zhuǎn)的地址在跟蹤范圍之外,將可能導(dǎo)致跟蹤發(fā)生錯(cuò)誤;因此OllyDbg會(huì)檢查您想跳過(guò)的代碼塊,如果存在上述情況,會(huì)向您詢問(wèn)。


      在大多數(shù)情況下,您對(duì)跟蹤系統(tǒng)API代碼不感興趣。跟蹤選項(xiàng)總是跟過(guò)系統(tǒng)DLL[Always trace over system DLLs]允許您在跟蹤/自動(dòng)模式下跟過(guò)API函數(shù)。如果模塊在系統(tǒng)目錄下,OllyDbg就假設(shè)該模塊是系統(tǒng)的。您可以在模塊[Modules]窗口中標(biāo)記任意DLL是系統(tǒng)的或者非系統(tǒng)的。


      為了使執(zhí)行速度更快,您可以通過(guò)設(shè)置Run跟蹤斷點(diǎn),先將Run跟蹤限制在選定的命令或代碼塊上,然后再運(yùn)行程序。我把這種做法稱作“強(qiáng)迫Run跟蹤”。一般來(lái)說(shuō),刪除Run跟蹤斷點(diǎn)不會(huì)移除Hit跟蹤斷點(diǎn)。但如果您刪除了hit跟蹤斷點(diǎn),同時(shí)您也移除了Run跟蹤斷點(diǎn)。


      跟蹤命令會(huì)保存到跟蹤緩沖區(qū)中,這個(gè)緩沖區(qū)在跟蹤開(kāi)始時(shí)自動(dòng)創(chuàng)建。您可以在選項(xiàng)中指定它的大小(最高64MB)。這個(gè)緩沖區(qū)是循環(huán)隊(duì)列,當(dāng)滿了的時(shí)候,會(huì)丟棄老的記錄。


      您可以通過(guò)從OllyDbg主菜單中選擇“調(diào)試[Debug]|打開(kāi)或者清除Run跟蹤[Open or clear run trace]”,來(lái)打開(kāi)或者清除Run跟蹤緩沖區(qū)。在Run跟蹤緩沖區(qū)打開(kāi)后,

      OllyDbg 會(huì)記錄在執(zhí)行過(guò)程中的所有暫停,甚至那些不是由Run跟蹤引起的暫停。例如,您可以通過(guò)按 F7 或者 F8 單步執(zhí)行程序,然后通過(guò)使用+鍵和-鍵來(lái)反方向跟蹤程序的執(zhí)行。注意:如果Run跟蹤緩沖區(qū)已經(jīng)關(guān)閉,則用這些鍵瀏覽的是歷史[history]記錄。在您查看Run跟蹤記錄時(shí),寄存器和信息面板會(huì)變灰,來(lái)強(qiáng)調(diào)它們所顯示的寄存器并不是實(shí)際的寄存器。跟蹤緩沖區(qū)并不保存棧頂或由寄存器所指向的內(nèi)容。寄存器、信息和棧在Run跟蹤的時(shí)候使用實(shí)際的內(nèi)存狀態(tài)來(lái)解釋寄存器的變化。


      OllyDbg能夠記下每個(gè)指令在Run跟蹤緩沖區(qū)里面出現(xiàn)的次數(shù)。在反匯編窗口快捷菜單中,選擇是“查看[View]|統(tǒng)計(jì)作為注釋[Profile as comments]”。這個(gè)命令使用統(tǒng)計(jì)取代了注釋欄。或者,如果列標(biāo)題欄可見(jiàn),則可以單擊它幾次直到它顯示統(tǒng)計(jì)信息。注意顯示出來(lái)的數(shù)字是動(dòng)態(tài)的,而且不計(jì)算已經(jīng)從跟蹤緩沖區(qū)中丟棄的指令。您還可以在單獨(dú)的統(tǒng)計(jì)窗口[Profile window]中,按觸發(fā)次數(shù)排序,來(lái)查看整個(gè)模塊的統(tǒng)計(jì)數(shù)據(jù)。


      在反匯編窗口的快捷菜單中選擇“Run跟蹤[Run trace]|添加到所有函數(shù)入口處[Add entries of all procedures]”,這樣能夠檢查每個(gè)可識(shí)別的函數(shù)被調(diào)用的次數(shù)。另一個(gè)命令“Run跟蹤[Run trace]|添加到函數(shù)中所有的分支[Add branches in procedure]”會(huì)強(qiáng)行跟蹤此函數(shù)中所有識(shí)別的跳轉(zhuǎn)目的地址的內(nèi)容。在這種情況下,統(tǒng)計(jì)功能能夠找到最頻繁執(zhí)行的分支,您可以優(yōu)化這部分的代碼,以提高速度。


      在反匯編窗口中的某條命令上使用快捷菜單中選擇“搜索[Search for]|Run跟蹤的最新記錄[Last record in run trace]”用于查找該命令是否被執(zhí)行過(guò),如果執(zhí)行過(guò),最后一次執(zhí)行在哪里。



      Run 跟蹤窗口顯示跟蹤緩沖區(qū)的內(nèi)容。對(duì)每個(gè)指令來(lái)說(shuō)包括被指令改變的整數(shù)寄存器的內(nèi)容(更準(zhǔn)確的說(shuō)是給定的記錄變成下一條記錄的變化)。如果您雙擊某條指令,窗口會(huì)選擇在跟蹤緩沖區(qū)里全部含有該命令的記錄,而且您可以通過(guò)按+和-鍵來(lái)快速的瀏覽;如果您在調(diào)試選項(xiàng)[Debugging options]中設(shè)置了 “跟蹤[Trace]|同步CPU和

      Run跟蹤[Synchronize CPU and Run trace]”,雙擊記錄則會(huì)跟進(jìn)到對(duì)應(yīng)的反匯編窗口中位置。


      注意:當(dāng)您退出Hit跟蹤時(shí),您同時(shí)也強(qiáng)行退出了Run跟蹤。


      以下是Run 跟蹤實(shí)例:

        Run trace可以把被調(diào)試程序執(zhí)行過(guò)的指令保存下來(lái),了解以前發(fā)生的事件,它能把地址、寄存器的內(nèi)容、消息等記錄到Run trace緩沖區(qū)中,在運(yùn)行Run trace前,要把緩沖區(qū)設(shè)置大些,否則執(zhí)行的指令太多造成緩沖區(qū)溢出:

      如果要把Run trace的數(shù)據(jù)保存到文件,在跟蹤之前,打開(kāi)Run trace窗口,鼠標(biāo)右擊執(zhí)行Log to file即會(huì)彈出個(gè)文件保存框
      需要運(yùn)行Run trace,單擊菜單Debug/Open or clear run trace,在打開(kāi)Run trace緩沖區(qū)后,OD會(huì)記錄
      在反匯編窗口顯示的是被調(diào)試程序領(lǐng)空,在反匯編窗口的快捷菜單中選擇Run trace/Add entries of all procedures(Run trace/添加所有函數(shù)過(guò)程的入口),這樣能夠檢查每個(gè)可識(shí)別的函數(shù)被調(diào)用的次數(shù),之后,可以在Run trace窗口鼠標(biāo)右擊執(zhí)行profile module(統(tǒng)計(jì)模塊)查看統(tǒng)計(jì)次數(shù)


      Hit trace能夠讓調(diào)試者辯別哪一部分代碼執(zhí)行了,哪一部分沒(méi)有,OD的實(shí)現(xiàn)方法相當(dāng)簡(jiǎn)單,它將選中區(qū)域的每一條命令處均設(shè)置一個(gè)INT3斷點(diǎn),當(dāng)中斷發(fā)生的時(shí)候,OD就把它去掉,在使用Hit trace的時(shí)候,不能在數(shù)據(jù)中設(shè)置斷點(diǎn),否則程序可能會(huì)崩潰
      當(dāng)遇到一段跳轉(zhuǎn)分支較多的代碼時(shí),需要了解程序執(zhí)行線程,可以用Hit trace,方法是選中這段代碼,單擊右鍵執(zhí)行Hit trace/Add selection,OD會(huì)在已被執(zhí)行過(guò)的指令前用另一種顏色標(biāo)記出來(lái)

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多