日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

windbg调试实例(4)--句柄泄露

發布時間:2025/3/20 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windbg调试实例(4)--句柄泄露 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

同事介紹了一篇調試句柄泄露的blog文章,今天有空看了一下,這家伙用視頻的方式錄下整個調試的過程,學習一目了然,真是有心。鑒于學習的過程總結一下能加深記憶,所以我這里做個記錄,感興趣的朋友可以看這里:http://blogs.msdn.com/ntdebugging/archive/2007/09/14/talkbackvideo-understanding-handle-leaks-and-how-to-use-htrace-to-find-them.aspx

??? 如果你不喜歡英文,那就可以看下面我蹩腳的解釋了。

1、用c++寫一個句柄泄露的樣例程序:

?

#include "stdafx.h"
#include <windows.h>
void?fun1(void);
void?fun2(void);
void?fun3(void);
void?fun4(void);
int?main(int?argc,?char*?argv[])
{
??????while(1)
??????{
????????????fun1();
????????????fun2();
????????????Sleep(100);
??????}
??????return?0;
}
void?fun1(void)
{
??????fun3();
}
void?fun2(void)
{
??????fun4();
}
void?fun3(void)
{
??????HANDLE?hEvent;
??????hEvent?=?CreateEvent(NULL,TRUE,TRUE,NULL);
??????CloseHandle(hEvent);
}
void?fun4(void)
{
??????HANDLE?hEvent2;
??????hEvent2?=?CreateEvent(NULL,TRUE,TRUE,NULL);//這里只打開但是沒關閉句柄
}

代碼非常簡單,明眼人一看就能看出哪里有問題,那么程序編譯后用windbg怎么調出來呢??

2、windbg調試

1)找到windbgs安裝目錄下的gflags.exe工具,該工具可用來打開windows自帶的一些調試選項,具體gflags.exe的詳細使用可以查看windbg幫助;

這里我們設置勾上application verifiwer,該工具主要可用來對程序做一些穩定性的檢測,本次調試主要用于保存棧的相關信息。同時設置stack backtrace即棧的大小為10.

?

2)運行windbg,打開第一步編譯的程序,并使其跑起來;此時你查看任務管理器中的句柄信息,會發行相應進程句柄一直在增加。

3)windbg用ctrl+break命令中斷進程運行,用!htrace -enable命令開啟句柄檢測;htrace提供了進行句柄相關檢測的命令,可查看windbg幫助。

同時用g命令讓程序運行。

4)再次中斷進程,使用!htrace -snapshot命令,獲得此時進程句柄的鏡像。并再次讓程序運行。

5)第三次中斷進程運行,我們再使用!htrace -diff命令獲得當前句柄狀態與第4步 snapshot鏡像句柄的差異;

我們可以發現:新增很多打開的句柄,平常情況下這些打開的句柄有可能不是泄露,需要具體分析,但是本次示例程序太簡單,所以剛好所有打開的句柄都屬于泄露的。

6)我們使用lsa?傳遞指定位置對應的代碼,lsa??handlew2!fun4+0x0000002e

?

到這里,我們就找到了泄露句柄的函數,真是神奇啊。

轉載于:https://www.cnblogs.com/xumaojun/p/8544156.html

總結

以上是生活随笔為你收集整理的windbg调试实例(4)--句柄泄露的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。