windbg
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
几个常用的WinDBG命令
转载,但没找到原始出处,sorry。
1.查询符号
kd> x nt!KeServiceDescriptorTable*
8046e100 nt!KeServiceDescriptorTableShadow =
kd> ln 8046e100
(8046e100) nt!KeServiceDescriptorTableShadow | (8046e140) nt!Mm SectionExtendResource
Exact matches:(精确匹配)
nt!KeServiceDescriptorTableShadow =
2.下载系统文件的符号
symchk c:\winnt\system32\ntoskrnl.exe /s
srv*c:\symbols*/download/symbols
SYMCHK: FAILED files = 0(用于验证符号文件或者从符号服务器下载符号文件的工具)SYMCHK: PASSED + IGNORED files = 1 (通过+被忽略的文件)
3.查看event对象的信号状态
!object \BaseNamedObjects(!对象\ BaseNamedObjects)
dt -b nt!_KEVENT xxxxxxxx
4.查看LastError值
!gle
5.指定进制形式,0x/0n/0t/0y分别表示16/10/8/2进制
? 0x12345678+0n10
Evaluate expression: 305419906 = 12345682 (求值|求表达式值)
6.过滤命令窗口输出信息
.prompt_allow -reg +dis -ea -src -sym (命令控制在单步和跟踪时显示哪些信息,以及目标的执行何时停止)
7. .formats命令
以多种格式显示表达式的值
0:000> .formats @eax
Evaluate expression:
Hex: 00181eb4(十六进制的)
Decimal: 1580724(十进位的)
Octal: 00006017264(八进制的)
Binary: 00000000 00011000 00011110 10110100(二进制)
Chars: ....(字符)
Time: Mon Jan 19 15:05:24 1970
Float: low 2.21507e-039 high 0(浮点数)
Double: 7.80981e-318
8.异常处理相关
有 sx, sxd, sxe, sxi, sxn, sxr 几条命令可用来设置异常和事件的处理方式。比如:
0:000> sxe ld
可以在加载 dll 时中断下来。
9.内核调试时切换进程
lkd> !process 0 0
lkd> .process xxxxxxxx
10.可在桌面上建立一个WinDbg.exe的快捷方式,然后在该快捷方式的属性力设置如下命令行
C:\WinDBG\windbg.exe -c ".prompt_allow +dis -reg -ea -src
-sym; .enable_unicode 1; .enable_long_status 1; .logopen /t
c:\dbglog\dbglog.txt" (. unicode, 在电脑上用16 位元显示字符的代码(同ASCII 类似, 但是包括更大数量的字符并可以显示全世界所有语言的字符))
11.本机内核调试
通过File/Kernel Debug… 菜单可以打开内核调试选择窗口,选择最后一个Local 选项页,确定后可以以内核方式调试本地机器。这时所有会挂起系统的命令都用不了了,但可以读写系统内存。另外,有一个方便的用途是用来查看系统结构,比如: dt nt!_EPROCESS 。
12. 其他命令
windbg中常用的命令
~ - list threads in current process context(在当前进程列表线程上下文)
~* - list detail information of threads in current process context(列出当前进程中线程的详细信息,语境)
lm - list all loaded modules(列出所有加载的模块)
!sym noice/quiet - symbol prompts on/off(符号提示开/关)
.srcpath - set source code path(设置源代码路径)
k - display current stack(显示当前堆栈)
~*kb - display current stack for all threads(显示当前所有线程的堆栈)
dv - display current local variable (ctrl + alt + v to switch mode)(显示当前局部变量)
.Frame - call stack(调用栈)
dt xxx - display data structure for xxx such as PEB(显示数据结构XXX的,如后烘)
!gle/!error - display last error for current thread(显示当前线程的最后一个错误).
!teb - diplay current thread execution block(diplay当前线程执行块)
!peb - diplay current process execution block(diplay当前进程执行块)
r [@register] - display value of all register(diplay价值的所有寄存器)
ln [Address] - display the object type in Address(在地址对象类型)
x [] - search address for global variable or global function, such as "x kernel32!*"(搜索地址的全局变量或全局函数,如“× kernel32中!*”)
!locks - display dead lock(显示死锁)
!handle - get current handle usage(获取当前处理的使用)
!htrace [enable] - display and trace handles.(显示和跟踪处理)
u – disassemble(分解)
bp [Kernel!SetLastError] [value] - set break pointer(设置断点特)
bl - display break pointer information.(打破指针信息显示)
for example:
bp `mysource.cpp:143` "j (poi(MyVar)"0n20) ''; 'g' "
when MyVar is exceed 0x20, g command will be invoked. NOTE: "j" is to set conditional break pointer.
ba - data break pointer(数据打破指针)
ba w4 0x4000000 "kb;g" - list all modify 0x40000's call stack.
(列出所有修改0x40000的调用堆栈)
p,pa,t,ta - control command (控制命令)