windbg符号路径设置
0x00 前言
windbg没有引入符号文件(pdb)会导致系统库上的变量,堆栈等信息无法显示。
0x01 简介
PDB(Program Database),是微软开发的用于存储程序调试信息的文件格式。pdb文件是由源码在编译期生成,存储了源文件名称,变量名,函数名,FPO(帧指针),对应行号等信息。由于体积庞大,同时出于安全性考虑,可运行程序exe或者dll文件都是无符号的。
在windbg中运行无符号程序,会得到如下错误提示:
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: ntdll!_HEAP_ENTRY ***
*** ***
*************************************************************************
Invalid type information
0x02 配置符号文件
方法一:
在windbg的命令行中直接输入:
0:040> .sympath SRV*c:\localsymbols*http://msdl.microsoft.com/download/symbols
0:040> .reload
这种使用url的方法最为推荐,因为符号文件会从微软服务器上自动拖拽,并永久缓存。
其中,c:\localsymbols如果不存在该目录,windbg会自动创建。
方法二:
Ctrl+s在弹出的窗口中输入你的符号路径:
SRV*c:\localsymbols*http://msdl.microsoft.com/download/symbols
图中reload也是必须的。
方法三 离线符号文件下载
这种方法已经失效,网址如下:
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-symbols
微软从2018年5月份开始已经不再提供离线符号文件。提及离线的原因是,网上很多老贴会说用方法三,其实已经过期无效了。
方法四 注册表和环境变量
修改注册表和环境变量都可以,不过不常用,就不说了(LZ太懒了)
0x03 常用命令
开启符号文件加载信息的详细输出
0:000> !sym noisy
加载符号文件
0:000> .sympath srv*c:\symstore.pri*http://msdl.microsoft.com/download/symbols
重新加载应用程序中用到的所有模块
0:000> .reload /f
测试一个符号文件对某个模块的有效性
0:000> !chksym ntdll.dll
0x04 一些软件的符号仓库
Crhome: https://chromium-browser-symsrv.commondatastorage.googleapis.com
Firefox: https://symbols.mozilla.org/
Nvidia: https://driver-symbols.nvidia.com/
AMD: https://download.amd.com/dir/bin
0x05 参考文献
https://en.wikipedia.org/wiki/Program_database
https://msdn.microsoft.com/zh-cn/library/ms241613.aspx
https://blog.csdn.net/hgy413/article/details/7555378
https://blog.csdn.net/witxjp/article/details/8118481
https://blog.csdn.net/bcbobo21cn/article/details/51683137
https://developer.mozilla.org/en-US/docs/Mozilla/Using_the_Mozilla_symbol_server
https://www.chromium.org/developers/how-tos/debugging-on-windows/windbg-help
上一篇: Windows下调试工具Windbg入门
下一篇: 内存地址、机器码与汇编指令的三角恋关系