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也是必须的。
windbg符号路径设置_第1张图片

方法三 离线符号文件下载

这种方法已经失效,网址如下:
https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-symbols
微软从2018年5月份开始已经不再提供离线符号文件。提及离线的原因是,网上很多老贴会说用方法三,其实已经过期无效了。
windbg符号路径设置_第2张图片

方法四 注册表和环境变量

修改注册表和环境变量都可以,不过不常用,就不说了(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

你可能感兴趣的:(逆向工程,二进制安全)