使用WinDbg內核調試
- 首先你要配置好測試環境:參考VMware+Windgb+Win7 內核驅動調試
- 在你的主機上配置Symbols
- 配置sympath,C:\Users\Admin\Desktop\first\objchk_win7_x86\i386是你編譯好的sys目錄: SRV*C:\Symbols*https://msdl.microsoft.com/download/symbols;C:\Users\Admin\Desktop\first\objchk_win7_x86\i386
- 配置Source search path假設文件放在C:\Users\Admin\Desktop\first]: C:\Users\Admin\Desktop\first
- 然後在命令行中輸入:.reload
- 打開源文件:Ctrl+O
- 接著檢查是否已經加載sys.dbg,命令為:
kd> !lmi ndislwf
Loaded Module Info: [nt]
Module: ntoskrnl Base Address: 80a02000Symbol Type: PDB – Symbols loaded successfully from symbol server.
d:\DebugSymbols\ndislwf.pdb\EC9B7590D1BB47A6A6D5383538C2B31A1\ntoskrnl.pdb
Compiler: C – front end [13.10 bld 2179] – back end [13.10 bld 2190] Load Report: public symbols
d:\DebugSymbols\ndislwf.pdb\EC9B7590D1BB47A6A6D5383538C2B31A1\ndislwf.pdb - 接著如果出現如上的結果,表明可以手動設置斷點,否則(個人經驗總是不能設置)。假設在ndislwf 的DriverEntry 設置斷點。在啟動驅動之前,中斷在WinDbg的命令窗口,輸入:bu ndislwf!DriverEntry
- 接下來開始安裝測試驅動。若執行到DriverEntry該函數,就會停下來,並且會在代碼框中對應的代碼中用紅色標誌,然後按F10可以單步調試。
- 如果查看已經設置哪些斷點:
kd> bl
0 e [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 123] 0001 (0001) ndislwf!DriverEntry
1 e [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 338] 0001 (0001) ndislwf!SioctlDeviceControl+0×103
注意兩件事: 每個斷點都有一個號碼並且顯示出斷點狀態,“e”是“enabled”,而“d”是“disabled”。假設你希望臨時停止使用某個斷點。bd (“Disable Breakpoint”) 將會完成它。你隻需指定斷點號碼:
kd> bd 1
kd> bl
0 e [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 123] 0001 (0001) ndislwf!DriverEntry
1 d [d:\winddk\3790\src\general\ioctl\sys\filter.c @ 338] 0001 (0001) ndislwf!SioctlDeviceControl+0×103 ·
相似的方法,永久移除斷點號碼,使用bc 1 (“Clear Breakpoint”)。現在該斷點將會從斷點列表中消除。
假設你希望臨時停止使用某 個斷點。bd (“Disable Breakpoint”) 將會完成它。你隻需指定斷點號碼:
kd> bd 1
kd> bl
0 e [d:\winddk\3790\src\general\ioctl\sys\sioctl.c @ 123] 0001 (0001) SIoctl!DriverEntry
1 d [d:\winddk\3790\src\general\ioctl\sys\sioctl.c @ 338] 0001 (0001) SIoctl!SioctlDeviceControl+0×103
- · 相似的方法,永久移除斷 點號碼,使用bc 1 (“Clear Breakpoint”)。現在該斷點將會從斷點列表中消除。
最後更新:2017-04-03 15:21:55