• <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>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

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

            本文參考了以下的 blog 及文章,在此對作者的辛勤勞動表示感謝!

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

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

            ?

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

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

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

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

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

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

            ?

            下面是詳細的步驟:

            1. 下載 VMware 并安裝好

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

            3. 下載 WinDbg 并安裝,也是默認即可

            4. 接下來在虛擬機 VMware 里安裝操作系統(tǒng)( XP ),安裝好后啟動進入 GuestOS 修改 boot.ini 文件(找不到?在 C 盤根目錄下,要設(shè)置系統(tǒng)文件可顯示,如何設(shè)置就不說了,自己 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 過去

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

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

            ?

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

            7. 為使用方便,我們在桌面新建一快捷方式(桌面右鍵 - 新建 - 快捷方式),快捷方式的命令行為

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

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

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

            名稱我設(shè)置為 WinDbg

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

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

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

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

            附加說明:

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

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

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

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

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

            3. 我可以在 GuestOS boot.ini 文件更改那個 COM 口嗎?比如把 COM1 改為 COM2

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

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

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

            5. 在更改 GuestOS boot.ini 文件的時候,增加有 “/debugport=com1 /baudrate=115200” 這些內(nèi)容,含義是?

            使用的調(diào)試端口是 com1 ,波特率是 115200 。這是在告訴 GuestOS 現(xiàn)在要調(diào)試內(nèi)核 ( 操作系統(tǒng)),把調(diào)試信息往 COM1 口輸出,使用的波特率是 115200
            我在試驗的時候發(fā)現(xiàn),這個波特率其實也不一定要設(shè)為 115200 ,完全可以修改為 112233 445566 等等其他數(shù)據(jù)。可能是因為 WinDBG 自動調(diào)節(jié)波特率來適配管道或 COM 口,所以波特率在這里沒有實際意義。

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

            大概意思就是使用管道 “\\.\pipe\com_1” 來進行內(nèi)核調(diào)試。各個參數(shù)的說明在 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)建一個 WinDbg 的快捷方式才能進行調(diào)試嗎?

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

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

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

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

            ?

            ?

            ?

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

            ?

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

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

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

            好了,開始。

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

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

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

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

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

            ?

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

            久久亚洲精品成人无码网站| 久久青青国产| 亚洲AV无码久久精品成人| 久久久久无码精品国产| 91精品国产91久久久久久青草| 久久影视综合亚洲| 亚洲精品美女久久久久99| 狠狠色综合久久久久尤物| 久久久久免费看成人影片| 99久久精品国产一区二区| 精品国产日韩久久亚洲| 嫩草影院久久99| 久久99精品国产99久久| 久久综合香蕉国产蜜臀AV| 国产精品久久婷婷六月丁香| 久久777国产线看观看精品| 亚洲国产综合久久天堂| 久久久久国产精品麻豆AR影院| 久久九九全国免费| 亚洲AV成人无码久久精品老人| 国产亚洲精午夜久久久久久| 久久久国产精品亚洲一区| 99久久免费国产精品特黄| 99久久99久久精品国产片果冻| 久久精品夜夜夜夜夜久久| 久久大香萑太香蕉av| 亚洲国产小视频精品久久久三级 | 国产精品日韩欧美久久综合| 狠狠色丁香久久综合婷婷| 久久这里只有精品首页| 婷婷国产天堂久久综合五月| 久久有码中文字幕| 久久婷婷久久一区二区三区| 日本三级久久网| 四虎国产精品免费久久5151| 久久发布国产伦子伦精品| 人妻精品久久久久中文字幕69 | 久久久久久无码Av成人影院| 久久精品国产亚洲AV影院| 久久精品国产网红主播| 久久亚洲美女精品国产精品|