【转】学习WinDbg - (1)查看内核数据结构

学习WinDbg - (1)查看内核数据结构2007-05-03 09:14

学习WinDbg - (1)查看内核数据结构
darkbasic 2007.05.03

首先进入本地内核调试,菜单“File” -- “Kernel Debug..”,选“Local”项,确定。

然后要设定好符号文件,WinDbg就是通过符号文件才能显出内核数据结构。
对于查看内核数据结构,我们只要设定好ntoskrnl.exe的符号文件就可以了。
  
//设定符号文件路径到本地及微软服务器:
lkd> .sympath SRV*E: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:Symbolsntkrnlpa.pdbF612363DB38C423CB08559DDBCA9F2F71ntkrnlpa.pdb
     Load Report: public symbols , not source indexed
                  H:Symbolsntkrnlpa.pdbF612363DB38C423CB08559DDBCA9F2F71ntkrnlpa.pdb

可以看到,ntoskrnl的符号文件已经成功加载了,现在就可以用dt (Display Type)命令来查看内核数据结构了。

//列出所有的内核数据结构的名称:
lkd>x 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

加载DUMP文件后可以使用

!analyze -v

进行dump文件分析


Shadow

NtUserFindWindowEx                       -->屏蔽FindWindowA/W, FindWindowEx
NtUserBuildHwndList                        -->屏蔽EnumWindow,GetWindowTextA/W
NtUserGetForegroundWindow        -->屏蔽GetForegroundWindow        
NtUserInternalGetWindowText          -->屏蔽InternalGetWindowText


【转】VM+Windbg配置实现kernel调试

1.       安装 windbg

2.       配置 windbg

a)         File à symbol file path… (ctrl +s)

b)        输入SRV*c:windowssymbols*http://msdl.microsoft.com/download/symbols

c)        桌面新建快捷方式,地址为
"D:Program FilesDebugging Tools for Windowswindbg.exe" -b -k com:pipe,port=\.pipecom_1,resets=0
这里是我的安装地址,你自己修改。

3.       配置 VMware

a)         将vm中的系统关机

b)        打开congfiguration editor

c)        添加硬件

d)        选择 serial port

e)         选择 use named pipe, 改为 \.pipecom_1

f)         选择this end is the server

g)        选择 the other end is an application

h)        点 advanced 选择 Yield on CPU poll

i)          完成

4.       配置VMware中系统

a)         开机

b)        将c盘中的BOOT.ini 文件的只读属性去掉后改写

c)        复制一个新的启动项,如下

d)       

[boot loader]
timeout=30
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" /fastdetect
multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional - DEBUG" /fastdetect /debugport=com1 /baudrate=115200

e)         新建的项后面添加/debugport=com1 /baudrate=115200,确保他们和你新建的项位于同一行

f)         重启

5.       打开系统进入调试态

a)         选择debug系统,等待系统暂停

6.       打开windbg