|
程序的功能是找到所有的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 源代码下载地址: |
本文介绍了一种用于检测并定位GDI资源泄漏的方法,包括编写简单调试器、注入DLL到指定进程、拦截API调用等技术步骤,并提供了下载和源代码链接。

6956

被折叠的 条评论
为什么被折叠?



