天天看點

Windows下利用WinDBG、OllyDBG進行源碼級調試

一般應用程式編譯後會建立exe/dll/sys(可執行檔案)、pdb(程式資料庫)、map(編譯資訊)等檔案,而源碼調試需要可執行檔案、程式資料庫檔案、還有源代碼檔案。(由于符号資訊已經寫入到程式資料庫檔案裡,如果提到符号檔案,一般都是指程式資料庫檔案)

      我們知道,pdb檔案裡記錄着調試程式所需的所有資訊,調試器進行源碼調試時,是先通過pdb檔案找到對應符号的源檔案所在位置,并定位目前代碼在源檔案裡的位置,顯示到調試器裡。是以,使用調試器源碼調試時,必須保證以下幾點,才能正确調試:

        1.檔案版本統一。可執行程式、程式資料庫檔案還有源碼檔案必須是同一工程同一時刻編譯所生成的。

        2.設定符号檔案路徑。確定調試過程中所有子產品的符号檔案齊全并在調試器裡正确設定符号檔案路徑。

        3.設定源檔案路徑。必須把源碼檔案放到程式資料庫檔案所記錄的目錄下(編譯時,源檔案所在目錄),或者通過調試器設定源碼檔案所在目錄(如果調試器支援)。

預設情況下,調試器會在可執行子產品所在目錄搜尋程式資料庫檔案,如果沒有找到才到其他目錄搜尋。源碼檔案路徑則通過程式資料庫檔案來擷取。WinDBG和OllyDBG都支援重新設定符号檔案路徑,并通過微軟符号檔案伺服器查找系統子產品的符号檔案。源碼檔案的路徑WinDBG支援自定義而OllyDBG則不支援,隻能将源碼檔案放置于工程編譯時的目錄下。

        WinDBG設定符号路徑的方法:

        1.打開WinDBG通過圖形界面菜單上File->Symbol File Path(ctrl+s)來設定,路徑間隔用分号隔開。如:srv*;D:\MySymbols;E:\SystemSymbols

        2.打開WinDBG在command browser(指令視窗)裡通過輸入指令來設定。指令如下:

        a.清除符号路徑并設定為微軟符号檔案伺服器.symfix。也可順便添加上自己本地符号路徑.symfix+ xxx。

        b.檢視目前的符号檔案路徑.sympath。

        c.追加路徑.sympath+ xxx。

        如果調試項目正在運作,設定完符号檔案路徑後還不能正常解析,則需要輸入.reload指令來重新導入符号。其他符号相關指令可查閱WinDBG幫助。

        WinDBG設定源碼檔案路徑的方法:

1.打開WinDBG通過圖形界面菜單上File->Source File Path(ctrl+p)來設定,路徑間隔用分号隔開。如:D:\MySources;E:\Project

2.打開WinDBG在command browser(指令視窗)裡通過輸入指令來設定。指令如下:

檢視目前的源碼檔案路徑.srcpath。

追加路徑.srcpath+ xxx。

 如果調試項目正在運作,設定完源碼檔案路徑後還是不能顯示源代碼,先檢查圖形界面上Debug->Source Mode是否啟用,之後再輸入.reload來重新整理。

        OllyDBG設定符号路徑的方法:

        打開OllyDBG通過圖形界面上Debug->Select Path For Symbol來設定。

        OllyDBG設定源碼檔案路徑的方法:

        由于OllyDBG不支援自定義源碼檔案路徑,是以隻能把源碼檔案放置于工程編譯時的所在目錄(程式資料庫檔案裡記錄的就是這個目錄),如果工程不在一台計算機上,可以建立相同目錄來存放源碼。

當程式暫停于源碼所在區域時OllyDBG圖形界面上View->Source能顯示目前源碼檔案,View->Source Files能顯示所有源碼檔案。當源碼視窗打開後,WinDBG和OllyDBG都能在源碼視窗裡設定斷點或者單步執行了。

一般應用程式編譯後會建立exe/dll/sys(可執行檔案)、pdb(程式資料庫)、map(編譯資訊)等檔案,而源碼調試需要可執行檔案、程式資料庫檔案、還有源代碼檔案。(由于符号資訊已經寫入到程式資料庫檔案裡,如果提到符号檔案,一般都是指程式資料庫檔案)

      我們知道,pdb檔案裡記錄着調試程式所需的所有資訊,調試器進行源碼調試時,是先通過pdb檔案找到對應符号的源檔案所在位置,并定位目前代碼在源檔案裡的位置,顯示到調試器裡。是以,使用調試器源碼調試時,必須保證以下幾點,才能正确調試:

        1.檔案版本統一。可執行程式、程式資料庫檔案還有源碼檔案必須是同一工程同一時刻編譯所生成的。

        2.設定符号檔案路徑。確定調試過程中所有子產品的符号檔案齊全并在調試器裡正确設定符号檔案路徑。

        3.設定源檔案路徑。必須把源碼檔案放到程式資料庫檔案所記錄的目錄下(編譯時,源檔案所在目錄),或者通過調試器設定源碼檔案所在目錄(如果調試器支援)。

預設情況下,調試器會在可執行子產品所在目錄搜尋程式資料庫檔案,如果沒有找到才到其他目錄搜尋。源碼檔案路徑則通過程式資料庫檔案來擷取。WinDBG和OllyDBG都支援重新設定符号檔案路徑,并通過微軟符号檔案伺服器查找系統子產品的符号檔案。源碼檔案的路徑WinDBG支援自定義而OllyDBG則不支援,隻能将源碼檔案放置于工程編譯時的目錄下。

        WinDBG設定符号路徑的方法:

        1.打開WinDBG通過圖形界面菜單上File->Symbol File Path(ctrl+s)來設定,路徑間隔用分号隔開。如:srv*;D:\MySymbols;E:\SystemSymbols

        2.打開WinDBG在command browser(指令視窗)裡通過輸入指令來設定。指令如下:

        a.清除符号路徑并設定為微軟符号檔案伺服器.symfix。也可順便添加上自己本地符号路徑.symfix+ xxx。

        b.檢視目前的符号檔案路徑.sympath。

        c.追加路徑.sympath+ xxx。

        如果調試項目正在運作,設定完符号檔案路徑後還不能正常解析,則需要輸入.reload指令來重新導入符号。其他符号相關指令可查閱WinDBG幫助。

        WinDBG設定源碼檔案路徑的方法:

1.打開WinDBG通過圖形界面菜單上File->Source File Path(ctrl+p)來設定,路徑間隔用分号隔開。如:D:\MySources;E:\Project

2.打開WinDBG在command browser(指令視窗)裡通過輸入指令來設定。指令如下:

檢視目前的源碼檔案路徑.srcpath。

追加路徑.srcpath+ xxx。

 如果調試項目正在運作,設定完源碼檔案路徑後還是不能顯示源代碼,先檢查圖形界面上Debug->Source Mode是否啟用,之後再輸入.reload來重新整理。

        OllyDBG設定符号路徑的方法:

        打開OllyDBG通過圖形界面上Debug->Select Path For Symbol來設定。

        OllyDBG設定源碼檔案路徑的方法: