一个GDI资源泄漏检测程序

程序的功能是找到所有的GDI的资源泄漏并定位创建这些泄漏资源的调用栈,如果有可用调试符,可以以modulename!functionname的形式列出调用栈,双击调用栈可以定位到创建这些泄漏资源的源代码。工作原理:

以调试方式启动待检测程序,通过在合适的时机在待检测程序创建远程线程的方式注入一个拦截GDI对象创建和删除的DLL,该DLL在Dllmain中拦截所有已加载和未加载的dll对GDI对象创建和删除的调用。每个拦截创建GDI对象的函数做的工作都是记录下成功创建的GDI对象句柄和当时的调用栈,每个拦截删除GDI对象的函数做的工作都是删除成功删除GDI对象对应的记录。在用户退出待检测程序后,把仍然存在的GDI创建记录序列化到与检测程序共享的内存映射文件中,这样检测程序就可以列出泄漏清单及当时创建时的调用栈。

主要技术:

1.写一个简单调试器;(见MSDN调试器API)

2.注入DLL到指定进程;(见《Windows核心编程》第22章)

3.拦截API调用;(见《Windows图形编程》第1章)

4.栈跟踪;(见MSDN StackWalk64 API)

5.从地址到调试符;(见MSDN DbgHelp Functions)

已经成功完成前两步,应该说技术上没有任何问题了。

下载地址:

http://upload.programfan.com/upfile/20070828081394.rar

源代码下载地址:

http://www.codeproject.com

你可能感兴趣的:(编程,windows,工作,api,dll,图形)