背景
自己手裡有乙個用duilib開發的工具在某乙個使用者那邊高頻崩潰。只要一啟動就崩潰,一天崩潰幾十次,很奇怪。從使用者那邊抓取dump檔案回來,調出windbg進行除錯查詢原因。
過程
1. 準備好pdb及原始碼檔案,windbg載入dump起來。命令列輸入.ecxr, 然後切換看堆疊如下:
報錯的**在這裡:
這個工具是用duilib做的介面,handlemessage處理訊息後跳轉到cwebbrowserui::addref中,但是我的**裡根本就沒有用到cwebbrowserui這個類,怎麼會跳轉到這個類中呢?奇怪。
2. 然後檢視了local,thread等資訊都沒有找到有用的線索。
3. 懷疑堆疊不准, 但windbg載入pdb檔案又能載入起來,對應的**也能找到,理論上來看應該是準的。但是**裡根本就沒有寫,但是堆疊卻跳轉到這個類裡了,莫名其妙。
4. 問了一下組內的另一大神,分析了一下,給出了乙個思路:eip暫存器。eip暫存器,用來儲存cpu要讀取指令的位址,cpu通過eip暫存器讀取即將要執行的指令。檢視eip暫存器的值,看一下它下一步要執行的動作是什麼?
5. 檢視eip的值
可以看見eip的記憶體位址,通過windbg memory視窗可以看到對應的值
看memory的值,竟然看見了trojan的字樣。覺得這個工具可能是中了病毒或者木馬。
6. 通過抓取的dump挨個分析,發現只要是出現崩潰堆疊是這樣的,exe的名字都是同乙個,基本上確認是同乙個exe,被病毒或木馬感染導致崩潰。因為沒有辦法聯絡到使用者,所以還只是猜測。
DUMP檔案除錯
一 vc6.0下 1 首先要生成 pdb和 map檔案,需要做以下設定 勾選紅色的地方 按上面截圖的設定好後編譯即可。二 dmp檔案生成 1 dmp 檔案的生成,這個需要依賴一些 來生成這個檔案,這裡就不貼 了。程式測試下這個函式。上面 讓他人為崩潰,執行完後崩潰,會生成dmp檔案。三 windbg...
C 生成dump檔案,除錯dump檔案
dump 檔案是程序的記憶體映象 可以把程式的執行狀態通過偵錯程式儲存到dump檔案中 dump 檔案是用來給驅動程式編寫人員除錯驅動程式用的 這種檔案必須用專用工具軟體開啟 比如使用 windbg visualstudio開啟 當我們的程式發布出去之後 在客戶機上是無法跟蹤自己 的 bug 的 所...
C 除錯之建立Dump檔案和除錯Dump檔案
如何在發布後程式中捕獲程式的崩潰和異常往往是比較麻煩的事情,一般採用日誌記錄的方法來記錄程式執行的每個流程,但是通常為了程式執行的效能,日誌記錄的方法只是記錄程式執行的每個主要的處理流程,不能進行具體詳細的記錄,比如for 迴圈中的崩潰記錄。c 語言中呼叫window api函式createfile...