關於windbg搜尋符號檔案的一點說明

2021-06-08 01:46:54 字數 1843 閱讀 6706

關於windbg搜尋符號檔案的一點說明

2023年09月07日 10:37

以下所有說明以本人的符號目錄設定為前提,我的符號目錄設定是:

_nt_symbol_path=d:\mylocalsymbols;d:\mysyssymbols

windbg載入符號檔案的過程如下(以載入testgetobj.sys的符號為例,命令是"ld testgetobj"):

windbg載入符號檔案時,會首先根據配置的符號目錄資訊,在本地符號目錄中查詢對應的符號檔案。比如以上命令,在本地搜尋時,乙個典型的搜尋過程如下:

d:\mylocalsymbols\

d:\mylocalsymbols\pingme.txt

d:\mylocalsymbols\flat.txt

d:\mylocalsymbols\index2.txt

d:\mylocalsymbols\testgetobj.pdb\7cef954f6e0647149f7447797763e3e31\testgetobj.pdb

d:\mylocalsymbols\testgetobj.pdb\7cef954f6e0647149f7447797763e3e31\testgetobj.pd_

d:\mylocalsymbols\testgetobj.pdb\7cef954f6e0647149f7447797763e3e31\file.ptr

d:\mysyssymbols\pingme.txt

d:\mysyssymbols\testgetobj.pdb\

d:\mysyssymbols\testgetobj.pdb\testgetobj.pdb//當上面乙個路徑存在時

d:\mysyssymbols\testgetobj.pdb

d:\mysyssymbols\sys\testgetobj.pdb

d:\mysyssymbols\symbols\sys\testgetobj.pdb

f:\mysys\testgetobj\objchk\i386\testgetobj.pdb

c:\program files\debugging tools for windows\testgetobj.pdb

首先解釋一下路徑中的那一串字母和數字混合的東西是什麼玩意兒,這個字串是編譯器根據編譯時的時間、版本、程式型別等資訊生成的乙個類似guid一樣的東西(vc6編譯的符號檔案其內部編號是編譯時間的絕對秒,就是 time 函式返回的32位從2023年1月1日0點開始的秒數,後面加上程式的特徵,例如目標機器的型別、程式型別等;vc7.0、7.1、8.0、9.0 編譯的符號檔案編號是乙個 guid,這可能是為了避免多執行緒同時編譯相同特徵的程式引發內部編號衝突),儲存在pe檔案的debugdirecotry資料目錄指向的資料中,暫且稱之為pdb的索引串,對於每個編譯出來的檔案而言它是唯一的。同名檔案的不同版本,它的這個索引串也不同。

下面我來逐一解釋下上面看到的這個搜尋過程:

1、先檢查符號目錄是否存在

如果仍然沒有找到,那麼將根據pe檔案的型別(dll,exe,sys,ocx等)作為子目錄進行查詢(安裝的符號檔案一般是以這種路徑形式存放的)。

7、以目標檔案debug資訊中指定的符號路徑進行搜尋

對於我們自己編譯的驅動,通常是包含了pdb檔案的全路徑的,隨便用乙個編輯器開啟乙個sys檔案都可以看到檔案中出現的pdb路徑資訊。

8、搜尋windbg所在路徑

這個沒什麼說的,在windbg所在路徑下進行搜尋。

9、到符號伺服器查詢符號

了解了以上過程,現在回答提出的問題就簡單了。

q:不同系統的同名符號檔案放在同乙個符號目錄裡,會對windbg查詢符號檔案有影響嗎?

q:我把符號檔案放在符號目錄裡乙個叫abc的子資料夾下,為什麼windbg就找不到了?

Pycharm搜尋導航之檔名 符號名搜尋

1 準備乙個工程 向你的工程中新增乙個python檔案,並輸入一些原始碼,例如 2 轉到對應檔案 類 符號 pycharm提供的乙個很強力的功能就是能夠根據名稱跳轉到任何檔案 類 符號所在定義位置。3 跳轉到檔案 按下ctrl shift n快捷鍵,在彈出的視窗中輸入d 下面所顯示的下拉列表中包含了...

關於檔案內搜尋的軟體

世界已經不是靠馬車拉貨的世界,我們接觸與承載的資訊實在太多了,需要借助工具來輔助我們,新時代下,對於資訊的處理原則應該是 輕整理 重搜尋。關於搜尋,我說的是本地搜尋,也就是自己電腦上,有兩類軟體可以好好利用 檔名搜尋和檔案內搜尋。關於檔名搜尋有兩個著名的軟體,分別是everything和listar...

關於有符號與無符號的位元組

經歷過幾個時期,一直都用無符串的,總感覺有乙個符號位非常的不靠譜,編譯器什麼時候給你轉一下型別,或者幹了什麼 後來又覺得c嘛,不會管你的到底是 1 還是255,反正都一樣,什麼型別啊,都是浮動,不就是一段記憶體長這樣嘛 後來又變了,覺得unsigned char真是麻煩,還得這麼長或者typedef...