標籤:ar 使用 sp strong on 代碼 bs as 管理
核心調試入門
核心程式運行在核心態,因此不能像對使用者態應用程式那樣來調試。關於核心調試方面的知識請參考《軟體調試》這本書。目前核心調試主要有以下三種方法。
一是使用硬體調試器,它通過特定的介面(如 JTAG)與 CPU 建立串連並讀取它的狀態,例如 ITP 調試器。
二是在核心中插入專門用於調試的中斷處理函數和驅動程式。當作業系統核心被中斷時,這些中斷處理函數和驅動程式接管系統的硬體,營造一個可以供調試器啟動並執行簡單環境,並用自己的驅動程式來處理使用者輸入、輸出,例如 SoftICE 和 Syser 等調試器。
三是在系統核心中加入調試支援,當需要中斷到調試器中時,只保留這部分支援調試的代碼還在運行,因為正常的核心服務都已經停止,所以調試器程式是不可能運行在同一個系統中的,因此這種方法需要調試器運行在另一個系統中,二者通過通訊電纜交流資訊。
Windows作業系統推薦的核心調試方式是第三種,這種方法需要在被調試系統和調試系統之間建立串連,迄今為止共有三種串連方式:串列口、1394 和 USB2.0。
起初,核心調試大多通過雙機調試進行。隨著虛擬機器技術的廣泛使用,雙機調試逐漸被虛擬機器調試所取代。本節介紹一種非常方便的虛擬機器核心調試方法—— "利用具名管道(Named Pipe)類比序列埠"。具體地說,就是在虛擬機器中虛擬一個序列埠,並且把這個串口映射到宿主機的具名管道上。這樣一來,虛擬機器中所有對該串口的讀寫操作都會被虛擬機器管理軟體轉換為對宿主系統中的具名管道的讀寫,運行在宿主系統中的調試器便可以通過這個具名管道來與虛擬機器中的核心偵錯引擎進行通訊。
這種虛擬機器調試核心的方法實現了單機調試,其優點是簡單方便,但也存在一些缺點,一是難以調試硬體相關的驅動程式;二是當對某些涉及底層操作(中斷、異常或者 I/O)的函數或指令設定斷點時,可能導致虛擬機器意外重啟;三是當將目標系統中斷到調試器中時,目前的虛擬機器管理軟體會佔用非常高的 CPU,超過 90%。不過總的來說,這種調試方法足以調試目前公布的核心漏洞了。
下面我們來介紹一下,如何使用 WinDbg 和 VMware 來實現這種方法的調試。VMware Support 中提到,自 4.0.18.0 版本之後的 WinDbg 都支援了通過 pipe 來進行調試。
OD: Windows Kernel Debug