內核符號表

在進行Windows Driver開發調試中,內核符號表是個問題。由於網絡不穩定,利用windbg下載不了,在WDK的documentation中查找到下載然後本地運用的地址,貼上來:http://msdn.microsoft.com/en-us/windows/hardware/gg463028.aspx在裏面選擇所需要調試系統版本的內核符號表,下載即可。附上原有的方法:將 srv*c:\symbols*http://msdl.microsoft.com/download/symbols 添加到windbg的Sysmbol File path中,並與編譯好的驅動的目錄放在一起用分號隔開。 Windows內核開發調試環境配置詳解分類: Windows內核2011-08-31 16:27 360人閱讀 評論(0) 收藏 舉報1. 下載和使用WDK應用程序使用開發包SDK,類似的,內核編程使用"Windows Driver Kit",簡稱WDK。WDK已經自帶所有需要的頭文件、庫、C/C++語言及彙編語言的編譯器和鏈接器如何獲取WDK參見http://msdn.microsoft.com/zh-cn/windows/hardware/gg487463安裝注意:儘量安裝到相對簡單路徑,避免特殊情況配置路徑時麻煩以及可能出現的編譯問題選擇“完全安裝”2.編寫第一個內核模塊=============================#include VOID DriverUnload(PDRIVER_OBJECT driver){ DbgPrint("first: Our driver is unloading...\r\n");}NTSTATUS DriverEntry (PDRIVER_OBJECT driver, PUNICODE_STRING reg_path){#if DBG _asm int 3#endifDbgPrint("first: Hello Windows kernel!!");driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;}==============================以上是一個最簡單的示例程序DriverEntry是每個內核模塊的入口,在加載這個模塊時被系統進程System調用一次。3.編譯該內核模塊在first.c相同工程目錄下增加兩個文件:makefile和sources內容分別爲:makefile==============================############################################################################### Copyright (C) Microsoft Corporation 1995# All Rights Reserved.# # MAKEFILE for WDM device driver kit################################################################################ DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source# file to this component. This file merely indirects to the real make file# that is shared by all the driver components of the Windows NT DDK#!if "$(WIN2K_DDKBUILD)" == ""!INCLUDE $(NTMAKEENV)\makefile.def!endif===============================sources===============================# ##############################################################Copyright (c) 2000 Microsoft Corporation##Date:# 19-Jul-2000##Module Name:# sources.##Abstract:# This file specifies the target component being built and the list of# sources files needed to build that component. Also specifies optional# compiler switches and libraries that are unique for the component being# built.## This directory builds# WIA Sample Camera Driver## ############################################################TARGETNAME=firstTARGETTYPE=DRIVERSOURCES=first.c===============================開始->程序->Windows Driver Kits-> WDK XXXX.XXXX ->Build Enviroments ->Windows XP ->Launch Windows XP x86 Checked Build Enviroment編譯即得到first.sys4. Vmware創建一個新的虛擬機,並安裝WindowsXP SP3系統步驟在此不再詳述,可搜索相關帖子記得安裝Vmware tools, 以方便虛擬機內外共享文件5. 在虛擬機中下載並安裝srvinstwsrvinstw即services installation for windows搜索下載,參考http://www.onlinedown.net/soft/36059.htma. 將剛剛編譯生成的first.sys拖入虛擬機b. 安裝服務->本地計算機->輸入不與已存在服務重名的服務名c. 手動輸入sys文件的路徑d. 選擇“設備驅動”e. 選擇啓動類型爲手動6. 運行與查看輸出信息至此內核模塊已經可以運行了,可以通過net start first / net stop first來啓動和停止該服務內核模塊的輸出可以在WinDbg中查看;也可以直接用DbgView.exe來查看輸出去微軟的網站上下載DebugView.exe,參考地址http://technet.microsoft.com/zh-cn/sysinternals/bb896647(en-us).aspx DebugView需要在Capture菜單中將Capture Kernel勾上再次啓動/停止服務,就可以在DbgView中看到輸出了7. 在調試機(宿主機)安裝WinDbgWinDbg下載地址參考:http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx8. 設置Windows XP調試執行顯示所有文件,不隱藏系統保護的文件後在系統盤下打開並修改boot.ini文件內容通常爲:============================[boot loader]timeout=0default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect============================最後一行復制一下,並加上新的參數使之以調試方法啓動multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=1152009. 設置VMWare的管道虛擬串口調試機應與被調試機以串口相連,若被調試機是虛擬機,可以在虛擬機上生成一個用管道虛擬的串口打開虛擬機,不要啓動->左邊Commands欄->Edit virtual machine settings->Hardware->Add在Add Hardware Wizard中,類型選擇"Serial Port"選擇"Output to named pipe"接下來分別選擇"\\.\pipe\com_1"和"This end is the server"以及"The other end is an application."完成即可10. WinDbg的啓動參數在調試機上加上如下參數啓動WinDbg,使之連接一個管道,並把這個管道當作一個串口來處理windbg.exe -b -k com:port=\\.=pipe\com_1,baud=115200,pipe在控制檯執行此命令或者在windbg.exe的快捷方式屬性中“目標”中增加上述啓動參數先打開虛擬機,啓動到調試模式下的Windows,然後啓動WinDbg,顯示已連接上的信息就表示成功了剛連接上時虛擬機裏的系統會被中斷,這時要在WinDbg的命令提示符“kd>”後輸入“g”並回車11. 設置Windows的內核符號表WindDbg把內核視爲一個整體,只要告訴它代碼的路徑和符號表的路徑就可以了調試連接上之後,File->Symbol File Path, 輸入符號表位置,指定編譯結果所在的objchk_wxp_x86\i386即可還需要指定Windows的內核符號表,在上文的符號表路徑中增加一條路徑,與之前的用分號隔開:srv*c:\symbols*http://msdl.microsoft.com/download/symbols可打開C:\symbols查看是否將符號表下下來;若沒有,多Reload幾次12. 調試first源碼中#if DBG _asm int 3#endifint 3是一句彙編指令,執行到此程序會中斷;若不是調試狀態執行則會直接藍屏加上宏DBG測試以保證只有調試版本該語句纔會被編譯在虛擬機中運行net start first, 則會看到彈出斷點此時可以打開Watch窗口觀察和修改變量了本文是根據譚文《Windows內核安全編程》一書,結合自己的實際應用進行整理所得
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章