• 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 格式输出。 

  • 相关阅读:
    Babel AST代码转换、生成
    【LeetCode】【前K个高频单词】
    学科排名TOP4|教育学老师CSC获批赴美访学交流
    大数据(9j)FlinkCDC
    基于字节码的统一异常上报实践
    应用程序服务器/事件驱动编程/CommonJS介绍
    多线程合集(三)---异步的那些事之自定义AsyncTaskMethodBuilder
    QCC51XX---GaiaFramework_Init分析
    CC001:CC照片建模
    2023年浦东新区数字化安全风险智慧管控技能比武初赛-技能题一
  • 原文地址:https://blog.csdn.net/wupeng4389151/article/details/126558143