create user mode stack trace database引起的“内存泄漏”

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiongya8888/article/details/84698835

诡异的内存泄漏

最近在调试一个服务端程序的内存泄漏问题,代码改好后准备再进行一次测试,为了防止出问题,特意开启了create user mode stack trace database,待程序运行后用umdh转储了一份日志文件,并记录下当时的Private Size为128M。结果第二天去看,Private Size变为了138M,还是泄漏了10M?但是诡异的是增长的这10M不是在堆里,而是在Priavte Data里,而我的内存申请都是在堆里的,不会调用VirtualAlloc之类的函数直接申请内存。

泄漏的内存有什么内容?

使用ce查看泄漏的内存数据,没有发现什么有用的信息;将泄漏的内存dump出来,然后用IDA的shift+F12功能列出所有字符串,依然没有发现有用的信息。

动态调试泄漏的内存

使用x64dbg附加到进程,在泄漏的内存段中,随便找一个正在变化的内存地址,然后下写入断点,发现断在了RtlStdLogStackTrace函数内部,看这函数名,难道和gflag设置的create user mode stack trace database选项有关系?果不其然,在关闭了该选项后,程序启动时的Priavte Data少了2M,后面测试中也没再出现Priavte Data泄漏的问题。

猜你喜欢

转载自blog.csdn.net/xiongya8888/article/details/84698835