Windows基礎(chǔ)調(diào)試器_第1頁(yè)
Windows基礎(chǔ)調(diào)試器_第2頁(yè)
Windows基礎(chǔ)調(diào)試器_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Windows 基礎(chǔ)調(diào)試器(BASIC DEBUGGER)Windows提供了許多調(diào)試程序的方法.其中一個(gè)叫Basic Debug.提供了基礎(chǔ)調(diào)試方法.他是一個(gè)事件驅(qū)動(dòng)的調(diào)試方法.提供了簡(jiǎn)單調(diào)試功能.所謂事件驅(qū)動(dòng)就是在相關(guān)調(diào)試事件發(fā) 生時(shí)給調(diào)試器發(fā)送相關(guān)事件并由調(diào)試器對(duì)該事件采取適當(dāng)?shù)膭?dòng)作.下面就來看看如何創(chuàng)建一個(gè)基礎(chǔ)調(diào)試器.有兩種方式運(yùn)行基礎(chǔ)調(diào)試器.1.其中一個(gè)方法是調(diào)試正在運(yùn)行進(jìn)程.要對(duì)運(yùn)行中的進(jìn)程進(jìn)行調(diào)試,可以通過調(diào)用DebugActiveProcess,并指定進(jìn)程標(biāo)識(shí)(PID).要得到進(jìn)程ID可以調(diào)用EnumProcesses or Process32First兩個(gè)函數(shù).DebugAc

2、tiveProcess將調(diào)試器附加到目標(biāo)進(jìn)程.這樣就只能調(diào)試所附加的進(jìn)程而不能調(diào) 試子進(jìn)程.調(diào)試器必須有適當(dāng)權(quán)限來執(zhí)行DebugActiveProcess.要得到更多權(quán)限控制可參閱權(quán)限 控制(Access Control ).在調(diào)試器創(chuàng)建或附加到所要調(diào)試的目標(biāo)進(jìn)程后,系統(tǒng)將目標(biāo)進(jìn)程(如果指定子進(jìn)程也包括在 內(nèi))發(fā)生的所有相關(guān)事件發(fā)送到調(diào)試器.要了解更多的調(diào)試事件可參考Debugging Events.要分離調(diào)試進(jìn)程,調(diào)試器調(diào)用DebugActiveProcessStop函數(shù).調(diào)試函數(shù)聲明BOOL WINAPI DebugActiveProcess( _in DWORD dwProcessId

3、);dwProcessID 指定進(jìn)程 PID如果執(zhí)行成功返回非0,否則錯(cuò)誤返回0,要獲取更多錯(cuò)誤信息,執(zhí)行 GetLastError要停止調(diào)試,你只要退出被調(diào)試的進(jìn)程,或者調(diào)用DebugActiveProcessStop函 數(shù).退出調(diào)試器同樣退出被調(diào)試進(jìn)程,除非你調(diào)用了 DebugSetProcessKillOnExit 函數(shù).調(diào)試器必須對(duì)目標(biāo)進(jìn)程有相應(yīng)權(quán)限,并且能對(duì)打開的進(jìn)程具有 PROCESS_ALL_ACCESS 權(quán)限.Windows Me/98/95上,如果目標(biāo)進(jìn)程PID有效,調(diào)試器就有適當(dāng)權(quán)限.其他版本W(wǎng)indows,如果目標(biāo)進(jìn)程使用了安全描述符,調(diào)試器如果沒有Full Access

4、,調(diào)用DebugActiveProcess將失敗.如果調(diào)試進(jìn)程具有SE_DEBUG_NAME權(quán)限并 啟用,它就能調(diào)試任何進(jìn)程。系統(tǒng)檢測(cè)完進(jìn)程PID,并確認(rèn)調(diào)試器有效后。函數(shù)DebugActiveProcess返回 TRUE.然后調(diào)試器調(diào)用WaitForDebugEvent函數(shù)來等待事件。這里要注意,DebugActiveProcess WaitForDebugEvent DebugActiveProcessStop 這三個(gè)函數(shù)要在同一個(gè)線程運(yùn)行系統(tǒng)暫停被調(diào)試進(jìn)程中的所有線程,并給調(diào)試進(jìn)程發(fā)送被調(diào)試進(jìn)程的當(dāng)前狀態(tài)。系統(tǒng)發(fā)送一個(gè)CREATE_PROCESS_DEBUG_EVENT調(diào)試事件表明指定進(jìn)

5、程.CREATE_PROCESS_DEBUG_INFO 的 lpStartAddress成員為NULL進(jìn)程中的每個(gè)線程,系統(tǒng)發(fā)送一個(gè)CREATE_THREAD_DEBUG_EVENT事件。 CREATE_THREAD_DEBUG_INFO 的 IpStartAddress 成員為NULL目標(biāo)進(jìn)程地址空間加載的每一個(gè)動(dòng)態(tài)庫(kù)(DLL),系統(tǒng)將發(fā)送一個(gè)LOAD_DLL_DEBUG_EVENT 調(diào)試事件。系統(tǒng)將安排給第一個(gè)線程一個(gè)斷點(diǎn),當(dāng)恢復(fù)運(yùn)行時(shí)將停在那。當(dāng)所有這些都完成后,系統(tǒng)恢復(fù)運(yùn)行所有的線程。并執(zhí)行斷點(diǎn)引發(fā)一個(gè) EXCEPTION_DEBUG_EVENT 調(diào)試事件。然后其它調(diào)試事件將陸續(xù)發(fā)送到

6、調(diào)試器。函數(shù)要求指引 系統(tǒng) 要求 服務(wù) 器版本頭文件鏈接庫(kù)動(dòng)態(tài)庫(kù)Requires Windows Vista,Windows NT Workstation,Windows XP, Windows 2000 Professional,Windows Me, Windows 98, or Windows 95.Requires Windows Server Server, or Windows NT Server.2008, Windows Server 2003, Windows 2000Declared in Winbase.h; include Windows.h.Use Kernel32.lib.Requires Kernel32.dll.2.另外一個(gè)方法是使用CreateProcess函數(shù)創(chuàng)建要調(diào)試的進(jìn)程,并給創(chuàng)建標(biāo)記(CreateFlag) 設(shè)置為 DEBUG_PRO

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論