windbg命令索引

分类 命令 描述 示例($$后为注释)
帮助 ? 显示所有标准命令 ?
.help 显示所有元命令 .help
.help /D      $$ 显示带有DML导航链接的帮助
.help /D r*
.hh 打开帮助文件 .hh .reload
!help 显示扩展命令 eg1:    !ext.help
eg2:    !help dumpheap
.chain 显示加载的插件 .chain /D
!error 显示错误码含义 eg1:    !error c0000034
eg2:    !error 6
eg3:    !error 80004005h
version 显示版本信息 version
表达式 ? 评估宏汇编表达式 ? a27-65e
?? 评估C++表达式 ??(unsigned int) -1073741819
??&(this->m_Buttonl)
; 命令分隔符 r;kv;gc
$$ 注释符号
poi 取地址内容 dd poi(@ebp+8)
.expr 显示或改变表达式类型 .ex[r /s c++
n 设置数制 n 10
.formats 以多种格式显示 .formats 80000001
调试会话 .create 创建新的进程并调试 .create notepad.exe
.attach 附加到指定进程 .attach 2568    $$2568是进程ID
.restart 让调式目标重新运行(用户态) .restart
.restart  /F
.reboot 重启目标系统(内核态) .reboot
.crash 强制目标系统崩溃(内核态) .crash
.detach 分离调试目标 .detach
q 终止调试 q
模块和符号 .symfix 设置符号服务器 .symfix c:\symbols
.reload 刷新模块和符号 eg1:    .reload
           .reload /f ntfs.sys
eg2:    .reload /user
ld 加载符号文件 ld kernel32
.sympath 显示或设置符号路径 .sympath
.sympath+d:\work\debug
!sym 设置符号选项 !sym noisy
!sym quiet
.symopt 设置符号选项 .symopt + 40     $$加载不严格匹配的PDB
x 显示符号 eg1:    x winmine!*
eg2:    x ole32!*BindToObject
ln 搜索符号 eg1:    ln aebc6eac
eg2:    ln poi(0000001`400520b8)
lm 列模块或显示模块详情 lm vm urlmon
lmD
!lmi 模块和PDB文件详情 !lmi nt
!dlls 动态库信息 !dlls -a
!imgreloc 模块的重定位信息 !imgreloc
!dh 观察PE文件头 !dh 76930000 -a
转储文件 .dump 产生转储文件 .dump /mfh c:\dumps\pdf\acrobat.dmp
!analyze 自动分析 !analyze -v
.writemem 将内存数据写到文件 .writemem c:\dumps\blog.txt 07288600 L2000
.bugcheck 显示蓝屏错误码 .bugcheck
adplus(脚本) 监视进程和自动转储 Adplus -pn powerpnt.exe -pn wincmd32.exe -hang -o c:\test
进程 | 显示或切换进程(用户态) |*
|2s
!process 显示进程(内核态) !process 0 0
!process 0 0 powerpnt.exe
!process 8 1
!process 88bfbb90 2
.dml_proc 观察进程信息 !dml_proc     $$以DML方式显示进程信息
.process 显示或切换进程(内核态) .PROCESS /i 9382a530
.kill 杀进程 .kill 8adc85f0     $$参数为EPROCESS地址
!peb 观察进程环境块 !peb
dt 观察数据结构 dt nt!_EROPCESS
dt ntdll!_PEB@PEB -r
.tlist 列进程 .tlist $$列的是调试器所在系统的进程
线程 ~ 显示线程 ~
~*
切换线程 ~0s     $$0是线程序号
~~[14d8]s     $$14d8为线程ID
针对一个或多个线程执行命令 eg1:    ~* kvl
eg2:    ~*e?@$tid;!gle
eg3:    ~l k
!teb 显示线程环境块 !teb
.thread 显示或切换线程(内核态) eg1:    .thread 80551d20
eg2:    .thread /p 87474da8
!thread 观察线程(内核态) eg1:    !thread
eg2:    !thread 9383a030
dt 观察数据结构 eg1:    dt nt!_ETHREAD
eg2:    dt_TEB -y Last
eg3:    dt_CONTEXT
eg4:    dt_CONTEXT 0007fd30
!wow64exts.info 运行在64为系统的32位线程信息 !wow64exts.info
内存 !address 观察内存空间 !address
观察内存块属性 !address 0728988a
s 搜索内存数据 s -u 10000 L8000000 "当年在郑大"
d 显示内存数据 eg1:    db e1c52ce0
eg2:    da 000000000a4a9640
eg3:    dd @ebx 11
eg4:    dd bc74ed08 11
eg5:    dd 805490c4+8 ll
eg6:    dU .c 50 poi(0423ed44 + 8)
eg7:    dS fc8d3528
eg8:    du nt!NtInitialUserProcessBuffer
eg9:    db 0xe17734ac + 14
dt 按类型显示 eg1:    dt_GUID 01F1B434
eg2:    dt _EXECEPTION_POINTERS 74c97038 -r
e 编辑内存数据 eg1:    ew 02c9ffcc     $$按字(Word)编辑02c9ffcc开始的内存
eg2:    eb 001b5942-8 ff fe
eg3:    ed f655cfb4 f655d7dc
!dd 读物理地址 !dd ffffffe0
!ed 写物理地址 !ed ffffffe0 80000000
!vtop 虚拟地址转换到物理地址 !vtop 0 bafde064
!pte 显示页表项 !pte f655cfb4
!memusage 显示物理内存使用情况 !memusage
!pool 显示内核池信息 !pool e326c000
!vad 观察进程的地址空间 !vad 8a7605000
!sdbgext.hwnd 观察或者启用堆的调试支持 !gflag
!gflag +hpa
!heap 显示堆信息 !heap 01670000 -A
dt 观察数据结构 dt_heap_entry 0167fc10
!gflag 观察或者启用堆的调试支持 !gflag
!fflag+hpa
k 函数调用序列 eg1:    kn 100
eg2:    kn
eg3:    k = f655d7dc aebc3e5a aebc3e5a 99
.frame 切换当前栈帧 .frame /c c
dds 显示数据和符号 dds 80a056e0
dv 显示局部变量 dv -V
寄存器 r 读写寄存器 eg1:    r cr3
eg2:    e cs,ds,es,fs,gs,ss
eg3:    r cr2
eg4:    r eip=0042D69E
eg5:    r ecx=poi(ecx);r ecx;z(ecx!=0)
rdmsr 读MSR寄存器 rdmsr 19c
上下文 .ecxr 切换到异常上下文 .ecxr
.tss 切换到指定TSS .tss 28
.trap 切换到陷阱帧 .trap 8089a570
.effmach 切换32/64位上下文 eg1:    .effmach x86
eg2:    .effmach amd64
断点 bp 软件断点 eg1:    bp     KERNELBASE!CreateFileW+0x5 "dU /c 50 poi(@ebp+8);gu;r eax;if(@eax<0){.echo hit}.else{gc}"
eg2:    bp KERNELBASE!CreateFileW+0x5 "dU /c 50 poi(@ebp+8);gc"
eg3:    bp `d4test!d4testdlg.cpp:196`
ba 硬件断点 ba w4 0006fc74
bm 成批设置断点 bm /a nt!Dbgk*
bd/be/bc/bl 管理断点 bl
执行和跟踪 g 恢复执行 g
gu     $$返回到父函数
p 恢复执行 p
p"dv"     $$单步后自动执行dv命令
pc     $$单步到下一条call指令
t 单步执行 t
tc     $$跟踪到下一条call指令
tb     $$跟踪到下一条分支指令
wt 自动跟踪 wt -l 3
反汇编 u 反汇编 u nt!PsGetCurrentProcessId
uf 反汇编整个函数 uf RtlLeaveCriticalSection
ub 反向反汇编 ub 773c78e9
a 汇编 a<地址>
死锁 !locks 扫描关键区(用户态)或ERESOURCE(内核态) !locks
!cs 观察关键区 !cs -l
!alpc 观察ALPC端口 !alpc /m 9322a230
dt 观察数据结构 eg1:    dt_RTL_CRITICAL_SECTION
eg2:    dt_ERESOURCE
dt_KEVENT -r
处理器 !pcr 管理处理器控制器控制区 !pcr
!dg 观察段描述符 dg @fs
!idt 观察IDT表 !idt -a
!cpuid 显示CPU型号 !cpuid
!cpuinfo 观察CPU型号 !cpuinfo
!irql 观察保存的IRQL !irql
dt 观察数据结构 dt_KPCR
驱动程序 !drvobj 显示资源和观察驱动对象 !drvobj ser2pl
!devobj 观察设备对象 !devobj 85163500
!devstack 观察设备栈 !devstack 85163500
!devnode 观察设备节点 !devnode 0 1
!irp 观察IRP irp 8516e70
dt 观察数据结构 dt_IO_STACK+LOCATION 85879d60
dt_IRP
dt_DRIVER_OBJECT
dt_DEVICE_OBJECT
!arbiter 显示资源分配情况 !arbiter 2     $$物理地址分配情况
!pci 观察PCI空间 !pci ff 0 2 0 0 ff
!pcitree 显示PCI设备 !pcitree
ib/iw/id 读I/O端口 ib 510
ob/ow/od 写I/O端口 ob 510 0a
!amli AMLI调试器 !amli dns /s \_sb_pci0.bat0
托管程序 .loadby 加载扩展命令模块 !loadby sos mscorwks
.load 加载扩展模块 .load clr10\sos.dll
!name2ee 显示名字对应的对象信息 !name2ee clihello CliHello.CliHello.Main
!ip2md 显示程序地址对应的方法描述 !ip2md 0x7ff 001c0dbd
!threads 观察线程的托管 !threads
!clrstack 观察线程的托管 !clrstack
!do 显示托管对象 !do 000000002901750
!bpmd 设置断点 !bpmd CliHello CliHello CliHello.CliHello.Main
注册表 !reg 操作注册表 eg1:    !reg openkeys "hklm\software\microsoft\windows nt\currentversion\winlogon"
eg2:    !reg kcb e101a7a0
eg3:    !reg kvalue 0xe17734ac
eg4:    !reg cellindex 0xe1442920 721380
调试事件 sxe 配置调试事件 eg1:    sxe ld:portabledeviceapi
eg2:    sxd ld
gn 调试器不处理异常 gn
gh 调试器处理异常 gh
.lastevent 显示上一个调试事件的信息 .lastevent
远程调试 .server 将调试器升级为调试服务器 .server tcp:port=2000

猜你喜欢

转载自blog.csdn.net/qq_31932681/article/details/112306231