Windows内核符号表学习总结
生活随笔
收集整理的這篇文章主要介紹了
Windows内核符号表学习总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
內核符號表
http://blog.csdn.net/vbsourcecode/article/details/8555796在進行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=DRIV
ERSOURCES=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內核安全編程》一書,結合自己的實際應用進行整理所得
========
關于內核符號表
windows的symbol內核符號表貌似挺多,要下哪一個?求指導貌似是分 32位、64位的。
分系統的。看你的系統是xp,win7。下的不一樣。除此之外還有32位,64位之分。
其實用符號的地方都可以自動從網絡上下的比如windbg配置好就行了。
windows內核符號表的版本該怎么選擇
都說在用雙機調試驅動的時候要下載windows的內核符號表。于是我就去官網看了下發現。都是預覽版的
符號表還有RT版的!有點迷惑了!我用的是企業版!不知道該下載哪個!
========
Windows內核符號表下載
http://blog.csdn.net/taobao755624068/article/details/7751030目錄(?)[-]
Windows內核開發調試環境配置詳解
在進行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中,并與編譯好的驅動的目錄放在一起用分號隔開。
1. 下載和使用WDK
應用程序使用開發包SDK,類似的,內核編程使用"Windows Driver Kit",簡稱WDK。WDK已經自帶所有需
要的頭文件、庫、C/C++語言及匯編語言的編譯器和鏈接器
如何獲取WDK
參見
http://msdn.microsoft.com/zh-cn/windows/hardware/gg487463
安裝注意:
盡量安裝到相對簡單路徑,避免特殊情況配置路徑時麻煩以及可能出現的編譯問題
選擇“完全安裝”
2.編寫第一個內核模塊
=============================
#include <ntddk.h>
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
#endif
DbgPrint("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=first
TARGETTYPE=DRIVER
SOURCES=first.c
===============================
開始->程序->Windows Driver Kits-> WDK XXXX.XXXX ->Build Enviroments ->Windows XP ->Launch?
Windows XP x86 Checked Build Enviroment
編譯即得到first.sys
4. Vmware創建一個新的虛擬機,并安裝WindowsXP SP3系統
步驟在此不再詳述,可搜索相關帖子
記得安裝Vmware tools, 以方便虛擬機內外共享文件
5. 在虛擬機中下載并安裝srvinstw
srvinstw即services installation for windows
搜索下載,參考
http://www.onlinedown.net/soft/36059.htm
a. 將剛剛編譯生成的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. 在調試機(宿主機)安裝WinDbg
WinDbg下載地址參考:
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
8. 設置Windows XP調試執行
顯示所有文件,不隱藏系統保護的文件后
在系統盤下打開并修改boot.ini文件
內容通常為:
============================
[boot loader]
timeout=0
default=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=115200
9. 設置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
#endif
int 3是一句匯編指令,執行到此程序會中斷;若不是調試狀態執行則會直接藍屏
加上宏DBG測試以保證只有調試版本該語句才會被編譯
在虛擬機中運行net start first, 則會看到彈出斷點
此時可以打開Watch窗口觀察和修改變量了
本文是根據譚文《Windows內核安全編程》一書,結合自己的實際應用進行整理所得
========
設置Windows內核符號表
http://book.51cto.com/art/200905/125736.htm現在虛擬機里的操作系統進入了調試模式,那么怎樣調試之前編譯的first呢?實際上,沒有必要告訴
WinDbg需要調試的是first,WinDbg把內核視為一個整體,我們只要告訴它代碼的路徑和符號表的路徑就
可以了。
在調試連接上之后,打開WinDbg的主菜單“File”下的“Symbol File Path”,在這里輸入符號表位置
。符號表和sys產生在同一個目錄下,所以只要指定本機上編譯結果所在的objchk_wxp_x86\i386目錄就
可以了。
如果有多個驅動需要調試,那么可以指定多個路徑,路徑之間用分號分隔。
此外,需要指定Windows的內核符號表。Windows的每一個sys文件都有自己的符號表,這些符號表需要從
網上下載,但是沒有必要自己去下載。可以在Symbol File Path中增加如下一條設置,用分號與其他路
徑隔開:
srv*c:\symbols*http://msdl.microsoft.com/download/symbols
這條設置使WinDbg自動用HTTP協議從微軟的網站上下載所需要的符號表。首次使用會使WinDbg變得極慢
,接近死機,但是沒有關系,實際上,WinDbg正在下載符號表,可以打開c:\symbols查看,這個路徑也
可以指定為其他的位置。
請注意下載并不一定總是成功。如果發現符號表并沒有下載下來,請多試幾次。筆者有時也是多次才成
功。
下載完成后執行就很快了。讀者可以在調試過程中看見微軟提供的所有的函數名,也可以隨時查看調用
棧。
如果調試時總是看不見可懂的函數名,這是符號表設置問題,請正確設置參數并保持網絡暢通。
下面是用WinDbg開始調試虛擬機的情形,如圖1-10所示。
========
總結
以上是生活随笔為你收集整理的Windows内核符号表学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 调试一个C#研究生管理信息系统源码
- 下一篇: 图解修改Windows启动菜单命令行工具