windbg

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

几个常用的WinDBG命令

转载,但没找到原始出处,sorry。

1.查询符号

kd> x nt!KeServiceDescriptorTable*

8046e100 nt!KeServiceDescriptorTableShadow = 8046e0c0 nt!KeServiceDescriptorTable =

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 (控制命令)

相关文档
最新文档