最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

2013年9月19日 星期四

用Windbg建置Debug環境

Windbg是微軟一個好用的Debug工具,它可以用在User mode與kernel mode進行Debug,最常見用它來找出Windows發生藍屏的時候。
Debug Windows Kernel 可以是Local (同一台機器上debug) 或 Remote (兩台 Windows的機器上debug),不過還是 Remote 的方式有比較大的功能和彈性,Remote Debug需要透過以下類型的連結線進行連結。
  1. Network Cable:Windows 8 以及 Windows Server 2012限定。
  2. 1394:現在的機器以比較少見到1394 Port,尤其是NB幾乎見不到了,要Windows XP以上才有支援。
  3. USB 3.0:Windows 8限定。
  4. USB 2.0:Windows Vista以上才有支援。
  5. NULL-Modem cable:就是 Serial Port,一般電腦的COM port或稱RS232。
至於Local Debug只需要有Virtual Machine相關的軟體即可進行Debug,常用軟體VMware。

要使用USB線將兩台電腦連結進行Debug要特別注意,USB線有分USB 2.0與USB 3.0專用的連結線,關於USB 2.0的連結線更是特別,不是隨便拿一條USB線就可以,要用專屬的USB 2.0 Debug Device將2條USB 2.0連結起來才能使用,不過這一個裝置價值不斐,小小一顆要賣新台幣4800元整,而且不是馬上以現貨可以買,經過與廠商詢問一般都是先預訂,月底會從美國進口才能拿到。
由於這是屬於比較特殊的東西,而且網路上尋找都只有國外的某家公司才有,所以也不經令人懷疑是.....(這部份留給你們自己去想像)。

USB 3.0的連結線目前只有Windows 8才有的支援,USB3.0的連結線就不像USB 2.0那樣這麼貴了,網路上目前訪價約新台幣300元整左右,而且只要1條線就可以了(差很多吧)。

以下就來介紹使用USB 2.0與Windbg來建置Debug的環境流程。

[Host設定]
系統環境:Windows 7
  • 下載USB 2.0 Debug Cable要用的Driver(usb2dbg.sys)
  • 下載與設定Windbg參數
    1. 開啟Windbg

    2. 點選「File」→「Kernel Debug…」或鍵盤快速鍵Ctrl + K,設定Kernel Debug。

      設定USB連結字串"debug"。

      以上的設定方式也可以使用Command Line的方式直接開啟WinDbg。
      "C:\Program Files\Windows Kits\8.0\Debuggers\x86\windbg.exe" -k usb:targetname=debug
      
      相關語法可參考微軟官網 WinDbg Command-Line Options

    3. 配置 Microsoft的symbol server path,這是個很重的步驟,如果沒有Symbol file,在Debug時,我們只能面對一堆看不懂得的二進位碼,當然也可以致微軟官網下載相對應的PDB檔,下載 Windows Symbol Files
    4. 點選「File」→「Symbol File Path...」或鍵盤快速鍵Ctrl + S,設定Symbol File Path。

      輸入以下的資訊
      SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols


[Target為Winpe的相關設定]
系統環境:Winpe 3.0
  • BCD設定
  • 引用前面介紹過的BCDedit文章 製作Winpe x86與x64二合一的開機選單 (1)製作Winpe x86與x64二合一的開機選單 (2)製作Winpe x86與x64二合一的開機選單 (3),來做我們所需的Debug BCD。
    1. 將Debug功能開啟。
    2. bcdedit /debug on
    3. 設定USB 連結String。
    4. bcdedit /dbgsettings usb targetname:XXXXX
    5. 設定USB Controller號碼。
    6. bcdedit /set {dbgsettings} busparams xx.xx.xx
    這裡的 xx.xx.xx 是系統上PCI的裝置號碼bus ##.device ##.function ##,可用RW自行查看

    補充說明:
    在Windows 7與Windows Vista上的BCD設定xx.xx.xx有不一樣的定義,Windows 7要使用十進制設定,Windows Vista則用十六進制設定。
          Windows 7:
    bcdedit /set {dbgsettings} busparams 0.29.7
          Windows Vista:
    bcdedit /set {dbgsettings} busparams 0.1D.7

    至於要怎嚜知道目前連結的裝置號碼呢?只需透過Windows的裝置管理員查看即可。
    未安裝USB 2.0 Debug Cable Driver顯示在裝置管理員的內容為Ajays USB 2.0 Debug Cable

    查看Ajays USB 2.0 Debug Cable裝置內關於"位置路徑"的說明。

    PCIROOT(0)#PCI(1D00)#USBROOT(0)#USB(1)#USB(2)
    PCIROOT(0):表示Bus的編號,即Bus 00。
    PCI(1D00):表示Device、Fumction的編號,即Ddevice 1D、Fumction 00。
    USBROOT(0):表示USB ROOT Hub編號。
    USB(1):表示USB的PORT編號。
    USB(2):表示USB的PORT編號。
    從USB View可看出Ajays USB 2.0 Debug Cable所存在的位置。

  • 撰寫成我們所需要的Batch file來設定Winpe BCD.ini,如下
  • REM 路徑可行修改
    set usbbcd=e:\boot\bcd
    
    bcdedit /store %usbbcd% /set {bootmgr} bootdebug on
    
    bcdedit /store %usbbcd% /set {default} inherit {dbgsettings}
    bcdedit /store %usbbcd% /set {fce13fa0-dc05-11e2-ad8f-005056c00008} inherit {dbgsettings}
    bcdedit /store %usbbcd% /set {feadc8ff-dc05-11e2-ad8f-005056c00008} inherit {dbgsettings}
    
    REM Debug功能開啟
    bcdedit /store %usbbcd% /set {default} debug on
    bcdedit /store %usbbcd% /set {fce13fa0-dc05-11e2-ad8f-005056c00008} debug on
    bcdedit /store %usbbcd% /set {feadc8ff-dc05-11e2-ad8f-005056c00008} debug on
    
    REM USB 連結String設定,此設定為USB連結必要項
    bcdedit /store %usbbcd% /dbgsettings usb targetname:debug
    
    REM 針對USB在PCI bus上的設定,此項設定為可選用,即如果沒此設定也可連結
    bcdedit /store %usbbcd% /set {dbgsettings} busparams 0.29.0
    
    REM 列出目前BCD的顯示
    bcdedit /store %usbbcd% /enum all
    
    如果有再BCD上要刪除以添加的項目可使用以下的語法
    REM 刪除加入BCD項目的數值
    bcdedit /store %usbbcd% /deletevalue {dbgsettings} loadoptions
    
[Target為Windows7的相關設定]
系統環境:Windows 7
系統設定
快速鍵Win + R執行 msconfig指令,開啟系統設定視窗。

選擇「開機」分頁的「進階選項」。
  1. 勾選:偵錯
  2. 偵錯連接埠選:USB
  3. USB目標名稱:debug

按確定、套用至重開機,即可使用USB Debug。
以上的設定等同於使用BCDedit的設定,有興趣的可參考上面介紹的[Target為Winpe的相關設定]中的BCD設定。

[執行]
完成上面Host端與Target端的設定後,開始測試我們上面的設定是否一切正常。
  1. 將兩台電腦用USB2.0 Debug Cable連結。
  2. 執行WinDbg Ctrl + K。
  3. Target開機進Winpe。
WinDbg等待Target機器反應。

WinDbg成功執行畫面。

確定成功執行後,鍵盤按Ctrl + Braek或Ctrl + C,即可在WinDbg上輸入指令,此時Target機器的鍵盤與滑鼠將無法操作。

如果要回覆Target機器狀態,再在WinDbg輸入 "g" 按Enter。


資料來源:
Microsoft Windows USB Core Team Blog --- Setting Up Kernel Debugging with USB 2.0

沒有留言:

張貼留言