某日,一个我编写的Delphi 应用(dll 插件)被发现运行一段时间后,系统的PF 占用其高且下不来。
后在任务管理器中发现此应用所在的exe 在运行期间的句柄计数会稳定累积增加, user对象、GDI对象计数未发现明显异常。
使用SleuthQA CodeWatch( 以下简称 CW) 调试此dll, 过程如下:
Step1. 准备工作
1.1 CW-File-NewProject,选择要分析的模块,即本应用的dll
1.2 选择模块对应的Host EXE
Step 2 运行应用,采集信息
1.3 CW 主界面,点击执行程序,正常进行操作,CW自动采集EXE执行期间的event。
Step 3 结束exe, 查看采集的信息
3.1 正常退出exe,CW弹出初步结果, 这里可以看到在刚才的运行期间中该DLL发生了3次未预计的操作系统资源泄漏 、1次捕获的内存泄漏
3.2
这里可以看到3次的资源泄漏其实是-1个window未关闭、1个process
handle、1个ThreadHandle未关闭。窗口泄漏的根源发现是在某个单元中创建TTimer未释放,VCL的TTimer其实就是开个窗口接
收WM_TIMER,暂且不表。
3.3
泄漏时的线程栈表明发生在 uExtractor1.pas 181行处,代码片断如下。
此处创建了一个额外的工作exe,如果该工作exe在规定时间内正常退出则会关闭该工作exe的进程、线程句柄;但是如果超时了,会调用另一个公共函数
KillProc 杀掉该exe及其子孙进程,这里范了错误,在杀掉后没有关闭该exe的句柄。
3.4 修改代码即使KillProc 也要关闭 hProcess hThread。 OK! 泄漏问题解决
总结:
1. Dll 的代码一定要谨慎编写,因为申请的系统资源都是隶属于主调exe的,主调exe不退出,中间泄漏的资源操作系统都没办法帮你自动回收;
2. CreateProcess后打开的进程句柄一定要释放,即使该程序被另外的地方杀掉了,因为只要一处打开的句柄不关闭,操作系统为该进程维护的内核对象的句柄计数都不会减到0,导致泄漏
分享到:
相关推荐
AQTime进行内存泄露和资源泄漏监控.pdf
JProfiler对应用服务器内存泄漏问题诊断解决方案
超强大的资源检测工具,可以实时跟踪程序使用的Bitmap, Brush,Pen,DC, MemDc,Font,Region,Palette等。并且能够显示具体的资源如: Bitmap:能显示内存中的Bitmap图像。 Brush: 画刷的颜色 。 。 。
aspcms爆后台地址,秒杀老版本,修改后台地址一样能跳到真实地址
资源泄露检测 C C++开发者必备修养。 开发者必看。
VC资源内存泄露检测工具, bear.exe
Java资源泄露静态分析
一款很好用的Windows下GDI资源泄露检测工具,可以跟踪GDI资源的泄露情况。
Android内存泄漏简介 不少人认为java程序,因为有垃圾回收机制,应该没有内存泄漏 1.引用没有释放造成的内存泄漏 2.资源对象没有关闭造成的内存泄漏 3.一些不良代码造成的内存压力 4.JNI代码的内存泄漏
存在一个比较奇葩的文件直接将一些属于不可访问的zzz_config.php的内容直接给回显了,该信息泄露文件位于plugins/webuploader/js/webconfig.php,可以直接获取到管理后台的管理路径名称,再也不用去爆破admin加3位...
后台IP限制系统V2.0 脚本编写:loke 主页:www.loke.com.cn 这个系统写到2.0后个人感觉再扩展下去也没什么意义了,本人也没有兴趣把这个所谓的系统搞成网站的一个安全体系,当然如果以后有机会还是会去尝试的。。。...
利用JProfiler对应用服务器内存泄漏问题诊断一例.doc 利用JProfiler对应用服务器内存泄漏问题诊断一例.doc 利用JProfiler对应用服务器内存泄漏问题诊断一例.doc
后台程序中经常会存在一部分内存泄露,但是不能很好的定位造成内存泄露的代码,并进行修改,内存泄露不进行修改就会造成程序运行时占用的内存不断升高,逐渐的导致系统的不稳定,现将前一段时间通过GDB调试工具查找内存...
DS_Store 文件泄露 是一个 .DS_Store 文件泄漏利用脚本,它解析.DS_Store文件并递归地下载文件到本地。 .DS_Store是Mac下Finder用来保存如何展示文件/文件夹 的数据文件(即文件夹的显示属性的,和比文件图标的摆放...
内存泄漏、内存越界是最常见的内存问题之一。 内存泄漏如果不是很严重的话,在短时间内对程序不会造成太大的影响,而且在进程终止的时候,所有分配的内存都会释放掉。但是对于长时间运行的程序,其破坏力是惊人的,...
本子主题美化包无加密无授权无暗链,使用本美化包前请先下载最新ripro主题(建议使用正版),如若使用破解版主题,请先用D盾扫描确保无加密无后门后再使用,如若使用有后门的破解主题导致网站信息泄露,本站概不负责...
JProfiler对应用服务器内存泄漏问题诊断
数据安全是当前安全领域最为火热的话题之一,很多企业受困于敏感信息访问监控、预警、追溯能力的不足,在信息泄露事件发生时往往束手无策。 针对企业内部的后台系统的敏感数据访问监测,挖土带来了他的解决方案:...
大规模源代码增量式资源泄漏检测方法.pdf
利用JProfiler对应用服务器内存泄漏问题诊断一例