(整理+原創)windbg+vmware進行驅動原始碼除錯 轉
阿新 • • 發佈:2019-02-16
網上的教程說的不清楚,整理了個,免得以後要用找不到
一.安裝檔案:(這些換成你自己的路徑,不一定要一樣的)
VMware 安裝路徑:C:\Program Files\VMware\VMware Workstation
Symbols(程式碼庫) 安裝路徑:D:\tools\Symbols
WinDbg 安裝路徑:C:\Program Files\Debugging Tools for Windows\windbg.exe
虛擬Xp 安裝路徑:E:\vmxp(記住windbg是安裝在主機上,安裝在虛擬機器上是不能進行原始碼除錯的)
驅動程式碼所在位置:D:\Sfilter\sys (驅動原始碼,包括sourcer、sys、pdb、inf、c/c++等) 驅動要安裝在虛擬機器,原始碼等要放在主機上
VMware中的工具:開啟VMware中的VM選單-》Install VMware tools
二.安裝VMware,在安裝winXp並進行以下配置,可以在window下對虛擬機器除錯:
1.在VMware的WinXp目錄(E:\vmxp)下找到winxppro.vmx檔案,加入以下的語句,為提高效率。(這個不是必要的)
vmmouse.present = "FALSE"
svga.maxFullscreenRefreshTick = "5"
2.在VMware的WinXp中新增串列埠裝置Serial Port(開啟VMware選擇WinXp進行操作(非常重要,不要遺漏了)
\\.\pipe\com_1
This end is the server
The other end is a virtul machine
Advanced Yield CPU on poll 要選中
3.在WinDbg的快捷方式點右鍵-->屬性-->目標 中加入(主機安裝完windbg時候在桌面上新建快捷方式,右鍵屬性)
"C:\Program Files\Debugging Tools for Windows\windbg.exe" -b -k com:port=\\.\pipe\com_1,baud=11520,pipe
4.啟動VMware的WinXp,在它的c:\boot.ini檔案中加入(這個是隱藏檔案)
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200
5.在本機上加“系統環境變數”(這個沒有必要,只要你有下載symbol程式碼庫就行了,可以跳過)
_NT_SYMBOL_PATH
SRV*e:\symbols*
三.執行步驟:
1.啟動WinDbg(這個不要點選新建的那個快捷方式,從開始選單執行,試試就知道了)
(1)載入Symbol的路徑(選單File-->Symbol File Path D:\tools\Symbols;D:\Sfilter\sys\objchk\i386)(選單File-->Symbol File Path 點選browse 新增第一個是你安裝的程式碼庫的路徑,當你安裝程式碼庫的時候你會看見路徑,找到新增即可,第二詞點選browse新增你驅動程式碼的生成檔案路徑,找到你驅動的資料夾即可,最後一層一定是i386)
(2)載入Source的路徑(選單File-->Source File Path D:\Sfilter\sys\)(這個是你驅動原始碼的路徑)
(3)載入ImagePath路徑(選單File-->Image File Path D:\Sfilter\sys\objchk\i386)(和(1)步中的第二個路徑是一樣的)
2.啟動虛擬機器,選擇debug
這時候虛擬機器會暫停執行,在windbg裡面輸入g虛擬機器會全速執行,如果你想除錯驅動程式碼的話,可以點選windbg的暫停按鈕,在命令視窗輸入 bp 函式名 ,比如
bp TdiFuncs_Send 即可,然後輸入g
此時虛擬機器會全速執行,直到你在虛擬機器裡面安裝該驅動,當驅動執行至TdiFuncs_Send函式時整個虛擬機器便會暫停執行,此時整個虛擬機器隨你蹂躪
你可以檢視變數什麼的,和其他偵錯程式差不多,但是驅動除錯就是比較麻煩,
四.在winDbg中常用的命令(更多命令請查閱幫助)
下斷點:bp 地址 也可 bp 函式名
列出斷點:bl
清除斷點:bc 斷點號
禁用斷點:bd 斷點號
使能斷點:be 斷點號
重新載入:.reload
列出符號庫: lm
載入符號庫:ld
看結構體:dt 〔結構體〕
寫驅動容易引起藍屏的,最經常的原因是指標指向未初始化的變數!!出錯即死,沒得商量
如果你是使用irptrace、drivermonitor等來檢視除錯資訊的話,藍屏就看不到了,
不過當電腦藍屏時候,會將資訊壓入一個轉儲檔案中,關於轉儲檔案不清楚的去baidu一下,如果你有進行雙機除錯的經驗的話,利用dump檔案來查看出錯函式是很方便地。。。
先把藍屏的電腦重啟(一般他自己就重啟了),找到dump檔案(找不到的search一下),複製