0%

Windbg命令简介

0x01调试命令

  • 单步调试功能

    • t或F11:单步,遇到函数跟进(step in)
    • p或者F10:单步,遇到函数跳过(step out)
    • Shift+F11:跳出当前函数(step out)
  • 执行到指定位置(Go)

    • g【地址|函数名】:持续执行到指定位置的命令
    • gh【地址|函数名】 :持续执行时遇到异常则中断
    • n【地址|函数名】:持续执行时,遇到异常也忽略
  • 断点功能(Break Point)

    • bl: 列出已设置的断点。显示结果中,第一列为断点ID;第二列为断点当前状态,‘e’表示断点处于活动状态(enabled),‘d’表示断点暂时被禁用;第三列为断点位置(breakpoint list)
    • be 【断点ID】:激活断点(breakpoint enable)
    • bd【断点ID】:禁用断点(breakpoint disable)
    • bc【断点ID】:清除断点(breakpoint clear)
    • bp【地址|函数名】:设置断点。如不指定地址,则在当前指令上下断点
    • 其他:Windbg可结合地址函数名,消息等各种条件设置很复杂的断点。此外,bu、bm等命令也可设置断点

0x02信息显示与编辑功能

  • 数据显示(Display):

    • d 【地址】:显示内存数据。默认情况下按照字节和ASCII显示,等同于DB命令。
    • db【地址】:按照字节模式显示内存数据(display byte)
    • dd【地址】:按照双字模式显示内存数据(display dword)
    • dD:按照双精度浮点数的模式显示内存数据(display Double Float)
    • da:按照ASCII模式显示(display ASCII)
    • du:按照Unicode模式显示(display Unicode)
    • ds:按字符串模式显示。注意,在没有‘\0’作为字符串结束时,不要轻易用这条命令打印内存,否则Windbg会将遇到的第一个NULL前的东西都打印(diaplay String)
    • dt:套用已知的数据结构模板显示内存。这条命令非常有效,例如在调试堆时就可以将内存按堆表的格式显示出来。
  • 数据编辑(Edit):

    • e【地址】【数据】:修改任意内存地址的值
    • Eb : 以字节的方式写入
    • ed【地址】【数据】:以双字形式写入
    • ea【地址】【数据】:以ASCII字符形式写入,注意,ASCII字符串需要加双引号
    • eu【地址】【数据】:以Unicode字符形式写入,注意,Unicode字符串需要加双引号
  • 栈帧的显示:

    • k【x】:由栈顶开始列出当前线程中的栈帧,x为需要回溯的栈帧数
    • kb【x】:栈帧回溯命令带上‘b’后,可以额外显示三个传递给函数的参数
  • 寄存器的显示(Register):

    • r【寄存器名】:r命令显示当前所有寄存器的值,也可以用来显示指定寄存器的值,例如:reax就只显示EAX的值
  • 模块显示:

    • lm:列出当前已经读入的所有模块,如动态链接库(List module)等
  • 反汇编功能:

    • u:反汇编当前指令后的几条指令并显示
    • u【起始地址】:从指定 的地址开始反汇编
    • u【起始地址】【终址】:反汇编指定的地址范围区间的机器代码