常用的windbg分析命令

查看基本信息命令

.lastevent命令将显示导致调试器停止的最近调试事件。

查看目标系统信息:version、vertarget。vertarget显示信息是version显示信息的子集。

显示进程环境块

显示线程环境块

显示最近错误码

查询错误码含义: !error

显示异常记录:.exr
显示上下文记录:.cxr
此两个命令通常在一块使用。在排查问题时非常好用。

 

寄存器

寄存器的值

伪寄存器
伪寄存器是一些符号性的名字,形式为$name。调试器将伪寄存器视为一些变量,在这些变量中保存的是当前调试回话中的一些值。
$ip:指令指针寄存器
$ra:当前函数返回地址
$retreg:主要的值寄存器,在函数调用返回后,函数结果将存放在这个寄存器中。x86架构等于eax,x64架构等于rax。
$csp:当前的桟指针
$proc:当前的进程。在这个伪寄存器中包含的是用户态的进程环境块地址。
$thread:当前的线程,在这个伪寄存器中包含的是用户态的线程环境块地址。
$tpid:当前进程标识符
$tid:当前现成标识符

反汇编

反汇编当前$ip地址上的8条指令

反汇编包含当前$ip整个函数

反汇编当前$ip之前的8条指令

 显示桟命令

kp解释参数的形式显示调用桟

kb 显示调用桟的前三个参数

显示调用桟空间的大小

手动构造调用桟

在某些情况下,只有一部分的桟是可用的,此时调试器的k命令无法解析桟,这是因为当前桟基指针ebp和栈顶指针esp所指向的地址不可访问。所以需要我们手动构造调用桟。在这个过程当中,最困难的任务就是从内存中找出两个值来表示调用桟中正确的桟帧。找出这两个值的方法之一就是识别出一系列的值,这些值表示当前桟中的某个地址。

 断点命令

代码断点可以通过命令bp来设置,这个命令的参数可以是需要设置断点的地址、断点选项、断点限制,以及一个字符串表示在触发断点时需要执行的命令。

bl是显示所有的断点。

命令bm可以在参数中指定一个符号模式,这样在所有与这个符号模式匹配的地址上都将设置一个断点。

windows操作系统会在必要时加载动态链接库,而我们经常需要在一个还没有被加载的模块上设置断点。命令bu可以用来设置一个延迟断点,只有当这个模块所以的模块被加载时,延迟断点才成为一个正在的断点。例如:bu ole32!CoinitializeEx

设置内存访问断点

 

显示变量值命令

dv显示局部变量的值
dv /i 将在第2列显示符号的类型和参数类型
dv /V 将显示变量的存储地址

如果变量为复合类型,例如是一个数据结构或者累,可以是用dt显示准确的值。

查看内存命令

调用!address显示内存地址的信息

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注