0x00 前言
在使用windbg調試windows中的程序時會經常碰到一些系統的dll里面的一些函數調用,有些函數是沒有具體函數名的,這對於調試非常不利,基於此,微軟針對windows也發布了很多系統dll對應的符號表,這些符號表如今基本集成在了微軟的符號表服務器中,本文簡單講一下如何在windbg中加載符號表。
0x01 配置符號表
首先給一個最常用的方式,要做的工作基本就是先在本地指定的文件目錄搜索對應的符號表,如果找不到就連接遠程服務器下載,並保存在本地,方便下次使用,如下
.sympath srv*c:\Symbols*https://msdl.microsoft.com/download/symbols
這是對於沒有符號表的情況,如果本地本來就有符號表的緩存,但是考慮到windows版本等問題,相同的符號表會不會覆蓋等情況,建議使用下面的方法從遠程加載新的符號表為本次調試使用
.sympath c:\MyRegularSymbols;srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
順利的話在加載完符號表以后需要重新載入模塊,命令如下:
.reload
0x02 管理符號表
當調試的東西很多,符號表越來越大的時候,可以使用agestore
來管理不常用的符號表,下面舉幾個例子。
以下命令刪除C:\MyDir
中2008年1月7日之前訪問的文件:
agestore c:\mydir -date=01-07-2008
以下命令將刪除目錄樹中從屬於C:\symbols\downstreamstore
的所有文件,這些文件在30天內沒有訪問:
agestore c:\symbols\downstreamstore -days=30 -s
以下命令刪除從屬於C:\symbols\downstreamstore
目錄樹中大於50,000字節的文件:
agestore c:\symbols\downstreamstore -size=50000 -s
更多的內容可以參考微軟官方的文檔
0x03 一些問題
符號表設置以后沒法加載,或加載失敗?
首先檢查本地是否真的有網,沒問題的話,考慮科學的上網或許可以加速下載,如果還不行,可能就是符號表服務器的問題,這類問題已經多次了。
另外,在排查問題的時候可以嘗試使用!sym noisy
命令,實時輸出調試器加載符號表時候的信息。先運行!sym noisy
再運行.reload
。