• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            aurain
            技術(shù)文摘
            posts - 137,  comments - 268,  trackbacks - 0

                我這里將一步一步的介紹,是從新手的角度來(lái)講的,所以對(duì)高手來(lái)說(shuō),可能有些啰嗦。如果你看完這篇文章還不知道如何設(shè)置,那么原因可能有兩個(gè):1. 我沒(méi)講好;2. 你需要稍微認(rèn)真看下并實(shí)踐下,并實(shí)現(xiàn)對(duì)相關(guān)基本概念要有所了解。

            本文參考了以下的blog及文章,在此對(duì)作者的辛勤勞動(dòng)表示感謝!

            1. http://hi.baidu.com/1ian9yu

            2. http://m.shnenglu.com/fwxjj/archive/2008/01/17/41349.html

             

            一、環(huán)境的搭建

                   首先介紹如何使用WinDbgVMware來(lái)搭建調(diào)試內(nèi)核驅(qū)動(dòng)的環(huán)境。這里先把我用到的軟件版本說(shuō)明下:

            WinDbg 6.10 X86http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a

            Windows符號(hào)表,當(dāng)然也是XP版本的, http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx#d

            VMware WorkStation 6.0(這個(gè)網(wǎng)上搜,我是公司內(nèi)部網(wǎng)下的,應(yīng)該有更新的版本了,這個(gè)能用,所以就先用著,主要是公司大家統(tǒng)一安裝這個(gè))

            虛擬機(jī)安裝的操作系統(tǒng)是Windows XP SP2,真實(shí)的(我自己用的)操作系統(tǒng)也是Windows XP SP2。在這里,先統(tǒng)一稱呼,虛擬機(jī)操作系統(tǒng)叫GuestOS,實(shí)際的叫HostOS。

             

            下面是詳細(xì)的步驟:

            1. 下載VMware并安裝好

            2. 下載Windows符號(hào)表并安裝好,按默認(rèn)設(shè)置即可(C:\Windows\Symbols\,這個(gè)路徑稍后要用到)

            3. 下載WinDbg并安裝,也是默認(rèn)即可

            4. 接下來(lái)在虛擬機(jī)VMware里安裝操作系統(tǒng)(XP),安裝好后啟動(dòng)進(jìn)入GuestOS, 修改boot.ini文件(找不到?在C盤根目錄下,要設(shè)置系統(tǒng)文件可顯示,如何設(shè)置就不說(shuō)了,自己Google)。在文件中添加一行(添在文件最后即可,也即operating systems]節(jié)中加入一行),內(nèi)容如下:

            multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debug /debugport=com1 /baudrate=115200

            上面可以完全copy過(guò)去

            5. 隨后關(guān)閉系統(tǒng)。配制虛擬機(jī)的硬件,點(diǎn)擊 "Edit virtual machine settings",添加一個(gè)Serial Port,選擇"Output to named pipe",然后下一步,第一框里保持默認(rèn)的 \\.\pipe\com_1, 第二框里選"This end is the server." 第三框里選"The other end is an application." 選中 "Connect at power on"選項(xiàng),點(diǎn)擊完成,再在settings主界面的I/O mode選中”Yield CPU on poll”選項(xiàng)。

            好,以上是在虛擬機(jī)要做的全部事情,下面我們要在真實(shí)系統(tǒng)中做一些設(shè)置了。

             

            6. 在真實(shí)系統(tǒng)中,我們要在設(shè)備管理器中。找到通訊端口Com1口,然后再屬性頁(yè)中修改他的速率(每秒位數(shù))為115200。

            7. 為使用方便,我們?cè)谧烂嫘陆ㄒ豢旖莘绞剑ㄗ烂嬗益I-新建-快捷方式),快捷方式的命令行為

            "C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" -y C:\Windows\Symbols\ -b -k com:pipe,port=\\.\pipe\com_1

            上面可以完全copy過(guò)去,當(dāng)然引號(hào)內(nèi)的路徑是需要修改的,就是你安裝的WinDbg路徑了。

            這里面-y后面的路徑就是我們前面安裝符號(hào)表的路徑。

            名稱我設(shè)置為WinDbg

            好,到此為止,所有設(shè)置完畢,現(xiàn)在開(kāi)始運(yùn)行了。

            8. 再此啟動(dòng)GuestOS,這個(gè)時(shí)候可以看到操作系統(tǒng)選擇屏幕了(類似你安裝了雙操作系統(tǒng)),我們選擇那個(gè)帶有Debug的。

            9. 雙擊第7步創(chuàng)建的那個(gè)快捷方式WinDbg,它會(huì)去自動(dòng)連接GuestOS,這是在WinDbg里會(huì)顯示一些信息。

            至此,環(huán)境設(shè)置完畢

            附加說(shuō)明:

            原理就是VMwareGuestOS虛擬一個(gè)COM口,并在HostOS創(chuàng)建了一個(gè)管道,這個(gè)管道的一端連接GuestOSCOM口,另一端則是WinDbg,所以HostOSWinDBG)和GuestOS的所有數(shù)據(jù)交換都是通過(guò)這個(gè)管道來(lái)流通轉(zhuǎn)發(fā)的。

            1.我的電腦沒(méi)有COM口,所以不能搭建調(diào)試環(huán)境?

            不是的,你的電腦有沒(méi)有COM口與這個(gè)調(diào)試環(huán)境沒(méi)有任何關(guān)系,整個(gè)過(guò)程根本沒(méi)有使用到你電腦的物理COM口。VMware只是在GuestOS虛擬了一個(gè)COM口而已。

            2.在創(chuàng)建串口(COM口屬于串口的一種)的過(guò)程中,看到指定的管道為“\\.\pipe\com_1”,我可以指定為其他嗎?

            可以的。這只是指定一個(gè)管道名字而已,VMware用這個(gè)名字來(lái)創(chuàng)建一個(gè)命名管道。我們完全可以改成“\\.\pipe\liangyu”、“\\.\pipe\aaa”等等,但記得要把WinDbg的快捷方式處的管道名字更改為一樣。

            3.我可以在GuestOSboot.ini文件更改那個(gè)COM口嗎?比如把COM1改為COM2

            不可以的,VMware會(huì)把虛擬出的這個(gè)COM口總是定義為com1。GuestOS的其他COM口都得讓位。

            4.看到很多教程都說(shuō)到要勾選“I/O mode” 一定要勾選嗎?

            這個(gè)勾選不勾選都可以,我沒(méi)發(fā)現(xiàn)有什么大的區(qū)別。

            5.在更改GuestOSboot.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,完全可以修改為112233445566等等其他數(shù)據(jù)??赡苁且?yàn)?/span>WinDBG自動(dòng)調(diào)節(jié)波特率來(lái)適配管道或COM口,所以波特率在這里沒(méi)有實(shí)際意義。

            6.WinDbg的快捷方式那里添加了“-b -k com:pipe,port=\\.\pipe\com_1,resets=0”這些內(nèi)容,含義是?

            大概意思就是使用管道“\\.\pipe\com_1”來(lái)進(jìn)行內(nèi)核調(diào)試。各個(gè)參數(shù)的說(shuō)明在WinDbg的參考文檔里面有,這里粘貼一下:

            -b

            (Kernel mode only) This option has two effects:

            1. The debugger will break into the target computer immediately upon connection.

            2. After a reboot, the debugger will break into the target computer once the kernel is initialized. See Crashing and Rebooting the Target Computer for details and for other methods of changing this status.

            -k [ConnectType]

            (Kernel mode only) Starts a kernel debugging session. For details, see Choosing Kernel Debugging Settings. If -k is used without any ConnectType options following it, it must be the final entry on the command line.

            resets=0

            Specifies that an unlimited number of reset packets can be sent to the target when the host and target are synchronizing. Use the resets=0 parameter for Microsoft Virtual PC and other virtual machines whose pipes drop excess bytes. Do not use this parameter for VMware or other virtual machines whose pipes do not drop all excess bytes.

            7.一定要這樣創(chuàng)建一個(gè)WinDbg的快捷方式才能進(jìn)行調(diào)試嗎?

            不是的,我們完全可以先正常運(yùn)行WinDbg,然后選擇菜單“File”--->“Kernel Debug...”,然后在彈出的對(duì)話框中進(jìn)行設(shè)置,這樣也是可以進(jìn)行調(diào)試的。

            8.上面第8、第9步有先后順序嗎?看到很多資料都很強(qiáng)調(diào)這個(gè)先后順序。

            這個(gè)是沒(méi)有先后順序的。你可以先執(zhí)行第8,再到第9步,或者先執(zhí)行第9,再到第8步都是沒(méi)有關(guān)系的。

            選擇Debug模式后,即使進(jìn)入系統(tǒng)操作了很久,運(yùn)行了很多東西,但只要你運(yùn)行WinDbg,照樣能夠連上去調(diào)試。所以說(shuō)這里是沒(méi)有先后順序的。

             

             

             

            下面介紹第二部分,驅(qū)動(dòng)調(diào)試

             

            二、驅(qū)動(dòng)調(diào)試

                   編寫完驅(qū)動(dòng)后,我們當(dāng)然要進(jìn)行調(diào)試(除非你是蓄意想讓用戶不斷藍(lán)屏,當(dāng)然牛人除外),這不可能在HostOS(本機(jī))里調(diào)試,否則BOSD就麻煩了,而且支持本機(jī)調(diào)試的調(diào)試器比較流行的只有softice,這個(gè)東西早就停止更新了,而且對(duì)目前的操作系統(tǒng)的支持更是非常不好。所以使用WinDbgVMware調(diào)試驅(qū)動(dòng)程序絕對(duì)是我們最佳的選擇。

                   在這里,我就以微軟自帶的Passthru(其實(shí)什么驅(qū)動(dòng)都是一樣的)為例。

            好了,開(kāi)始。

            1. 按照之前的說(shuō)明搭好調(diào)試環(huán)境后,先用WinDbg連上VMware,如果GuestOS阻塞了,則在WinDBG輸入命令“g”,然后回車,直到讓GuestOS跑起來(lái)。我們把編譯好的驅(qū)動(dòng)文件(*.sys)放到GuestOS里,回到WinDbg,按“Ctrl+Break”WinDbg會(huì)讓GuestOS暫停下來(lái),我們也可以在WinDbg的命令欄輸入命令了,在這里輸入“bu drivername!driverentry”(本例是bu passthru!driverentry,大小寫不限)可以在驅(qū)動(dòng)的DriverEntry函數(shù)的入口點(diǎn)下一個(gè)延遲斷點(diǎn),其實(shí)BU的意思就是Set Unresolved BreakpointWinDbg會(huì)記住這個(gè)斷點(diǎn),當(dāng)這個(gè)驅(qū)動(dòng)被加載了并且執(zhí)行到這個(gè)地方,WinDbg會(huì)暫停GuestOS讓你進(jìn)行調(diào)試操作。drivername是你的驅(qū)動(dòng)名字,比如我在這里的驅(qū)動(dòng)名字是passthru,那我在這里輸入的命令如下:bu passthru!driverentry

            2. 回車后即下好斷點(diǎn)了。現(xiàn)在打開(kāi)源文件,源文件在HostOS呢。“Ctrl+O”找到驅(qū)動(dòng)的源文件打開(kāi),我們打開(kāi)passthru.c。

            3. 還要設(shè)置符號(hào)路徑。“Ctrl+S”打開(kāi)設(shè)置窗體,符號(hào)路徑一般有兩個(gè)(可以有多個(gè)),一個(gè)是你設(shè)置保存系統(tǒng)符號(hào)文件的路徑,另一個(gè)是你驅(qū)動(dòng)的PDB的路徑,以分號(hào)隔開(kāi)。如下:

            C:\Windows\Symbols\;E:\Passthru\driver\objchk_wxp_x86\i386

            4. 記得勾選“Reload”,OK后稍等片刻,等WinDbg把這些東西加載完畢后再操作。加載完后我們輸入“g”,回車,讓GuestOS跑起來(lái)。在GuestOS里運(yùn)行驅(qū)動(dòng)加載/卸載工具把我們的驅(qū)動(dòng)加載起來(lái)??梢钥吹?,已經(jīng)斷下來(lái)了,我們可以源碼調(diào)試驅(qū)動(dòng)了。

             

            注:打開(kāi)源文件和設(shè)置符號(hào)路徑可以在一開(kāi)始的時(shí)候就做,這是沒(méi)有嚴(yán)格先后順序的。

             

             

            posted on 2009-01-04 16:36 閱讀(5820) 評(píng)論(4)  編輯 收藏 引用 所屬分類: windows驅(qū)動(dòng)

            FeedBack:
            # re: 使用WinDbg和VMware調(diào)試NDIS中間層驅(qū)動(dòng)程序
            2009-01-12 11:42 | daisy
            好久沒(méi)有觀注,支持一下。。。  回復(fù)  更多評(píng)論
              
            # re: 使用WinDbg和VMware調(diào)試NDIS中間層驅(qū)動(dòng)程序
            2009-01-12 15:34 |
            @daisy
            ...  回復(fù)  更多評(píng)論
              
            # re: 使用WinDbg和VMware調(diào)試NDIS中間層驅(qū)動(dòng)程序
            2009-01-15 18:57 | tangxinfa
            謝謝,真是好文章啊,我現(xiàn)在也可以單步調(diào)試驅(qū)動(dòng)了。  回復(fù)  更多評(píng)論
              
            # re: 使用WinDbg和VMware調(diào)試NDIS中間層驅(qū)動(dòng)程序
            2009-03-13 16:06 | zhang
            .load ndiskd可以加載ndis模塊。
            通過(guò)!miniports可以查看所有微端口的信息。
            通過(guò)!miniport "微端口地址" 可以查看某個(gè)微端口的信息。  回復(fù)  更多評(píng)論
              

            <2009年1月>
            28293031123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(17)

            隨筆分類(138)

            隨筆檔案(137)

            網(wǎng)絡(luò)開(kāi)發(fā)

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 499009
            • 排名 - 36

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            亚洲av伊人久久综合密臀性色| 久久精品成人国产午夜| 免费一级欧美大片久久网| 久久久久亚洲?V成人无码| 波多野结衣久久精品| 亚洲国产精品无码成人片久久| 国产精品久久久久久久久免费| 伊人色综合久久| 久久福利资源国产精品999| 国产精品青草久久久久婷婷| 久久婷婷人人澡人人| 久久天天躁狠狠躁夜夜96流白浆| 久久九九青青国产精品| 久久精品人人做人人爽电影| 久久夜色tv网站| 亚洲AV无码久久精品蜜桃| 久久午夜综合久久| 久久99毛片免费观看不卡| 精品国产乱码久久久久久呢| 日韩欧美亚洲综合久久影院d3| 99精品国产综合久久久久五月天| 国产精品gz久久久| 国产精品久久久久久一区二区三区| 亚洲国产精品一区二区三区久久| 嫩草影院久久国产精品| 久久人人爽人人爽人人AV东京热| 亚洲午夜福利精品久久| 久久国产精品波多野结衣AV| 国产精品久久久久…| 精品久久久噜噜噜久久久| 伊人久久大香线焦AV综合影院 | 国产精品中文久久久久久久| 91精品国产91久久久久久蜜臀| 无码AV波多野结衣久久| 青青草原综合久久大伊人| 久久久高清免费视频| 色婷婷噜噜久久国产精品12p| 久久天天躁狠狠躁夜夜av浪潮| 久久免费99精品国产自在现线| 久久成人18免费网站| 亚洲色欲久久久久综合网|