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【起始地址】【终址】:反汇编指定的地址范围区间的机器代码