資源描述:
《使用windbg和vmware調(diào)試驅(qū)動(dòng)程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、使用WinDBG和VMware調(diào)試驅(qū)動(dòng)程序轉(zhuǎn)自:呵呵,搞點(diǎn)突兀的標(biāo)題而已。其實(shí)說的還是如何使用WinDBG和VMware來搭建調(diào)試內(nèi)核的環(huán)境而已,這些網(wǎng)上已經(jīng)有數(shù)不清的教程了,不過我喜歡自己親手寫一下。第一,把這個(gè)過程寫一遍能加深印象,就算以后忘記了也可以有筆記查找,快速想起來。第二、網(wǎng)上的教程很多都是互相抄來抄去,連錯(cuò)誤也抄過去了。很典型一個(gè)錯(cuò)誤就是BaudRate,前面還寫115200,后面就寫成了11520了,狂汗!按照我這篇筆記寫的步驟去做,絕對(duì)能夠成功,并且還能大略地了解到為什么要這樣做的原因。第1部分是步驟,如果不
2、想看原因的,直接按部照搬就可以成功。如果還想深入點(diǎn)了解為什么要做這些步驟,這些步驟的含義是什么?那就請(qǐng)繼續(xù)看第二部分。第一部分(步驟):先統(tǒng)一名稱,真實(shí)的操作系統(tǒng)叫HostOS,在VMware里虛擬的操作系統(tǒng)叫GuestOS。1.在VMware里安裝好GuestOS;下載WinDBG并安裝好。2.添加一個(gè)串口在關(guān)閉GuestOS的情況下才能添加硬件。添加串口的過程如下:選擇"串行端口",選擇"輸出命名管道",其他如下設(shè)置:3.在GuestOS的boot.ini文件里填入如下內(nèi)容:multi(0)disk(0)rdisk(0)p
3、artition(1)WINDOWS="MicrosoftWindowsXPProfessionalDebug"/fastdetect/debugport=com1/baudrate=115200如圖:4.創(chuàng)建一個(gè)WinDBG的快捷方式,在"目標(biāo)"一欄后面加上:-b-kcom:pipe,port=.pipecom_1,resets=0如圖:5.重啟GuestOS,選擇Debug模式。6.雙擊第4步創(chuàng)建的那個(gè)快捷方式啟動(dòng)WinDBG,它會(huì)自動(dòng)去連接調(diào)試GuestOS??梢钥吹?,已經(jīng)成功了,現(xiàn)在可以盡情地調(diào)試內(nèi)核了。第二部
4、分(解說):原理就是VMware在GuestOS虛擬一個(gè)COM口,并在HostOS創(chuàng)建了一個(gè)管道,這個(gè)管道的一端連接GuestOS的COM口,另一端則是WinDBG,所以HostOS(WinDBG)和GuestOS的所有數(shù)據(jù)交換都是通過這個(gè)管道來流通轉(zhuǎn)發(fā)的。1.我的電腦沒有COM口,所以不能搭建調(diào)試環(huán)境?不是的,你的電腦有沒有COM口與這個(gè)調(diào)試環(huán)境沒有任何關(guān)系,整個(gè)過程根本沒有使用到你電腦的物理COM口。VMware只是在GuestOS虛擬了一個(gè)COM口而已。2.在創(chuàng)建串口(COM口屬于串口的一種)的過程中,看到指定的管道為"
5、.pipecom_1",我可以指定為其他嗎?可以的。這只是指定一個(gè)管道名字而已,VMware用這個(gè)名字來創(chuàng)建一個(gè)命名管道。我完全可以改成".pipeliangyu"、".pipeaaa"等等,但記得要把WinDBG的快捷方式處的管道名字更改為一樣。3.我可以在GuestOS的boot.ini文件更改那個(gè)COM口嗎?比如把COM1改為COM2?不可以的,VMware會(huì)把虛擬出的這個(gè)COM口總是定義為com1。GuestOS的其他COM口都得讓位。4.看到很多教程都說到要勾選"I/O模式",如圖:一定要勾選嗎?這
6、個(gè)勾選不勾選都可以,我沒發(fā)現(xiàn)有什么大的區(qū)別。5.在更改GuestOS的boot.ini文件的時(shí)候,增加有"/debugport=com1/baudrate=115200"這些內(nèi)容,含義是?使用的調(diào)試端口是com1,波特率是115200。這是在告訴GuestOS現(xiàn)在要調(diào)試內(nèi)核(操作系統(tǒng)),把調(diào)試信息往COM1口輸出,使用的波特率是115200。我在試驗(yàn)的時(shí)候發(fā)現(xiàn),這個(gè)波特率其實(shí)也不一定要設(shè)為115200,完全可以修改為112233、445566等等其他數(shù)據(jù)??赡苁且?yàn)閃inDBG自動(dòng)調(diào)節(jié)波特率來適配管道或COM口,所以波特率在這
7、里沒有實(shí)際意義。6.WinDBG的快捷方式那里添加了"-b-kcom:pipe,port=.pipecom_1,resets=0"這些內(nèi)容,含義是?大概意思就是使用管道".pipecom_1"來進(jìn)行內(nèi)核調(diào)試。各個(gè)參數(shù)的說明在WinDBG的參考文檔里面有,這里粘貼一下:-b(Kernelmodeonly)Thisoptionhastwoeffects:1.Thedebuggerwillbreakintothetargetcomputerimmediatelyuponconnection.2.Afterareboot,
8、thedebuggerwillbreakintothetargetcomputeroncethekernelisinitialized.SeeCrashingandRebootingtheTargetComputerfordetailsandforothermethodsof