亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Win32調試API學習心得(二)

2019-11-18 18:30:36
字體:
來源:轉載
供稿:網友
上一章講解了如何用調試API來打開一個被調試程序,并給出了一個簡單的例子,這一章將祥細
講解調試消息包含的內容.

  類似于消息處理中的消息結構TMessage一樣,調試事件也有自己特定的事件結構,那就是TDeb
ugEvent, TDebugEvent在Delphi中的定義為:
  TDebugEvent = _DEBUG_EVENT;
  _DEBUG_EVENT = record
    dwDebugEventCode: DWord;
    dwPRocessId: DWORD;
    dwThreadId: DWORD;
    case Integer of
      0: (Exception: TExceptionDebugInfo);
      1: (CreateThread: TCreateThreadDebugInfo);
      2: (CreateProcessInfo: TCreateProcessDebugInfo);
      3: (ExitThread: TExitThreadDebugInfo);
      4: (ExitProcess: TExitThreadDebugInfo);
      5: (LoadDll: TLoadDLLDebugInfo);
      6: (UnloadDll: TUnloadDLLDebugInfo);
      7: (DebugString: TOutputDebugStringInfo);
      8: (RipInfo: TRIPInfo);
  end;

  這個結構很復雜,包含了三個基本類型和一個聯合類型的數據.dwProcessId和dwThreadId指明
了產生調試事件的進程和線程的ID,dwDebugEventCode指明了產生了何種調試事件,可能的取值
如下表(摘自<<Win32匯編程序設計>>):
  1.CREATE_PROCESS_DEBUG_EVENT:進程被創建.當被調試進程剛被創建(還未運行) 或我們的程
序剛以DebugActiveProcess捆綁到一個運行中的進程時該事件發生. 這是我們的程序應該獲得
的第一個事件. 
  2.EXIT_PROCESS_DEBUG_EVENT:被調試進程退出時產生此消息. 
  3.CREATE_THEAD_DEBUG_EVENT:當一個新線程在被調試進程中創建或我們的程序首次捆綁到運
行中的進程時該事件發生.要注意的是當被調試進程的主線程被創建時不會收到該通知.  
  4.EXIT_THREAD_DEBUG_EVENT:被調試進程中的線程退出時事件發生.被調試進程的主線程退出
時不會收到該通知.我們可以認為被調試進程的主線程與被調試進程是同義詞. 因此, 當我們
的程序看到CREATE_PROCESS_DEBUG_EVENT標志時,對主線程來說,就是CREATE_THREAD_DEBUG_E
VENT標志. 
  5.LOAD_DLL_DEBUG_EVENT:被調試進程裝入一個DLL.當PE裝載器第一次分解指向DLL的鏈接時
,我們將收到這一事件. (當調用CreateProcess裝入 被調試進程時)并且當被調試進程調用Lo
adLibrary時也會發生. 
  6.UNLOAD_DLL_DEBUG_EVENT:一個DLL從被調試進程中卸載時此事件發生.  
  7.EXCEPTION_DEBUG_EVENT:在被調試進程中發生異常時事件發生.異常實際上是一個調試中斷
(int 3h).如果想恢復被調試進程事,以 DBG_CONTINUE 標志調用ContinueDebugEvent 函數. 
不要使用DBG_EXCEPTION_NOT_HANDLED 標志否則被調試進程會在NT下拒絕運行(Win98下運行得
很好). 
  8.OUTPUT_DEBUG_STRING_EVENT:當被調試進程調用DebugOutputString函數向我們的程序發送
消息字符串時該事件發生.  
  9.RIP_EVENT:系統調試發生錯誤.


  根據dwDebugEventCode的不同,應調用聯合中相應的結構來獲得相關的調試信息.例如我們有
個名為Debug的TDebguEvent的結構,在調用WaitForDebugEvent(Debug, INFINITE)后接收到調
試信息時,并且dwDebugEventCode的值為CREATE_PROCESS_DEBUG_EVENT,我們就可以通過仿問D
ebug.CreateProcessInfo.hProcess來獲得剛創建的被調試進程的進程句柄.

  下面將祥細講解TDebugEvent結構中可能包括的每個結構的含義.因為沒有相關的祥細資料,大
部分結果是靠測試所得,如有錯漏敬請指正.

  一.CreateProcessInfo結構: 對應的調試消息CREATE_PROCESS_DEBUG_EVENT.
CreateProcessInfo.hFile:被調試進程的EXE文件被映射到內存中的內存文件映射句柄,可以
通過打開這個句柄(用OpenFileMapping和MapViewOfFile)來讀取此EXE文件的相關信息.如引入
引出表等.
CreateProcessInfo.hProcess:被調試進程的進程句柄,如果要使用ReadProcessMemory和Wri
teProcessMemory等函數來修改被調試進程,就需要用到這個句柄,可以用一個變量保存起來供
以后使用.
CreateProcessInfo.hThread:主線程句柄.
CreateProcessInfo.lpBaSEOfImage:可執行文件被裝載到虛似地址空間中的基址.
CreateProcessInfo.dwDebugInfoFileOffset:調試信息在可執行文件中的偏移地址(一般為0
,即沒有調試信息).
CreateProcessInfo.nDebugInfoSize:調試信息的長度.
CreateProcessInfo.lpThreadLocalBase:主線程基址.
CreateProcessInfo.lpStartAddress:主線程的線程函數地址.
CreateProcessInfo.lpImageName:文件映像名,注意這是一個RVA地址(相對虛擬地址).
CreateProcessInfo.fUnicode:如果此值大于0,則lpImageName指向的文件名為UNICODE碼.

  二.ExitProcess結構: 對應的調試消息EXIT_PROCESS_DEBUG_EVENT.
ExitProcess.dwExitCode:即被調試程序調用ExitProcess函數時傳入的退出代碼.

  三.CreateThread結構: 對應的調試消息CREATE_THEAD_DEBUG_EVENT.
CreateThread.hThread:新建線程的句柄.線程句柄,如果以后會涉及到對線程的操作,如掛起
線程等,則可以用一個TList來保存進程ID(TDebugEvent.dwThreadId)和相對應的句柄.再在其
它調試事件發生時,根據dwThreadId得到線程句柄.
CreateThread.lpThreadLocalBase:新線程的基址.
CreateThread.lpStartAddress:新線程的線程函數地址.

  四.ExitThread結構: 對應的調試消息EXIT_THREAD_DEBUG_EVENT.
ExitThread.dwExitCode:即退出的線程調用ExitThread函數時傳入的退出代碼.

  五.LoadDll結構: 對應的調試消息LOAD_DLL_DEBUG_EVENT.
LoadDll.hFile:被加載的DLL文件映射到內存中的內存文件映射句柄,可以通過打開這個句柄
來讀取此DLL文件的相關信息.
LoadDll.lpBaseOfDll:DLL文件被裝載到虛似地址空間中的基址.這個地址加上DLL文件引出的
函數的地址,就是這個函數在內存中的地址.
LoadDll.dwDebugInfoFileOffset:調試信息在DLL文件中的偏移地址.
LoadDll.nDebugInfoSize:調試信息的長度.
LoadDll.lpImageName:DLL文件名的地址,是一個RVA地.
LoadDll.fUnicode:如果此值大于0,則lpImageName指向的文件名為UNICODE碼.

  六.UnLoadDll結構: 對應的調試消息UNLOAD_DLL_DEBUG_EVENT.
UnloadDll.lpBaseOfDll:卸載的DLL文件的基址,可以通過在處理LOAD_DLL_DEBUG_EVENT消息
中保存DLL信息和對應的基址的方法,來得到卸載的DLL信息.

  七.Exception結構: 對應的調試消息EXCEPTION_DEBUG_EVENT.
Exception.ExceptionRecord: 這是一個TExceptionRecord結構,里面包含了被調試程序產生
的中斷或異常的代碼,產生的中斷或異常的地址等信息.

  八.DebugString結構: 對應的調試消息OUTPUT_DEBUG_STRING_EVENT.
DebugString.lpDebugStringData:被調試進程調用DebugOutputString函數發送的消息字符串
的地址.
DebugString.nDebugStringLength:被調試進程調用DebugOutputString函數發送的消息字符
串的長度.
DebugString.fUnicode:如果此值大于0,則消息字符串為UNICODE碼.

  九.RipInfo結構: 對應的調試消息RIP_EVENT.
RipInfo.dwError:錯誤代碼.
RipInfo.dwType:錯誤類型.

  了解了以上的知識,我們就可以在調試器中監視這些調試消息,并獲得我們感興趣的信息.但這
僅僅實現了對被調試調試程序的監視.下一章將講解如何修改被調試程序.

上一篇:關于在VCL寫作過程中提示找不Proxies單元的解決方法

下一篇:tlistview使用--拖放操作

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
98视频在线噜噜噜国产| 久久99久久久久久久噜噜| 国产主播喷水一区二区| 欧美精品午夜视频| 欧美性生交大片免网| 777午夜精品福利在线观看| 美女视频黄免费的亚洲男人天堂| 成人写真视频福利网| 一本色道久久综合亚洲精品小说| 日本国产精品视频| 欧美性猛交xxxx免费看久久久| 红桃视频成人在线观看| 欧美成人免费在线观看| 成人自拍性视频| 亲爱的老师9免费观看全集电视剧| 国产精品视频公开费视频| 久久影院中文字幕| 欧美寡妇偷汉性猛交| 久久久久久亚洲精品中文字幕| 精品福利免费观看| 国产一区视频在线| 国产精品国产三级国产aⅴ9色| 97国产精品视频人人做人人爱| 亚洲精品视频网上网址在线观看| 亚洲视频一区二区| 久久久国产一区二区| 超薄丝袜一区二区| 丁香五六月婷婷久久激情| 精品久久久91| 韩国精品美女www爽爽爽视频| 2019中文字幕在线免费观看| 在线看欧美日韩| 国模精品一区二区三区色天香| 国产精品人人做人人爽| 51精品国产黑色丝袜高跟鞋| 亚洲欧洲日本专区| 亚洲人午夜精品免费| 91精品国产一区| 欧美性猛交xxxx黑人| 色先锋资源久久综合5566| 欧日韩不卡在线视频| 国产99久久久欧美黑人| 精品久久久视频| 欧美精品久久久久久久久久| 成人h猎奇视频网站| 欧美中文在线观看国产| 欧洲美女7788成人免费视频| 久久九九免费视频| 国产精品老牛影院在线观看| 国产999精品久久久影片官网| 亚洲色图综合网| 国产在线精品成人一区二区三区| 日韩精品在线私人| 色爱av美腿丝袜综合粉嫩av| 美乳少妇欧美精品| 欧美精品中文字幕一区| 亚洲大尺度美女在线| 欧美日韩精品国产| 久久精品国产清自在天天线| 亚洲精品一区中文| 亚洲丝袜在线视频| 亚洲成人网在线观看| 国产精品视频色| 国产高清视频一区三区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲欧洲中文天堂| 成人欧美一区二区三区在线| 国产欧美精品一区二区三区-老狼| 亚洲精品之草原avav久久| 久久九九免费视频| 国产精品久久久久久久久久免费| 粉嫩av一区二区三区免费野| 久久av红桃一区二区小说| 欧美精品做受xxx性少妇| 日韩精品欧美激情| 国产日韩欧美夫妻视频在线观看| 亚洲精品国精品久久99热一| 欧美激情网友自拍| 国产狼人综合免费视频| 亚洲另类xxxx| 亚洲精品免费一区二区三区| 日韩va亚洲va欧洲va国产| 亚洲激情视频在线| 久久久久久久97| 亚洲自拍偷拍一区| 国产精品久久久久久久久久久新郎| 日韩中文字幕免费看| 国产一区二区在线播放| 国产精品三级久久久久久电影| 欧美国产日韩精品| 一区二区亚洲精品国产| 色七七影院综合| 高潮白浆女日韩av免费看| 久久国产精品久久久久| 亚洲精品国产欧美| 日本一区二区在线播放| 国产欧美日韩专区发布| 久久亚洲精品国产亚洲老地址| 91黑丝高跟在线| 亚洲社区在线观看| 欧美电影免费观看网站| 在线视频中文亚洲| 国产精品日韩在线播放| 亚洲 日韩 国产第一| 欧美激情中文字幕在线| 美女啪啪无遮挡免费久久网站| 欧美日韩亚洲精品内裤| 中文国产成人精品久久一| 少妇高潮久久77777| 国产成人精品一区二区三区| 一区二区三区回区在观看免费视频| 91精品久久久久久久久久久久久| 精品美女久久久久久免费| 欧美韩日一区二区| 久久久亚洲福利精品午夜| 91在线免费视频| 亚洲精品日韩丝袜精品| 成人免费看黄网站| 日韩电影大片中文字幕| 美女福利精品视频| 国产亚洲欧洲高清| 国产精品三级网站| 精品香蕉一区二区三区| 九九久久精品一区| 欧美精品中文字幕一区| 国产精品天天狠天天看| 精品电影在线观看| 91精品国产色综合| 欧美国产在线视频| 国产91精品高潮白浆喷水| 成年人精品视频| 久久久国产影院| 亚洲va欧美va国产综合剧情| 欧美成人午夜激情| 精品亚洲va在线va天堂资源站| 日韩成人黄色av| 精品网站999www| 国产精品第三页| 日韩精品中文字幕在线观看| 九九热最新视频//这里只有精品| 欧美成人精品在线观看| 日本一本a高清免费不卡| 成人久久18免费网站图片| 亚洲xxx自由成熟| 久久99久久99精品免观看粉嫩| 国产91在线播放| 久久免费精品日本久久中文字幕| 亚洲人高潮女人毛茸茸| 亚洲欧美三级在线| 国产在线久久久| 成人亚洲欧美一区二区三区| 欧美在线视频导航| 欧美精品久久久久久久免费观看| 国产a级全部精品| 在线播放国产一区二区三区| 国产一区私人高清影院| 另类专区欧美制服同性| 国产精品女视频| 青草热久免费精品视频| 97超碰蝌蚪网人人做人人爽| 欧美日韩中文字幕综合视频| 国产成人综合精品在线| 国产精品成人一区| 精品久久久久久久大神国产|