亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lion-tut-c28.htm

?? 內(nèi)有一些代碼
?? HTM
?? 第 1 頁 / 共 2 頁
字號(hào):
      &nbsp;&nbsp;&nbsp;&lt;調(diào)試事件處理&gt;<br>
      &nbsp;&nbsp;&nbsp;invoke ContinueDebugEvent, DebugEvent.dwProcessId, DebugEvent.dwThreadId, 
      DBG_EXCEPTION_NOT_HANDLED <br>
      .endw </b><br>
    </p>
    <p>就是說,當(dāng)開始調(diào)試程序時(shí),我們的程序不能和debuggee分開直到它結(jié)束.</p>
  </li>
</ol>
<p>我們?cè)賮砜偨Y(jié)一下這些步驟:</p>
<ol>
  <li><b>創(chuàng)建一個(gè)進(jìn)程或捆綁我們的程序到運(yùn)行中的進(jìn)程上</b>.</li>
  <li><b>等待調(diào)試事件</b></li>
  <li><b>響應(yīng)調(diào)試事件</b>.</li>
  <li><b>繼續(xù)執(zhí)行debuggee</b>.</li>
  <li><b>繼續(xù)這一無盡循環(huán)直到debuggee進(jìn)程結(jié)束</b></li>
</ol>
<h3>例子:</h3>
<p>這個(gè)例子調(diào)試一個(gè)win32程序并顯示諸如進(jìn)程句柄,進(jìn)程Id,映象基址等.</p>
<p>.386 <br>
  .model flat,stdcall <br>
  option casemap:none <br>
  include \masm32\include\windows.inc <br>
  include \masm32\include\kernel32.inc <br>
  include \masm32\include\comdlg32.inc <br>
  include \masm32\include\user32.inc <br>
  includelib \masm32\lib\kernel32.lib <br>
  includelib \masm32\lib\comdlg32.lib <br>
  includelib \masm32\lib\user32.lib <br>
  .data <br>
  AppName db "Win32 Debug Example no.1",0 <br>
  ofn OPENFILENAME <> <br>
  FilterString db "Executable Files",0,"*.exe",0 <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db 
  "All Files",0,"*.*",0,0 <br>
  ExitProc db "The debuggee exits",0 <br>
  NewThread db "A new thread is created",0 <br>
  EndThread db "A thread is destroyed",0 <br>
  ProcessInfo db "File Handle: %lx ",0dh,0Ah <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db "Process 
  Handle: %lx",0Dh,0Ah <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db "Thread 
  Handle: %lx",0Dh,0Ah <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db "Image 
  Base: %lx",0Dh,0Ah <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db "Start 
  Address: %lx",0 <br>
  .data? <br>
  buffer db 512 dup(?) <br>
  startinfo STARTUPINFO <> <br>
  pi PROCESS_INFORMATION <> <br>
  DBEvent DEBUG_EVENT <> <br>
  .code <br>
  start: <br>
  mov ofn.lStructSize,sizeof ofn <br>
  mov ofn.lpstrFilter, offset FilterString <br>
  mov ofn.lpstrFile, offset buffer <br>
  mov ofn.nMaxFile,512 <br>
  mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER 
  or OFN_HIDEREADONLY <br>
  invoke GetOpenFileName, ADDR ofn <br>
  .if eax==TRUE <br>
  invoke GetStartupInfo,addr startinfo <br>
  invoke CreateProcess, addr buffer, NULL, NULL, NULL, FALSE, DEBUG_PROCESS+ DEBUG_ONLY_THIS_PROCESS, 
  NULL, NULL, addr startinfo, addr pi <br>
  .while TRUE <br>
  &nbsp;&nbsp;&nbsp;invoke WaitForDebugEvent, addr DBEvent, INFINITE <br>
  &nbsp;&nbsp;&nbsp;.if DBEvent.dwDebugEventCode==EXIT_PROCESS_DEBUG_EVENT <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox, 0, addr ExitProc, addr 
  AppName, MB_OK+MB_ICONINFORMATION <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .break <br>
  &nbsp;&nbsp; .elseif DBEvent.dwDebugEventCode==CREATE_PROCESS_DEBUG_EVENT <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf, addr buffer, addr ProcessInfo, 
  DBEvent.u.CreateProcessInfo.hFile, DBEvent.u.CreateProcessInfo.hProcess, DBEvent.u.CreateProcessInfo.hThread, 
  DBEvent.u.CreateProcessInfo.lpBaseOfImage, DBEvent.u.CreateProcessInfo.lpStartAddress 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox,0, addr buffer, addr 
  AppName, MB_OK+MB_ICONINFORMATION &nbsp;&nbsp;&nbsp;<br>
  &nbsp;&nbsp; .elseif DBEvent.dwDebugEventCode==EXCEPTION_DEBUG_EVENT <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if DBEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOINT 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke ContinueDebugEvent, 
  DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.continue <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp; .elseif DBEvent.dwDebugEventCode==CREATE_THREAD_DEBUG_EVENT <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox,0, addr NewThread, addr 
  AppName, MB_OK+MB_ICONINFORMATION <br>
  &nbsp;&nbsp; .elseif DBEvent.dwDebugEventCode==EXIT_THREAD_DEBUG_EVENT <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox,0, addr EndThread, addr 
  AppName, MB_OK+MB_ICONINFORMATION <br>
  &nbsp;&nbsp; .endif <br>
  &nbsp;&nbsp; invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, 
  DBG_EXCEPTION_NOT_HANDLED <br>
  .endw <br>
  invoke CloseHandle,pi.hProcess <br>
  invoke CloseHandle,pi.hThread <br>
  .endif <br>
  invoke ExitProcess, 0 <br>
  end start </p>
<h3>分析:</h3>
<p>程序首先填充OPENFILENAME結(jié)構(gòu),調(diào)用GetOpenFileName讓用戶選擇要調(diào)試的程序.</p>
<p>invoke GetStartupInfo,addr startinfo <br>
  invoke CreateProcess, addr buffer, NULL, NULL, NULL, FALSE, DEBUG_PROCESS+ DEBUG_ONLY_THIS_PROCESS, 
  NULL, NULL, addr startinfo, addr pi </p>
<p>當(dāng)接收用戶選擇后,調(diào)用<b>CreateProcess</b>裝載程序.并調(diào)用<b>GetStartupInfo</b>以默認(rèn)值填充<b>STARTUPINFO</b>結(jié)構(gòu).注意我們將<b>DEBUG_PROCESS</b>標(biāo)志與<b>DEBUG_ONLY_THIS_PROCESS</b>標(biāo)志組合來僅調(diào)試這個(gè)程序,不包括子進(jìn)程.</p>
<p>.while TRUE <br>
  &nbsp;&nbsp;&nbsp;invoke WaitForDebugEvent, addr DBEvent, INFINITE <br>
</p>
<p>在debuggee被裝入后,我們調(diào)用<b>WaitForDebugEvent</b>進(jìn)入無盡的調(diào)試循環(huán),<b>WaitForDebugEvent</b>在debuggee中發(fā)生調(diào)試事件時(shí)返回,因?yàn)槲覀冎付?lt;b>INFINITE</b>作為第二個(gè)參數(shù).當(dāng)調(diào)試事件發(fā)生時(shí), 
  <b>WaitForDebugEvent </b>返回并填充DBEvent結(jié)構(gòu).</p>
<p>&nbsp;&nbsp;&nbsp;.if DBEvent.dwDebugEventCode==EXIT_PROCESS_DEBUG_EVENT <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox, 0, addr ExitProc, addr 
  AppName, MB_OK+MB_ICONINFORMATION <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .break </p>
<p>我們要先檢查<b>dwDebugEventCode</b>的值, 如果是<b>EXIT_PROCESS_DEBUG_EVENT,</b>用一個(gè)消息框顯示&quot;The 
  debuggee exits&quot; 并退出調(diào)試循環(huán).</p>
<p> &nbsp;&nbsp; .elseif DBEvent.dwDebugEventCode==CREATE_PROCESS_DEBUG_EVENT 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke wsprintf, addr buffer, addr ProcessInfo, 
  DBEvent.u.CreateProcessInfo.hFile, DBEvent.u.CreateProcessInfo.hProcess, DBEvent.u.CreateProcessInfo.hThread, 
  DBEvent.u.CreateProcessInfo.lpBaseOfImage, DBEvent.u.CreateProcessInfo.lpStartAddress 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox,0, addr buffer, addr 
  AppName, MB_OK+MB_ICONINFORMATION &nbsp;&nbsp;&nbsp;</p>
<p>如果<b>dwDebugEventCode</b> 的值為<b>CREATE_PROCESS_DEBUG_EVENT</b>,我們就在消息框中顯示一些感興趣的底層信息.這些信息從<b>u.CreateProcessInfo</b>獲得. 
  CreateProcessInfo是一個(gè)<b>CREATE_PROCESS_DEBUG_INFO</b>類型的結(jié)構(gòu)體.你可以查閱Win32 API獲得它的更多信息e. 
</p>
<p> &nbsp;&nbsp; .elseif DBEvent.dwDebugEventCode==EXCEPTION_DEBUG_EVENT <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .if DBEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOINT 
  <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke ContinueDebugEvent, 
  DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.continue <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .endif </p>
<p>如果<b>dwDebugEventCode</b> 的值為<b>EXCEPTION_DEBUG_EVENT</b>,我們就要更進(jìn)一步檢查異常類型.它是一大堆的結(jié)構(gòu)嵌套,但我們可以從<b>ExceptionCode</b>成員獲得異常類型.如果<b>ExceptionCode</b>的值為 
  <b>EXCEPTION_BREAKPOINT</b>并且是第一次發(fā)生(或者我們已知道deuggee中沒有int 3h指令),我們可以安全地假定在debuggee要執(zhí)行第一條指令時(shí)發(fā)生這一異常.在我們完成這些處理后,就可以用 
  <b>DBG_CONTINUE</b>調(diào)用<b>ContinueDebugEvent</b>來繼續(xù)執(zhí)行debuggee.接著我們繼續(xù)等待下一個(gè)調(diào)試事件的發(fā)生.</p>
<p> &nbsp;&nbsp; .elseif DBEvent.dwDebugEventCode==CREATE_THREAD_DEBUG_EVENT <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox,0, addr NewThread, addr 
  AppName, MB_OK+MB_ICONINFORMATION <br>
  &nbsp;&nbsp; .elseif DBEvent.dwDebugEventCode==EXIT_THREAD_DEBUG_EVENT <br>
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoke MessageBox,0, addr EndThread, addr 
  AppName, MB_OK+MB_ICONINFORMATION <br>
  &nbsp;&nbsp; .endif </p>
<p>如果<b>dwDebugEventCode</b> 的值為<b>CREATE_THREAD_DEBUG_EVENT</b>或<b>EXIT_THREAD_DEBUG_EVENT</b>, 
  我們的程序顯示一個(gè)消息框.</p>
<p> &nbsp;&nbsp; invoke ContinueDebugEvent, DBEvent.dwProcessId, DBEvent.dwThreadId, 
  DBG_EXCEPTION_NOT_HANDLED <br>
  .endw </p>
<p>除了上面討論過的<b> EXCEPTION_DEBUG_EVENT</b>,用<b>DBG_EXCEPTION_NOT_HANDLED</b>標(biāo)志調(diào)用<b>ContinueDebugEvent</b>函數(shù)恢復(fù)debuggee的執(zhí)行.</p>
<p>invoke CloseHandle,pi.hProcess <br>
  invoke CloseHandle,pi.hThread </p>
<p>當(dāng)debuggee結(jié)束時(shí),我們就跳出了調(diào)試循環(huán),這時(shí)要關(guān)閉 debuggee的線程和進(jìn)程句柄.關(guān)閉這些句柄并不意味著要關(guān)閉這些進(jìn)程和線程.只是說不再用這些句柄罷了. 
</p>
<HR SIZE=1>
<DIV align=center> 
  <SCRIPT language=JavaScript1.1 src="../lion-tut-c13.files/textclick"></SCRIPT>
  <BR>
</DIV>
<!-- 10:1 文本廣告交換 --> 
<DIV align=center> 
  <SCRIPT language=JavaScript1.1 src="../lion-tut-c13.files/c21.htm"></SCRIPT>
  <!-- 10:1 文本廣告交換 --></DIV>
<HR SIZE=1>
<DIV align=center>校對(duì):LuoYunBin's Win32 ASM Page, <A 
href="http://asm.yeah.net/">http://asm.yeah.net</A></DIV>
</BODY></HTML>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲一二三区| 91精品蜜臀在线一区尤物| 欧美在线播放高清精品| 正在播放亚洲一区| 久久久亚洲高清| 亚洲一区在线观看视频| 六月婷婷色综合| av成人老司机| 日韩美女天天操| 最近日韩中文字幕| 久久精品国产网站| 日本韩国欧美国产| 精品免费日韩av| 亚洲欧美国产高清| 久久精品二区亚洲w码| 色综合久久中文综合久久97| 欧美一级在线免费| 国产精品久久久久久亚洲伦| 日日夜夜精品免费视频| av激情亚洲男人天堂| 日韩一级片在线播放| 中文字幕免费一区| 日日骚欧美日韩| 99久久精品情趣| 精品女同一区二区| 亚洲国产三级在线| 国产成人一区二区精品非洲| 欧美日韩二区三区| 国产精品福利在线播放| 日本不卡视频在线观看| 日本久久一区二区| 国产午夜精品一区二区三区嫩草| 亚洲动漫第一页| 成人av手机在线观看| 亚洲精品一区二区三区四区高清 | 丁香婷婷深情五月亚洲| 欧美日韩一区二区三区视频| 国产精品免费看片| 国产伦精一区二区三区| 日韩三级免费观看| 亚洲国产另类av| 91亚洲精品一区二区乱码| 国产清纯在线一区二区www| 美日韩一区二区三区| 在线视频一区二区免费| 国产精品毛片无遮挡高清| 国产一区二区三区四区五区美女| 欧美高清视频不卡网| 最好看的中文字幕久久| 国产.欧美.日韩| 亚洲精品一区二区三区精华液 | 精品国产人成亚洲区| 亚洲图片有声小说| 色域天天综合网| 国产精品视频线看| 岛国一区二区在线观看| 久久久久久久久免费| 精品中文av资源站在线观看| 这里只有精品99re| 日本中文字幕不卡| 日韩一区二区不卡| 美女一区二区在线观看| 91精品久久久久久久久99蜜臂| 亚洲一区视频在线观看视频| 色哟哟国产精品免费观看| 自拍偷拍欧美激情| 色94色欧美sute亚洲线路二| 亚洲精品成人少妇| 91麻豆6部合集magnet| 亚洲免费在线看| 91尤物视频在线观看| 成人免费在线观看入口| 91在线精品一区二区三区| 国产精品成人免费在线| 91麻豆高清视频| 亚洲一卡二卡三卡四卡五卡| 欧美日韩高清影院| 美女高潮久久久| 亚洲精品一区二区在线观看| 国产高清一区日本| 国产精品美女www爽爽爽| 91天堂素人约啪| 亚洲电影第三页| 欧美一级一级性生活免费录像| 免费观看成人鲁鲁鲁鲁鲁视频| 精品久久久久久无| 国产超碰在线一区| 最新高清无码专区| 欧美日韩五月天| 久久99这里只有精品| 26uuu亚洲婷婷狠狠天堂| 国产精品正在播放| 亚洲欧美日韩电影| 在线成人av网站| 国产一区二区三区综合| 国产精品久久久久天堂| 色综合天天综合色综合av| 亚洲成av人影院| 精品国产乱码久久久久久老虎| 国产乱子轮精品视频| 亚洲欧洲日韩女同| 欧美日韩成人一区二区| 激情久久久久久久久久久久久久久久| 国产婷婷一区二区| 色94色欧美sute亚洲线路二| 男女视频一区二区| 中文字幕va一区二区三区| 在线中文字幕一区二区| 蜜桃精品视频在线| 国产精品电影院| 欧美二区三区的天堂| 国产麻豆一精品一av一免费| 亚洲乱码日产精品bd| 日韩欧美国产一区在线观看| eeuss鲁片一区二区三区 | 欧美精品在线观看播放| 国内精品国产三级国产a久久| 一区精品在线播放| 欧美一区二区三区婷婷月色| 丁香一区二区三区| 视频在线在亚洲| 国产亚洲制服色| 欧美日韩三级一区二区| 懂色av一区二区在线播放| 亚洲国产一二三| 欧美激情在线一区二区三区| 欧美老肥妇做.爰bbww| 懂色av一区二区三区免费看| 亚洲国产综合91精品麻豆| 久久精品男人天堂av| 911国产精品| 91亚洲国产成人精品一区二区三 | 久久伊人中文字幕| 欧美日韩一区在线观看| 大美女一区二区三区| 日韩中文字幕91| 亚洲精品视频在线观看网站| 久久日韩粉嫩一区二区三区 | 精品一区二区日韩| 亚洲一区二区高清| 中文字幕精品在线不卡| 日韩精品一区二区三区四区视频| 91久久奴性调教| 从欧美一区二区三区| 久久精工是国产品牌吗| 亚洲va在线va天堂| 亚洲日本成人在线观看| 久久色中文字幕| 日韩精品一区二区三区四区视频| 欧美三区在线观看| 色999日韩国产欧美一区二区| 国产成人精品免费网站| 美腿丝袜亚洲色图| 五月天一区二区三区| 亚洲一区二区在线观看视频 | 在线精品视频免费观看| 成人av电影在线播放| 韩国av一区二区三区在线观看| 丝袜亚洲另类丝袜在线| 亚洲日本一区二区| 亚洲国产成人午夜在线一区| 久久久青草青青国产亚洲免观| 日韩亚洲欧美高清| 欧美日韩国产欧美日美国产精品| 91亚洲男人天堂| aaa亚洲精品一二三区| 国产成人在线网站| 国产一本一道久久香蕉| 国内成人免费视频| 韩国精品在线观看| 国产一区二区在线观看视频| 韩国理伦片一区二区三区在线播放| 免费观看30秒视频久久| 免费观看在线综合| 免费观看在线综合色| 玖玖九九国产精品| 精品亚洲aⅴ乱码一区二区三区| 另类欧美日韩国产在线| 久久精品国产99久久6| 捆绑调教一区二区三区| 九色porny丨国产精品| 狠狠色丁香婷婷综合| 韩国成人精品a∨在线观看| 国产真实乱对白精彩久久| 激情六月婷婷久久| 国产精品1024久久| 成人综合在线观看| 91免费观看视频在线| 91麻豆国产自产在线观看| 91黄色在线观看| 欧美精品自拍偷拍动漫精品| 91麻豆精品国产自产在线| 日韩免费高清av| 久久精品日产第一区二区三区高清版| 日本一区二区三区国色天香 | 欧美系列一区二区| 欧美理论片在线| 欧美tk—视频vk| 中文字幕电影一区| 亚洲视频综合在线|