windbg教程
安装
有两种方式可以进行安装,一种是直接在微软的应用商店中搜索windbg preview进行安装下载,另一种是通过安装win10 SDK中的debugging tools进行安装。我是采用第二种方式进行安装的,因为第一种方式下载安装的windbg preview无法运行。
下载下来之后运行选择Debugging Tools for Windows下载完成之后到一开始选择的目录下面寻找安装文件,安装即可。
安装symbols
- 将 - windbg的安装目录加入到环境变量中方便程序寻找- SYMSRV.DLL, SYMSTORE.EXE文件
- 新建环境变量 - _NT_SYMBOL_PATH,其值设置为- SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols,或者查看windbg的项目地址获取服务器的地址- 前面的设置的文件夹是用来存储下载的符号文件的,也可以将值设置为 - cache*c:\mysymbol;srv*http://msdl.microsoft.com/download/symbols
attach一个进程,即可以在相应的文件夹下面看到下载的符号文件了
设置工作空间
windbg会保存每一个你调试的工程信息,类似于ida的项目文件。每个调试的工作空间的信息默认保存在HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces中,在这个键下一般有4个子键User、Kernel、Dump、Explicit, 他们分别保存用户态调试,内核态调试、转储文件调试、以及手动保存(Save Workspace As)的工作空间信息。
若发现没有相应的子键则说明还没有使用过相应的调试方式。
命令注解
- a表示ASCII码
- b表示字节和ASCII码
- c表示DWORD和ASCII码
- d表示DWORD
- D表示双精度浮点数
- f表示单精度浮点数
- p表示按指针宽度显示
- q表示四字(8字节)
- u表示UNICODE字符
- w表示字
- W表示字和ASCII码
- yb表示二进制和字节
- yd表示二进制和双字
| 命令 | 含义 | 
|---|---|
| g {address} | 运行/运行到指定地址 | 
| gu | 执行到从当前函数返回 | 
| t, tb | 步入, 追踪到下一条分支指令 | 
| p | 步过 | 
| pc | 代码运行至下一个子例程调用处 | 
| wt | 和p类似,可以获取被调用函数的一些信息(如被调用了几次,执行了多少指令等) | 
| r | 查看和修改寄存器 | 
| rm | 查看和修改寄存器掩码,用来查看XMM或者MMX寄存器的值 | 
| u [start] [end] | 反汇编代码 | 
| uf | 反汇编当前$ip所在的函数 | 
| ub | 反汇编当前$ip之前的指令 | 
| k/kp/kb/kf | 显示函数栈帧/解析函数和参数类型/显示前三个函数参数/显示函数只用栈的大小 | 
| d{a|b|c|d|D|f|p|q|u|w|W|yd|yb} | 查看内存 | 
| d{d|q|p}s | 将内存中的一个元素(d表示四字节|q表示八字节|p表示根据架构选择)作为一个符号进行解析。用来查看栈 | 
| d*u | 同上,以Unicode解释内存中的一个元素 | 
| s | 搜索内存 s -d 0x0 l?0x7fffffff 0x1a2c3b4d 全局搜索0x1a2c3b4d值 | 
| bp/bu | 设置断点/设置延迟解析的断点 | 
| ba {r|w}{1|2|4} | 设置内存断点(访问|写入)(1字节|2字节|4字节) | 
| b{d|e|c} | 禁用/启用/清除断点 | 
| bm | 批量设置断点 | 
| bp <address> “cmd” | 条件断点设置/断点后执行的命令bp JP2KLib+50567 “r eax; r ecx; .if(ecx>=fd){}.else{g;};” | 
| dv { |/i|/V} | 显示局部变量|显示符合类型和参数类型|显示变量存储位置 | 
| dt {struct} address | 以struct结构查看数据/内存 | 
| !address | 查看指定的地址是栈内存还是堆内存,如果未指定地址则枚举所有内存区域 | 
| !peb/!teb | 获取进程的PEB和线程的TEB | 
| !gle | 显示错误码和格式化字符串 | 
| .cxr <content address> | 重新指定上下文 | 
| e{d|b} | 修改全局变量/修改当前执行的代码 | 
| !error | 根据错误码查找错误信息 | 
| poi(address) | 获取address指向内存的内容 | 
| ? | 计算表达式 | 
| .formats <data> | data进行格式转换(显示所有的格式) | 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LYYL' Blog!
 评论





