首先进入本地内核调试,菜单“File” -- “Kernel Debug..”,选“Local”项,确定。
然后要设定好符号文件,WinDbg就是通过符号文件才能显出内核数据结构。
对于查看内核数据结构,我们只要设定好ntoskrnl.exe的符号文件就可以了。
//设定符号文件路径到本地及微软服务器:
lkd> .sympath SRV*H:/Symbols*http://msdl.microsoft.com/download/symbols
//下载ntoskrnl.exe的符号文件:
lkd> .reload /f nt
WinDbg将会从微软的符号文件服务器去下载ntoskrnl.exe的符号文件到本地。
//查看详细的模块信息:
lkd> !lmi nt
Loaded Module Info: [nt]
Module: ntkrnlpa
Base Address: 804d8000
Image Name: ntkrnlpa.exe
Machine Type: 332 (I386)
Time Stamp: 45e53f9c Wed Feb 28 16:38:52 2007
Size: 1f6400
CheckSum: 1facf5
Characteristics: 12e
Debug Data Dirs: Type Size VA Pointer
CODEVIEW 25, 9540, 9540 RSDS - GUID: {F612363D-B38C-423C-B085-59DDBCA9F2F7}
Age: 1, Pdb: ntkrnlpa.pdb
Image Type: MEMORY - Image read successfully from loaded memory.
Symbol Type: PDB - Symbols loaded successfully from symbol server.
H:/Symbols/ntkrnlpa.pdb/F612363DB38C423CB08559DDBCA9F2F71/ntkrnlpa.pdb
Load Report: public symbols , not source indexed
H:/Symbols/ntkrnlpa.pdb/F612363DB38C423CB08559DDBCA9F2F71/ntkrnlpa.pdb
可以看到,ntoskrnl的符号文件已经成功加载了,现在就可以用dt (Display Type)命令来查看内核数据结构了。
//列出所有的内核数据结构的名称:
lkd> dt nt!_*
nt!_LIST_ENTRY
nt!_LIST_ENTRY
nt!_IMAGE_NT_HEADERS
nt!_IMAGE_FILE_HEADER
nt!_IMAGE_OPTIONAL_HEADER
nt!_IMAGE_NT_HEADERS
nt!_LARGE_INTEGER
//列出DRIVER_OBJECT的结构
lkd> dt nt!_DRIVER_OBJECT
+0x000 Type : Int2B
+0x002 Size : Int2B
+0x004 DeviceObject : Ptr32 _DEVICE_OBJECT
+0x008 Flags : Uint4B
+0x00c DriverStart : Ptr32 Void
+0x010 DriverSize : Uint4B
+0x014 DriverSection : Ptr32 Void
+0x018 DriverExtension : Ptr32 _DRIVER_EXTENSION
+0x01c DriverName : _UNICODE_STRING
+0x024 HardwareDatabase : Ptr32 _UNICODE_STRING
+0x028 FastIoDispatch : Ptr32 _FAST_IO_DISPATCH
+0x02c DriverInit : Ptr32
+0x030 DriverStartIo : Ptr32
+0x034 DriverUnload : Ptr32
+0x038 MajorFunction : [28] Ptr32
//清屏
.cls