[发明专利]一种内存泄露过程追溯方法及装置有效
申请号: | 201810316302.8 | 申请日: | 2018-04-10 |
公开(公告)号: | CN108664394B | 公开(公告)日: | 2021-12-14 |
发明(设计)人: | 王凯峰;王俏;王天凤 | 申请(专利权)人: | 奇安信科技集团股份有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/50 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 王莹;李相雨 |
地址: | 100088 北京市西城区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 内存 泄露 过程 追溯 方法 装置 | ||
1.一种内存泄露过程追溯方法,其特征在于,包括:
根据原生内存操作函数生成更新后内存操作函数,通过所述更新后内存操作函数对所述原生内存操作函数分配的第一内存添加头部和尾部,得到第二内存;
若根据预先获取的可执行程序,以及所述可执行程序对应保留栈帧的动态库的虚拟地址的起止地址判断获知所述更新后内存操作函数的地址在所述起止地址内,则确定所述第二内存可追溯;其中,所述起止地址为预先获取的起始地址和结束地址;所述更新后内存操作函数的地址包括所述更新后内存操作函数及其所有的上级调用函数的地址,且所述更新后内存操作函数的地址是所述更新后内存操作函数的虚拟地址;
所述可执行程序在执行过程中,所述可执行程序及其依赖的动态库调用内存操作函数时,调用所述更新后内存操作函数,根据当前函数的调用栈信息获取当前函数的调用链关系,将所述调用链关系存储在所述第二内存的头部,并将所述第二内存添加至全局链表中,或,判断所述当前函数为内存释放函数,将所述第二内存通过所述内存释放函数从所述全局链表中移除;
若所述可执行程序执行结束后所述全局链表不为空,则确定存在内存泄露,并根据所述更新后内存操作函数的调用关系追溯内存泄露的过程。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若后一次获取的调用链的调用次数大于前一次获取的调用链的调用次数,则确定存在内存泄露,并根据所述更新后内存操作函数的调用关系追溯内存泄露的过程。
3.根据权利要求1-2任一项所述的方法,其特征在于,所述根据原生内存操作函数生成更新后内存操作函数,具体包括:
在不改变可执行程序中调用所述原生内存操作函数的逻辑和调用代码的条件下,修改所述原生内存操作函数的预加载的环境变量或钩子函数,或重新定义所述原生内存操作函数的链接关系,或根据目标标识优先解析链接器。
4.根据权利要求1-2任一项所述的方法,其特征在于,所述头部中存储的信息包括:调用信息、分配的内存地址、实际使用的内存地址、分配的内存总大小、实际使用的内存总大小和内存越界确认信息。
5.一种内存泄露过程追溯装置,其特征在于,包括:
内存更新模块,用于根据原生内存操作函数生成更新后内存操作函数,通过所述更新后内存操作函数对所述原生内存操作函数分配的第一内存添加头部和尾部,得到第二内存;
追溯判断模块,用于若根据预先获取的可执行程序,以及所述可执行程序对应保留栈帧的动态库的虚拟地址的起止地址判断获知所述更新后内存操作函数的地址在所述起止地址内,则确定所述第二内存可追溯;其中,所述起止地址为预先获取的起始地址和结束地址;所述更新后内存操作函数的地址包括所述更新后内存操作函数及其所有的上级调用函数的地址,且所述更新后内存操作函数的地址是所述更新后内存操作函数的虚拟地址;
内存操作模块,用于所述可执行程序在执行过程中,所述可执行程序及其依赖的动态库调用内存操作函数时,调用所述更新后内存操作函数,根据当前函数的调用栈信息获取当前函数的调用链关系,将所述调用链关系存储在所述第二内存的头部,并将所述第二内存添加至全局链表中,或,判断所述当前函数为内存释放函数,将所述第二内存通过所述内存释放函数从所述全局链表中移除;
泄露追溯模块,用于若所述可执行程序执行结束后所述全局链表不为空,则确定存在内存泄露,并根据所述更新后内存操作函数的调用关系追溯内存泄露的过程。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
泄露判断模块,用于若后一次获取的调用链的调用次数大于前一次获取的调用链的调用次数,则确定存在内存泄露,并根据所述更新后内存操作函数的调用关系追溯内存泄露的过程。
7.根据权利要求5-6任一项所述的装置,其特征在于,所述内存更新模块具体用于在不改变可执行程序中调用所述原生内存操作函数的逻辑和调用代码的条件下,修改所述原生内存操作函数的预加载的环境变量或钩子函数,或重新定义所述原生内存操作函数的链接关系,或根据目标标识优先解析链接器。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于奇安信科技集团股份有限公司,未经奇安信科技集团股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810316302.8/1.html,转载请声明来源钻瓜专利网。