Windbg 命令 (一)

无论是在windows上进行User mode application 开发还是进行kernel mode的驱动开发,都会涉及到对程序的调试。众多工具中windbg则是最全面、适应性最广的一个。熟悉其中所有的命令则是最基础的技能。这个系列将全面的介绍windbg命令。

基础知识

对于windbg command而言,是不区分大小写的。如果一行需要使用多个command可以使用分号(;)分隔。

kd> k;lmi

对于可以接收参数的command,可以使用逗号(,)来分隔。第一个参数例外,可以连着命令本身,但是前提不能引起歧义。 

kd> da 0xffff1234

可以输入的命令,可以分为4类:

  • 命令标识符 Command Token
  • 命令 Command
  • 元命令 Mata-Command
  • 扩展命令 Extension Command

命令标识符是windbg内置布局内存操作功能的一些关键字,包括控制符号和分号之类的。普通命令内置的可以操作访问目标内存相关的命令。元命令控制debug环境之类的一些命令,也是内置的。扩展命令是有插件dll导入的实现功能的命令,虽然windbg自带了很多扩展命令,但是通过扩展命令机制允许开发者自己实现自己的命令。之后会分别详细介绍。

Command Token

; Command Separator

 用来分割同一行中的多个命令。从左往右执行。

有些命令会把其后的内容当成是自己的命令,因此这些参数不能够跟分号,例如as命令。

{} Block Delimiter

通常用在进行命令行编程的时候使用,这是被{}括起来的内容被认为是一个语句块。每个block必须跟在一个流程控制命令或者.block命令后面。有一个细节就是一个block中所定义的别名只能在下一个block中生效,

${} Alias Interpreter

展开一个用户命名的别名。

$$ Comment Specifier

可以注释$$之后的内容,到分号为止

* Comment Line Specifier

注释*以后的内容,一直到行尾

.block

引入一个独立的block,其中的内容用{}括起来。常用来展开别名。

.break,.leave

作用和C/C++中的break命令类似,即条出一个控制流,例如.if, while, .do命令

.leave 可以用来直接离开一个.catch 块。

.catch

类似C++中的catch,能够在error发生的时跳过catch块中的命令,从该块后开始继续执行命令,从而避免因为一个error就导致程序被中断执行。 

.continue

和C一样,能够跳过该次循环。

.do, .while

都是循环控制命令, 能够循环执行其中的块的。并没有while这个关键字在windbg中。

注意他们不像C/C++一样连着使用。

.if, .else, .elsif

这三个命令和C中if, else,else if 类似。

.for

和C中for类似,但是可能看到出现多个分号的情况,因此最后一个自增表达式必须用分号来分割多个命令。

.foreach

可以针对其中的command的输出内容parse并处理。

.printf

和C类似,而且也提供了格式化的参数。而且还支持DML Debugger Markup Language 格式输出。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值