• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2024-07-11 20:20 Aet 隐藏边栏 |   抢沙发  11 
文章评分 1 次,平均分 5.0

命令标记

命令分隔符

  1. 用于分隔单行上的多个命令

块分隔符

  1. 圆括号

  1. 一对大括号 ( { } ) 用于包围调试器命令程序中的语句块

  1. 方括号
    1. 用于访问数组元素或表示寄存器或内存位置

别名解释器

  1. 用户别名(以$开头)
    1. 用户别名只能在当前调试会话中使用
    2. 例如:$myalias
  2. 全局别名(以$$开头)
    1. 全局别名在所有调试会话中可用
    2. 例如:$$myglobalalias
  3. 定义用户别名:

  1. 定义全局别名:
    1. 使用 as /g 命令定义全局别名

  1. 使用 al 命令显示所有当前定义的别名

  1. 使用 ad 命令删除别名

  1. 直接输入别名名称即可执行定义的命令

  1. 直接输入全局别名名称即可执行定义的命令

  1. 高级用法:别名与表达式结合
    1. 可以将别名与表达式结合使用,以简化复杂的调试任务

  1. 高级用法:嵌套别名
    1. 可以嵌套使用,即一个别名可以引用另一个别名

注释说明符

  1. 使用 ; 符号添加单行注释

  1. WinDbg本身不直接支持块注释,但你可以使用多个单行注释来实现类似的效果

.block

  1. WinDbg中,.block命令用于创建一个代码块,该代码块中的命令会被作为一个整体执行
    1. 这对于在条件语句、循环和宏定义中组合多条命令特别有用

.break

  1. WinDbg中,.break命令用于中断当前的调试会话,使调试器进入命令模式
    1. 这通常用于调试过程中需要临时停止程序的执行以检查状态或修改内存和寄存器

.catch

  1. WinDbg中,.catch 命令用于设置异常捕获点
    1. 当指定的异常发生时,调试器会捕获并停止在异常发生的地方
    2. 这对于调试特定类型的异常或错误非常有用
  2. 捕获访问冲突异常(异常代码为 0xC0000005),可以使用以下命令:

  1. 捕获所有异常,可以使用以下命令:

  1. 查看当前设置的捕获点

  1. 删除对访问冲突异常的捕获点:

  1. 删除所有捕获点

  1. 高级用法
    1. 可以在特定线程中设置异常捕获点,以便更精细地控制调试过程
    2. 切换到线程3,~3s
    3. 设置对访问冲突异常的捕获点.catch 0xC0000005
    4. 运行程序g

.continue

  1. WinDbg中,.continue命令用于继续执行调试目标
    1. 这与ggo)命令类似,但通常用于处理器命令执行之后的特定情况,比如在脚本或异常处理的上下文中
    2. g命令的区别
      ggo):继续执行程序,通常用于手动中断后或设置断点后继续执行
      .continue:主要用于脚本和异常处理的上下文中,继续执行程序
  2. 在调试过程中,设置了断点或中断程序执行后,可以使用.continue继续执行程序:

  1. 调试异常时,可以使用.catch捕获异常,然后在处理完异常后使用.continue继续执行程序
  2. 在调试脚本中,可以使用.continue命令来控制程序执行的流程

  1. 高级用法
    1. 可以在条件语句中使用.continue命令

.do

  1. WinDbg中,.do 命令是一种控制流命令,用于执行一个代码块,直到指定的条件为假

  1. 使用 .do 命令输出一个变量的值,直到该变量的值大于或等于 10

  1. 使用 .do 命令不断检查寄存器的值,直到特定寄存器(例如 eax)的值变为 0

  1. 使用 .do 命令在调试过程中输出内存地址的内容,直到该地址的内容为特定值

.else

  1. 根据eax寄存器的值执行不同的命令

  1. 处理更复杂的条件逻辑

  1. 在调试脚本中使用条件语句执行不同的操作

.elsif

  1. 根据 eax 寄存器的值执行不同的命令

  1. 使用嵌套的条件语句处理更复杂的条件

  1. 在调试脚本中使用条件语句执行不同的操作

.for

  1. 输出一个变量的值,直到该变量的值大于或等于 10

  1. 检查一段内存区域的内容,直到找到特定值

.foreach

  1. 使用 .foreach 命令迭代一段内存地址,并显示每个地址的内容

  1. 使用 .foreach 命令迭代加载的模块,并显示每个模块的信息

  1. 使用 .foreach 命令迭代进程的线程,并显示每个线程的堆栈信息

.if

  1. 根据eax寄存器的值执行不同的命令

.leave

  1. WinDbg中,.leave 命令用于在循环或块结构中提前退出
    1. 这类似于许多编程语言中的 break 语句,允许你在满足某些条件时提前终止循环或块执行
  2. 假设你有一个循环,想在某个条件满足时提前退出:

  1. 可以在 .while 循环中使用 .leave 提前退出循环:

  1. 还可以在 .block 块中使用 .leave 提前退出块执行:

.printf

  1. WinDbg中,.printf命令用于格式化输出文本和变量值
  2. 常见格式
    1. %d:十进制整数
    2. %u:无符号十进制整数
    3. %x:小写十六进制整数
    4. %X:大写十六进制整数
    5. %s:字符串
    6. %c:字符
    7. %p:指针(十六进制表示)
    8. %f:浮点数
  3. 输出一个整数和一个字符串

  1. 输出多个变量的值,包括十进制和十六进制格式

  1. 输出内存地址及其对应的内容

.while

  1. WinDbg中,.while命令用于创建一个循环结构,允许你根据条件表达式反复执行一组命令,直到条件表达式为假
  2. 在循环体中使用条件分支语句处理不同的情况

命令

enter

  1. 重复键入的最后一个命令

运行脚本文件

  1. $<
    1. 用于运行一个脚本文件,并将脚本文件中的命令作为调试器命令来执行

  1. $><
    1. 用于运行一个脚本文件,并将脚本文件中的命令输出到一个新的文件

  1. $$<
    1. 用于运行一个脚本文件,该脚本文件可以包含调试器命令和注释。注释以 $ 开头

  1. $><$
    1. 用于将当前输出重定向到一个文件,同时执行一个脚本文件
    2. 这个命令结合了 $<> 的功能

  1. $a ><
    1. 用于将当前的输出附加到一个文件,并运行一个脚本文件

命令帮助

  1. ?

计算表达式

  1. ?

计算C++表达式

系统状态

设置当前系统

进程状态

设置当前进程

线程状态

线程特定命令

冻结线程

解冻线程

挂起线程

恢复线程

设置当前线程

更改当前处理器

汇编

删除别名

断言处理

列出别名

设置别名

访问时中断

断点清除

断点禁用

断点启用

断点列表

设置断点

断点重新编号

更新断点命令

更新条件断点

比较内存

显示内存

显示引用的内存

显示单词和符号

显示选择器

显示链接的列表

显示字符串

显示类型

显示类型-扩展的调试器对象模型信息

显示局部变量

显示调试器对象模型表达式

输入值

填充内存

转到

从条件断点继续

转到已处理的异常

转到未处理的异常

向上

从端口输入

执行if-else

显示堆栈回溯

设置源选项

加载符号

列出已加载的模块

列出最接近的符号

列出源行

列出当前源

启动源编辑器

加载或卸载源文件

设置源行数目

移动内存

设置数字基

输出端口

步进

步进到地址

步进到下一个调用

步进到下一个call或return

步进到下一个分支指令

步进到下一个return

退出

退出和分离

寄存器

读取msr

寄存器掩码

搜索内存

设置内核调试选项

设置安静模式

设置符号后缀

设置异常

跟踪

跟踪到地址

跟踪到下一个分支

跟踪到下一个调用

跟踪到下一个call或return

跟踪到下一个分支指令

跟踪到下一个return

取消汇编

取消汇编函数

从物理内存取消汇编

取消汇编实际模式BIOS

取消汇编x86 BIOS

显示调试器命令行

显示调试器版本

显示目标计算机版本

写入MSR

跟踪和监视数据

检查符号

执行while

元命令

常规扩展命令

内核模式扩展命令

用户模式扩展命令

专业扩展命令

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享