windbg的好用的命令

1、有时候想对某个函数下断点,可就是记不清楚的函数具体的名字,好吧,使用x命令来列举所有的符号的。

命令格式为:

x [选项] 模块名字!符号匹配表达式, 如:

x et!* //于是,所以的et模块的函数都出来,哈哈~

2、64位生成器生成32位的程序的dump文件,查看时,可以使用以下命令转到32位模式下调试。

.load wow64exts !sw

3、如果想要了解该模块的详细信息,使用lm命令

lm命令可以用于查看模块的信息,详情可以看帮助文档。其中,

lmvm命令可以查看任意一个指定的已加载的DLL/EXE的详细信息,以及symbol的情况, 特别提醒的是,不要加后缀名(无论EXE/DLL)

lmvm

4、u 地址:用于显示指定地址的汇编代码。最常用法如下:

u eip       // 可以找出程序崩溃时执行的指令 及后7条指令

ub 7c80240f // 显示地址7c80240f 指向的指令 及前7条指令

5、du/da address: 以unicode或者ascii characters显示地址address指向的内存

ddaddress   // Double-word values (4 bytes)
dppaddress  // 显示指针address指向的地址

6、!handle [handle值] [显示的内容]:!handle handle_value f(显示所有句柄信息)

Syntax

// User-Mode
!handle [Handle [UMFlags [TypeName]]] 
!handle -?
// Kernel-Mode
!handle [Handle [KMFlags [Process [TypeName]]]]

7、dmp文件关联windbg

windbg.exe  -W Default -z "%1" -c ".ecxr;kb"    // %1表示dmp文件路径

8、句柄泄露调试

首先用windbg载入目标程序,!htrace -enable开启句柄跟踪开关。
某个时刻创建一次句柄快照:!htrace -snapshot
继续运行后进行一次句柄快照对比:!htrace -diff

如:执行!htrace -diff后,
Handle = 0x000005a0 - OPEN
句柄0x000005a0被打开了,可能是一次句柄泄露但是也不一定,需要继续分析,使用!htrace 0x000005a0命令显示创建该句柄的堆栈:

9、dt 类型 [地址]查看对象信息

dt soui!SOUI::SWindow           // 后面不加地址,则只展示对象结构信息
dt soui!SOUI::SWindow 0136fa6c  // 后面加对象地址,除了展示结构信息,也会把对象各成员的值解析出来

10、分析dump信息, 包括被断下来的蓝屏

!analyze -v

11、查看堆栈 - k, 一般用kb, 其他参数F1参见帮助文档

kb

12、关联.dmp文件到windbg的脚本。

@echo off
set dbgpath=\"C:\Program Files\Debugging Tools for Windows (x64)\windbg.exe\"
REG ADD "HKCU\Software\Classes\.dmp" /f /d dmpfile
set val=%dbgpath%,0
REG ADD "HKCU\Software\Classes\dmpfile\DefaultIcon" /f /d "%val%"
set val=%dbgpath% -c \".ecxr;kpn L\" -z \"%%1\"
REG ADD "HKCU\Software\Classes\dmpfile\Shell\open\command" /f /d "%val%
set val=%dbgpath% -c \"!wow64exts.sw; !analyze -v\" -z \"%%1\"
REG ADD "HKCU\Software\Classes\dmpfile\Shell\Analyze With Windbg  - wow64\command" /f /d "%val%"
set val=%dbgpath% -c \"!analyze -v\" -z \"%%1\"
REG ADD "HKCU\Software\Classes\dmpfile\Shell\Analyze With Windbg\command" /f /d "%val%"
REG DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.dmp\UserChoice" /f
set /p finish="finsh!"

11、.time获取进程运行时间

.time
Debug session time: Thu Aug 22 10:11:04.000 2013 (UTC + 8:00)
System Uptime: 14 days 17:26:44.613     // 系统运行时间
Process Uptime: 14 days 17:14:25.000    // 当前进程运行时间
  Kernel time: 0 days 0:09:02.000
  User time: 0 days 0:42:36.000

12、.effmach x86

一般是用 !wow64exts 扩展切换机器类型。 在没有扩展的情况下,用内置命令 .effmach

.effmach (Effective Machine)
The .effmachcommand displays or changes the processor mode that the debugger uses.
Syntax
.effmach [MachineType] 

.x86 Use an x86-based processor mode
.amd64 Use an x64-based processor mode
.ia64 Use an Itanium-based processor mode
.ebc Use an EFI byte code processor mode


The processor mode influences many debugger features:
Which processor is used for stack tracing.
Whether the process uses 32-bit or 64-bit pointers.
Which processor's register set is active.

13、一个比较老的模块崩溃,PDB符号文件已经失传,代码是有的,此时强制加载符号文件就有用了,

.reload /i XXXX.exe

14、!sym

The !sym extension controls noisy symbol loading and symbol prompts.

!sym 
!sym noisy  // 会打印详细的加载符号信息
!sym quiet  // 加载符号时,不会打印详细的信息
!sym prompts 
!sym prompts off

15、!address

详见:https://www.cnblogs.com/kissdodog/p/3730598.html

16、vertarget 可以用 vertarget 命令来显示操作系统的详细信息

Windows XP Version 2600 (Service Pack 3) MP (2 procs) Free x86 compatible
Product: WinNt, suite: SingleUserTS
kernel32.dll version: 5.1.2600.5512 (xpsp.080413-2111)
Machine Name:
Debug session time: Sat Feb 21 14:01:29.638 2009 (GMT-8)
System Uptime: 0 days 18:40:50.509
Process Uptime: 0 days 0:00:05.546
Kernel time: 0 days 0:00:00.015 User time: 0 days 0:00:00.015

上面的输出告诉我们,该用户使用WinXP SP3, CPU 是 x86 双核。 该机已经持续运行了18个小时40分50秒, 当前调试进程刚刚启动(运行5秒钟)

17、!heap

堆信息查看命令,定位内存问题相当有用
详见:有道-windbg-定位内存占用问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值