.create notepad.exe
g运行
lm显示模块
本地内核调试无法查看驱动打印的调试信息:!dbgprint
bp `mod!source.c:12` set breakpoint at specified source code
bu myModule!func bp set as soon as myModule is loaded
bp @@( MyClass::MyMethod ) break on methods (useful if the same method is overloaded and thus present on several addresses)
设好符号路径源码路径和断点,则会自动停止在相应位置。
Windbg下!object \device命令查看device对象。
查看所有驱动和设备名
lm
!object \ 查看根目录
!object \device 查看所有设备名
dt _DEVICE_OBJECT XXXX 查看设备对象内容
!devobj XXXX 查看设备对象内容
!object \Driver 查看所有驱动名
dt _DRIVER_OBJECT XXXX 查看驱动对象内容
!drvobj XXXX 查看设备对象内容
!devnode 显示PnpManger 创建的第一个PDO
!devnode XXXX 显示设备对象
>dt _eprocess
>dt _kprocess
>!process
>!process 0 0
>!peb pebAddr
>dt -h
>!vm
>!poolused
>!vm 1
>!wdfkd.wdfdriverinfo echo
>!analyze -v
!locks查看锁,一般调试死锁的情况下使用
~*kb显示所有调用堆栈
kb显示当前调用堆栈
dv显示局部变量
dt显示数据结构
dd察看堆内容
!address显示某一地址上的页信息
u显示汇编代码
uf反汇编代码
.exr打印出异常的信息
.cxr切换上下文
x查找某一符号的地址
dds把某一地址对应到符号(于x的用法相反)
d系列命令主要是查看内存
r系列查看寄存器
b系列和断点有关系
u系列就是反汇编
x可以看函数的原型
重新设置符号路径:
SRV*E:\WinSymbols*\MySymbols;
本地进程调试:你可以在Windbg下直接运行一个程序:
Windbg “path to executable” arguments
也可以将Windbg附加到一个正在运行的程序:
Windbg –p “process id”
Windbg –pn “process name”
注意有一种非侵入(Noninvasive)模式可以用来检查一个进程的状态并不进程的执行。当然在这种模式下无法控制被调试程序的执行。这种模式也可以用于查看一个已经在Debugger控制下运行的进程。具体命令如下:
Windbg –pv –p “process id”
Windbg –pv –pn “process name”
tcp:server=Server,port=Socket[,password=Password][,ipversion=6]
tcp:clicon=Server,port=Socket[,password=Password][,ipversion=6]
server: cdb -server tcp:port=1025 -p 122
client: windbg -remote tcp:server=BOX17,port=1025
bp `mod!source.c:12` set breakpoint at specified source code
bu myModule!func bp set as soon as myModule is loaded
将Windbg附加到一个正在运行的程序:
Windbg –p “process id”
你可以要求你的用户将Windbg附加到出现问题的进程上,然后在命令窗口中输入:
.dump /ma File Name
创建一个Dump文件。在得到Dump文件后,使用如下的命令来打开它:
windbg –z DUMP_FILE_NAME
server:
1. file -> attach pid
2. .server tcp:port=12345 or npipe:pipe=advdbg
client:
file -> remote session
tcp:server=SERNAME,port=12345 or npipe:server=SERNAME,pipe=advdbg
0:000> .server npipe:pipe=rabbit
0:000> .server tcp:port=7
0:000> .server npipe:pipe=tiger,password=hardtoguess
0:000> .servers
0:000> .endsrv 0
0:000> .clients
.server tcp:port=10456,server=ServerName
服务端192.168.0.111
dbgsrv -t tcp:port=12345
客户端
windbg -premote tcp:server=192.168.0.111,port=12345 -p 352
D:\WinDDK\7600.16385.0\Debuggers
1. 设置windbg的符号方式srv*d:\symbols*
2. 如何设置windbg的远程调试模式。
远程调试最好的是dbgsvr模式,即符号可以位于调试机的模式
1) 在目标机器上C:\Program Files\Debugging Tools for Windows>dbgsrv.exe -t tcp:port=1234,password=spat
2) 在你的机器上 windbg.exe -premote tcp:server=192.168.1.102,port=1234,password=spat -p 596 //where 596 = PID of target
3) 最后只要设置你自己的符号即可
bcdedit /debug ON
lkd> !drvobj serial
lkd> !pci
lkd> !pci 1 1
lkd> !pci 100 1 9 0
lkd> !pcitree
lkd> !dma
lkd> !drvobj serial
lkd> !devobj 876df6a0
lkd> dt _DEVICE_OBJECT 8737fce8
lkd> dt _DEVICE_OBJECT DeviceExtension 8737fce8
lkd> dt _DEVICE_CONTEXT 8743d1d8
lkd> dt _DEVICE_CONTEXT -a CSRAddress 8743d1d8
lkd> !process 0 0
lkd> dt _PEB 7ffd6000
lkd> .process 8822cd40
Implicit process is now 8822cd40
lkd> .context
User-mode page directory base is 7ee153c0
lkd> !cpuinfo
lkd> x MyModule!*Context
lkd> x MyModule!*device*
lkd> s -a 84b00970 L10 "hello"
!pte VirtualAddress
!pte PTE
!pte LiteralAddress 1
!pte StartAddress EndAddress
!vtop PFN VirtualAddress
阅读(2515) | 评论(0) | 转发(0) |