调试符号对于调试器的正常工作很重要,如果缺少调试符号或调试符号不匹配,那么调试器就可能显示出错误的结果。因此在调试过程中正确的加载和使用调试符号是非常关键的。使用调试符号一般按照下面步骤完成:1.设置符号搜索路径;2.加载符号文件;3.检查符号是否加载成功。
1.设置符号搜索路径
.sympath 命令 设置或增加符号路径,如:
.sympath SRV*d:\symbols*http://msdl.microsoft.com/download/symbols
将路径d:\symbols目录和微软符号服务器设置为符号路径
.sympath + d:\symbols
将d:\symbols目录加入到符号搜索路径中
.symfix 命令 自动将符号路径设置为微软符号服务器,它也可以追加本地目录,如
.symfix + d:\symbols
将微软符号服务器设为符号搜索路径,并且在其后添加d:\symbols目录到符号搜索路径中
2.加载符号文件
ld和.reload 命令 直接加载符号文件,如:
ld kernel32 加载kernel32库及其符号文件
.reload 重新加载已加载进程的符号文件,后跟/f参数表示强制重新加载,如:
.reload /f NT 强制重新加载解析NT模块符号文件
某些使用符号的命令也可以触发调试器来加载符号,如栈回溯命令(k*)和反汇编命令等。
3.检查符号是否加载成功
!sym noisy 开启符号加载吵杂模式,来显示符号加载的过程信息
!sym quiet 关闭符号加载吵杂模式,不显示符号加载的过程信息
!lmi 观察模块信息,如!lmi nt 观察nt模块信息,其中包含了该模块的符号信息
!lm 列出加载的模块信息列表
!lm v 包含更丰富信息的模块信息列表
这些命令可以配合使用,以加载nt模块为例,步骤如下:
.sympath SRV*d:\symbols*http://msdl.microsoft.com/download/symbols
设置符号搜索路径
!sym noisy
开启符号加载吵杂模式
.reload /f nt
强制重新加载nt模块及其符号
!lmi nt
查看nt模块信息,确保符号加载成功
!sym quiet
关闭符号加载吵杂模式
总结一下加载调试符号的基本方法,比较实用。