關於createMutex的神奇bug

前言

最近遇到一個神奇的bug:調用CreateMutex返回句柄值爲空,但GetLastError值爲0

解決思路

首先,該問題並沒有定位到原因,最後是換了個mutex名字就解決了。

1、使用Process Explorer查找當前創建Mutex名字

結果是查找記錄爲空,說明本機中不存在該Mutex句柄

2、使用windbg調試該exe

2.1 下斷點

通過代碼知道該互斥體是在checklastinstance函數裏面創建的,調用命令bm xx!*checklastinstance下斷點,可以通過命令bl查看下了哪些斷點。

2.2 運行

調用命令g,當遇到斷點停住的時候,運行F10逐行調試,可以通過調用命令alt 7打開彙編界面,從而知道調用createMutex的參數。

執行du 00b3e12c查看createMutex的參數三值,即mutex名字(該步驟是確保第一步搜索的mutex名字無誤)

當執行完call function後,通過執行! teb查看該線程的teb,目的是查看lasterror值

通過查看該peb可知,lasterror值爲0,但還是沒有定位到爲啥會創建的mutex爲空,但lasterror值爲0的原因。。。。

不過從該bug學到了:

1、如何查找系統中哪些進程用了某個mutex

2、用windbg從peb中獲取lasterror值

3、熟悉彙編語言

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章