前言
最近遇到一個神奇的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、熟悉彙編語言