CN104239205A - 内存重复释放的检测方法 - Google Patents
内存重复释放的检测方法 Download PDFInfo
- Publication number
- CN104239205A CN104239205A CN201410449677.3A CN201410449677A CN104239205A CN 104239205 A CN104239205 A CN 104239205A CN 201410449677 A CN201410449677 A CN 201410449677A CN 104239205 A CN104239205 A CN 104239205A
- Authority
- CN
- China
- Prior art keywords
- memory
- internal memory
- released
- hash bucket
- pointer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 16
- 230000006870 function Effects 0.000 claims description 3
- 238000000034 method Methods 0.000 abstract description 2
- 238000005516 engineering process Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 208000024891 symptom Diseases 0.000 description 1
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提出了一种内存重复释放的检测方法,首先构建哈希桶;首次释放内存时候,记录被释放内存的内存指针,将被释放内存的内存指针存入哈希桶;下次释放内存时,查找被释放内存的内存指针是否在哈希桶中存在,如果不存在,再计算其哈希值,得到序列号,然后根据序列号,将该被释放内存的内存指针存入哈希桶;如果存在,则表明产生了内存重复释放的错误,则打印出错误信息。本发明能有效地检测出内存重发释放的错误情况,并且,简单有效,效率高、实际操作也方便。
Description
技术领域
本发明涉及一种内存错误检测的方法,尤其是出现内存重复释放错误的检测方法。
背景技术
C语言和C++语言程序中的内存错误非常有害,它们很常见,并且可能导致严重的后果。来自计算机应急响应小组和供应商的许多最严重的安全公告都是由简单的内存错误造成的。自从70年代末期以来,C语言程序员就一直讨论此类错误,但其影响至今仍然很大。
此外,内存错误一旦发生,往往很难找出发生的原因,从而也无法去纠正。需要借助于一些强有力工具的支撑。
存在内存错误的C语言和C++语言程序会导致各种问题。如果它们泄漏内存,则运行速度会逐渐变慢,并最终停止运行;如果覆盖内存,则会变得非常脆弱,很容易受到恶意用户的攻击。
在可以使用C语言或C++语言的地方,也广泛支持使用其他许多通用语言(如JavaTM、Ruby、Haskell、C#、Perl、Smalltalk等),每种语言都有众多的爱好者和各自的优点。但是,从计算角度来看,每种编程语言优于C语言或C++语言的主要优点都与便于内存管理密切相关。与内存相关的编程是如此重要,而在实践中正确应用又是如此困难,以致于它支配着面向对象编程语言、功能性编程语言、高级编程语言、声明性编程语言和另外一些编程语言的所有其他变量或理论。
与少数其他类型的常见错误一样,内存错误还是一种隐性危害:它们很难再现,症状通常不能在相应的源代码中找到。
发明内容
本发明需解决的技术问题是提供一种简单有效、检测效果高的内存重复释放的检测方法。
为了解决上述的问题,本发明设计了一种内存重复释放的检测方法,其包括以下步骤:步骤1:首先构建哈希桶;步骤2:首次释放内存时候,记录被释放内存的内存指针,将被释放内存的内存指针存入哈希桶;步骤3:下次释放内存时,查找被释放内存的内存指针是否在哈希桶中存在,如果不存在,将该被释放内存的内存指针存入哈希桶;如果存在,则表明产生了内存重复释放的错误,则打印出错误信息。
作为本发明进一步改进,在所述步骤2中,还包括:通过哈希算法计算被释放内存的内存指针以得到序列号,根据所述序列号,将被释放内存的内存指针存入哈希桶对应的位置上。
作为本发明进一步改进,所述步骤3中,将被释放内存的内存指针存入哈希桶时,如果出现冲突,则利用冲突链记录。
作为本发明进一步改进,所述步骤3中,在打印出错误信息步骤之后,还将当前被释放内存的应有程序的函数调用栈打出。
作为本发明进一步改进,在所述步骤3中,将该被释放内存的内存指针存入哈希桶之前,先计算其哈希值以得到序列号,然后根据序列号,该被释放内存的内存指针存入哈希桶。
本发明能有效地检测出内存重发释放的错误情况,并且,简单有效,效率高、实际操作也方便。
附图说明
图1是本发明内存重复释放的检测方法的流程示意图。
具体实施方式
为了使本领域相关技术人员更好地理解本发明的技术方案,下面将结合附图和实施方式,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本发明一部分实施方式,而不是全部的实施方式。
本发明提供了一种内存重复释放的检测方法,能有效地检测出内存重复释放的问题,方便快速定位和修正。
如图1所示,本发明内存重复释放的检测方法包括:
步骤1:首先构建哈希桶。哈希桶用于记录被释放内存的内存指针,这样,就可知道哪些内存已经被释放过一次了。如果下次再释放内存时,被释放内存的内存指针在哈希桶中找到,即表明,该内存又被释放了,存在重复释放的错误。
步骤2:首次释放内存时候,记录被释放内存的内存指针,将被释放内存的内存指针存入哈希桶。在本实施例中,将被释放内存的内存指针存入哈希桶之前,还通过哈希算法计算被释放内存的内存指针以得到序列号,根据所述序列号,再将被释放内存的内存指针存入哈希桶对应的位置上。被释放内存的内存指针存入到哈希桶中,意味着被释放内存已经被释放过一次,通过哈希桶记录了其内存指针,相当于被释放的依据记录在哈希桶中。
步骤3:下次释放内存时,查找被释放内存的内存指针是否在哈希桶中存在,如果不存在,说明该被释放内存之前没有被释放过,不存在重复释放的问题,此时,可以将该被释放内存的内存指针计算出哈希值,得到序列号,然后根据序列号,将该被释放内存的内存指针存入哈希桶,在将被释放内存的内存指针存入哈希桶时,如果出现冲突,则利用冲突链记录;如果存在,则表明检测出该被释放内存之前被释放过,产生了内存重复释放的错误,打印出错误信息,以让用户知道检测出内存重复释放的问题,更进一步是,,在打印出错误信息步骤之后,还将当前被释放内存的应有程序的函数调用栈打出,以方便后续问题的跟踪和定位。
本发明能有效地检测出内存重发释放的错误情况,并且,简单有效,效率高、实际操作也方便。
以上仅表达了本发明的一种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (5)
1.一种内存重复释放的检测方法,其特征在于,包括以下步骤:
步骤1:首先构建哈希桶;
步骤2:首次释放内存时候,记录被释放内存的内存指针,将被释放内存的内存指针存入哈希桶;
步骤3:下次释放内存时,查找被释放内存的内存指针是否在哈希桶中存在,如果不存在,将该被释放内存的内存指针存入哈希桶;如果存在,则表明产生了内存重复释放的错误,则打印出错误信息。
2.根据权利要求1所述内存重复释放的检测方法,其特征在于,在所述步骤2中,还包括:
通过哈希算法计算被释放内存的内存指针以得到序列号,根据所述序列号,将被释放内存的内存指针存入哈希桶对应的位置上。
3.根据权利要求1所述内存重复释放的检测方法,其特征在于,所述步骤3中,将被释放内存的内存指针存入哈希桶时,如果出现冲突,则利用冲突链记录。
4.根据权利要求1所述内存重复释放的检测方法,其特征在于,所述步骤3中,在打印出错误信息步骤之后,还将当前被释放内存的应有程序的函数调用栈打出。
5.根据权利要求1所述内存重复释放的检测方法,其特征在于,在所述步骤3中,将该被释放内存的内存指针存入哈希桶之前,先计算其哈希值以得到序列号,然后根据序列号,该被释放内存的内存指针存入哈希桶。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201410449677.3A CN104239205A (zh) | 2014-09-05 | 2014-09-05 | 内存重复释放的检测方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201410449677.3A CN104239205A (zh) | 2014-09-05 | 2014-09-05 | 内存重复释放的检测方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN104239205A true CN104239205A (zh) | 2014-12-24 |
Family
ID=52227321
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201410449677.3A Pending CN104239205A (zh) | 2014-09-05 | 2014-09-05 | 内存重复释放的检测方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN104239205A (zh) |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN107451054A (zh) * | 2017-07-26 | 2017-12-08 | 武汉虹信通信技术有限责任公司 | 一种用于linux环境中的内存池调试方法 |
| CN109739645A (zh) * | 2018-12-25 | 2019-05-10 | 新华三技术有限公司成都分公司 | 内存管理方法、装置及存储介质 |
Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20130054923A1 (en) * | 2011-08-24 | 2013-02-28 | Microsoft Corporation | Automatic memory leak detection |
| CN103455424A (zh) * | 2013-09-18 | 2013-12-18 | 哈尔滨工业大学 | 基于VxWorks操作系统的动态内存泄漏检测方法及装置 |
-
2014
- 2014-09-05 CN CN201410449677.3A patent/CN104239205A/zh active Pending
Patent Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20130054923A1 (en) * | 2011-08-24 | 2013-02-28 | Microsoft Corporation | Automatic memory leak detection |
| CN103455424A (zh) * | 2013-09-18 | 2013-12-18 | 哈尔滨工业大学 | 基于VxWorks操作系统的动态内存泄漏检测方法及装置 |
Non-Patent Citations (1)
| Title |
|---|
| 高海昌等: "Linux平台下基于源代码插装的动态内存检测", 《小型微型计算机系统》 * |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN107451054A (zh) * | 2017-07-26 | 2017-12-08 | 武汉虹信通信技术有限责任公司 | 一种用于linux环境中的内存池调试方法 |
| CN109739645A (zh) * | 2018-12-25 | 2019-05-10 | 新华三技术有限公司成都分公司 | 内存管理方法、装置及存储介质 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US8191146B2 (en) | Virus localization using cryptographic hashing | |
| CN103034807B (zh) | 恶意程序检测方法和装置 | |
| EP2795525B1 (en) | Augmenting system restore with malware detection | |
| RU2014121249A (ru) | Системы и способы защиты от вредоносного программного обеспечения на основе нечеткого вайтлистинга | |
| US20190087571A1 (en) | Method and system for detecting attacks on cyber-physical systems using redundant devices and smart contracts | |
| US9003240B2 (en) | Blackbox memory monitoring with a calling context memory map and semantic extraction | |
| US20160062700A1 (en) | System, method for cleaning memory space and terminal device with memory space cleaning function | |
| US20180241554A1 (en) | Configurable crypto hardware engine | |
| CN104731696A (zh) | 定位程序代码中bug的方法及相关装置 | |
| CN106547648A (zh) | 一种备份数据处理方法及装置 | |
| CN109871290B (zh) | 应用于Java的调用堆栈追踪方法、装置和存储介质 | |
| CN104239205A (zh) | 内存重复释放的检测方法 | |
| CN108845916A (zh) | 平台监控与告警方法、装置、设备与计算机可读存储介质 | |
| CN105988886A (zh) | 一种运维过程中的故障处理方法及装置 | |
| CN104298935A (zh) | 嵌入式设备固件的保护方法与装置 | |
| CN103778114B (zh) | 文件修复系统和方法 | |
| CN108021490A (zh) | 一种硬盘故障域检测方法、装置和计算机可读存储介质 | |
| CN104778406B (zh) | 一种基于文件指纹对恶意代码统一命名的方法及其系统 | |
| WO2013152672A1 (zh) | 病毒趋势异常的监控方法及装置 | |
| CN102404715A (zh) | 基于良性蠕虫的手机蠕虫病毒对抗方法 | |
| CN108549551A (zh) | 一种服务器网卡的启动方法、装置及设备 | |
| CN105491002A (zh) | 一种高级威胁追溯的方法及系统 | |
| EP3461053A1 (en) | Fault attacks counter-measures for eddsa | |
| CN114237665B (zh) | 补丁更新方法、装置、计算设备及存储介质 | |
| CN106549766A (zh) | 一种评估报告的处理方法及相关设备 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| C06 | Publication | ||
| PB01 | Publication | ||
| EXSB | Decision made by sipo to initiate substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| RJ01 | Rejection of invention patent application after publication |
Application publication date: 20141224 |
|
| RJ01 | Rejection of invention patent application after publication |