CN101145129A - 一种嵌入式***内存写越界的检测方法及*** - Google Patents
一种嵌入式***内存写越界的检测方法及*** Download PDFInfo
- Publication number
- CN101145129A CN101145129A CNA2007101304269A CN200710130426A CN101145129A CN 101145129 A CN101145129 A CN 101145129A CN A2007101304269 A CNA2007101304269 A CN A2007101304269A CN 200710130426 A CN200710130426 A CN 200710130426A CN 101145129 A CN101145129 A CN 101145129A
- Authority
- CN
- China
- Prior art keywords
- memory
- overflow
- write
- memory block
- size
- 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
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明提供了一种嵌入式***内存写越界的检测方法,步骤如下:(a)定义检测内存大小;(b)当分配一内存块时,在与该内存块相邻的高地址处安置检测内存,并设置检测内存中内容的初始值;(c)在进行内存写越界检测时,比较检测内存中的值是否与所述初始值相等,若不相等便判断发生内存写越界。本发明可动态地在***发生内存写越界时及时检测出来,并可定位到申请该内存的文件名和行号,极大地方便了开发人员查找内存写越界的原因。同时,本发明还具有内存保护的功能,既适用于设备测试阶段,也适用于设备应用阶段。
Description
技术领域
本发明涉及嵌入式***的内存管理技术,尤其涉及嵌入式***中内存写越界的检测方法及***。
背景技术
一般在通讯设备中运行的是嵌入式***,该***可访问的是线性的内存地址空间,即***中任何一段程序都可以读取或写入该***的任何内存中。这使得嵌入式***中各个任务之间的内存数据可以随意访问,从而有可能通过内存块写越界来破坏本任务及其他任务的内存数据。内存写越界可能会引起严重的问题,由于相邻的内存数据被破坏了,可能使得程序的其他函数或者任务在执行时发生无法预测的后果,导致***异常,造成严重影响。
内存写越界是嵌入式***中很常见的一类问题,该问题一旦存在,往往会有不同的异常表现,一般很难查找和定位,并找出产生写越界的原因。
目前一般使用软件工具来检测内存写越界,但这有几点不足。第一,这些工具的内存开销比较大。第二,这些工具一般只能在应用程序的测试阶段使用,当应用程序发布到通信设备上运行时则不能使用。而有的内存写越界在测试阶段是难以发现的,往往只有在实际使用中才会出现,这就导致不能检测出全部的内存写越界。
发明内容
本发明所要解决的技术问题是提供一种嵌入式***内存写越界的检测方法及***,不仅能在嵌入式***的测试阶段使用,亦能在其实际应用阶段使用;在内存开销占用合理的前提下,可以准确检测并定位内存写越界,以便用户找到发生内存写越界的原因。
为解决上述技术问题,本发明提供的一种嵌入式***内存写越界的检测方法,包括步骤:
(a)定义内存块的检测内存大小;
(b)当分配一内存块时,在与该内存块相邻的高地址处安置检测内存,并设置检测内存中内容的初始值;
(c)在进行内存写越界检测时,比较检测内存中的值是否与所述初始值相等,若不相等便判断发生内存写越界。
进一步地,步骤(a)将检测内存大小定义为固定的字节数;或者,步骤(a)根据内存块的大小确定检测内存的字节数。
进一步地,步骤(a)将检测内存大小定义为4字节的整数倍。
进一步地,步骤(b)进一步包括:记录内存块的位置信息并置该内存块的状态为已使用;步骤(c)包括:当判断发生内存写越界的同时判断写越界的字节大小没有超过检测内存的大小,则发出内存写越界错误提示,并给出发生写越界的所述位置信息;或者,步骤(c)包括:当判断发生内存写越界的同时判断写越界的字节大小超过检测内存的大小,则发出相邻内存数据已遭破坏的警告,并给出发生写越界的位置信息。
进一步地,位置信息为申请分配内存块的代码所在文件的文件名和文件行号;或者,位置信息为申请分配所述内存块的代码所在文件的唯一标识号和文件行号。
进一步地,步骤(c)的内存写越界检测是在释放内存块时进行;或者,步骤(c)的内存写越界检测是通过编程接口由应用程序主动触发进行。
为解决上述技术问题,本发明提供的一种嵌入式***内存写越界的检测***,包括:初始化单元、内存块单元、内存块头信息单元以及内存写越界检测单元;其中:
初始化单元与内存块单元、内存写越界检测单元连接,用于定义内存块的检测内存大小,根据内存块分配申请命令在与该内存块相邻的高地址处安置检测内存,设置检测内存中内容的初始值,并将检测内存大小及检测内存的初始值传输给内存写越界检测单元;
内存块单元与内存块头信息单元及内存写越界检测单元连接,用于在接收到内存块分配申请命令时,将分配的内存块大小和申请该内存块的位置信息传输给内存块头信息单元;在收到内存块释放命令时,向内存写越界检测单元传输内存块写越界检测命令;
内存块头信息单元与内存写越界检测单元连接,用于将接收到的内存块大小和位置信息进行记录,并在接收到内存块写越界检测单元发出的获取内存块信息命令时,将内存块大小传送给内存写越界检测单元;
内存写越界检测单元用于在接收到内存块写越界检测命令时,向内存块头信息单元发出获取内存块信息命令,根据接收到的内存块大小、检测内存大小以及检测内存的初始值进行内存写越界检测。
进一步地,初始化单元将检测内存大小定义为固定的字节数;或者,初始化单元根据分配的内存块的大小确定检测内存大小。
进一步地,初始化单元将检测内存大小定义为4字节的整数。
进一步地,内存块头信息单元在接收到内存块写越界检测单元发出的获取内存块信息命令时,还将位置信息传输给内存写越界检测单元;内存写越界检测单元若检测出有内存写越界错误发生时提示发生写越界错误的位置信息。
进一步地,内存块头信息单元和内存块写越界检测单元发出的位置信息包括申请该内存的代码所在文件的文件名和文件的行号;或者,位置信息包括申请该内存的代码所在文件的唯一标识码和文件的行号。
进一步地,内存块单元在收到释放内存块命令时发出内存块写越界检测命令;或者,内存块单元通过应用程序主动触发而发出内存块写越界检测命令。
采用本发明提供的内存写越界的检测方法,可以动态地在***发生内存写越界时及时检测出来,并可以定位到申请该内存的文件名和行号,极大地方便了开发人员查找内存写越界的原因。本发明还具有内存块保护的功能,即只要内存越界写的字节数不超过检测内存的大小,就可以在检测出内存写越界的同时亦不破坏相邻的内存数据,从而对该内存数据起到一定的保护作用。另外,本发明不显著增加内存块申请的时间,且内存开销占用合理,因而能避免对***性能的影响。本发明不仅适用于通讯设备的测试阶段,且适用于通讯设备的实际应用阶段。
附图说明
图1为本发明嵌入式***内存写越界检测方法实施例流程图;
图2为本发明记录申请内存块位置信息示意图;
图3为本发明检测内存写越界示意图示;
图4为本发明提供的嵌入式***内存写越界检测***原理框图。
具体实施方式
用本发明提供的装置实现的嵌入式***内存写越界的检测方法,其步骤如下:(a)定义检测内存大小;(b)当分配一内存块时,在与该内存块相邻的高地址处安置检测内存,并设置检测内存中内容的初始值;(c)在进行内存写越界检测时,比较检测内存中的值是否与该初始值相等,若不相等则判断发生内存写越界的界限。通过本发明的上述步骤措施,使得在使用分配的内存块发生写越界错误后能被及时地检测和定位,从而能够避免用户***发生无法预测的结果。
以下结合实施例和附图详细说明本发明方法的技术方案。
如图1所示是本发明提供的嵌入式***内存写越界的检测方法实施例流程图,该流程的具体的步骤如下:
步骤101:定义检测内存大小;
检测内存是指与内存块相邻的一段内存,该段内存是为了检测是否发生了内存写越界。一般内存写越界发生在数组下标越界,这种越界往往是破坏内存块的高地址内存数据。在每个内存块相邻的高地址处有了一段检测内存后,写越界时就先写入检测内存。如果写越界的字节大小没有超过检测内存的大小,则不会破坏相邻的内存数据。如果写越界的字节大小超过了检测内存的大小,则还是会破坏相邻的内存数据。因此需要合理的定义内存块的检测内存大小。一般把检测内存大小定义为4字节的整数倍。
在此实施例中,定义检测内存占用4个字节。
步骤102:当分配一内存块时,在与内存块相邻的高地址处安置检测内存,并设置检测内存中内容的初始值;同时,记录申请该内存的位置信息并置内存块状态为已使用;
每一个内存块对应有一个信息块记录申请内存的位置信息和内存块的状态。位置信息可以通过文件名和文件的行号来表示,也可以通过文件的唯一标识(id)码和文件行号来表示。内存块的状态包括但不限于空闲和已使用两种状态。在释放内存块的时候,只是把内存块的状态置为空闲即可。
请同时参见图2,当应用程序运行到Func函数中申请一个8字节内存块的函数Alloc,并被成功地分配到该内存块时,***将函数Alloc所传入的申请该内存的代码所在的文件名file.cpp和文件行号记录到内存块信息块中,并置该内存块的状态为“已使用”;同时,设置检测内存的初始值,该初始值可以随意设置,譬如设置初始值为“eeee”。在Func函数中调用Alloc函数后,又调用memcpy函数写入了10个字节的内容值到该内存块中,如附图3所示,写入的字节数超过了申请的内存块的大小,发生了内存写越界。超出的2个字节则会写入到检测内存中,则检测内存中的前两个字节由“ee”变为了“ld”。
步骤103:在进行内存写越界检测时,比较检测内存中的值是否与初始值相等,若否表示发生了内存写越界则执行步骤104,若是则步骤结束;
步骤104:发出内存写越界错误提示,并给出发生写越界的位置信息,步骤结束。
在释放内存块时,譬如在Func函数中调用free函数时,***比较检测内存中的值是否与先前设置的初始值相等,只要越界检测内存中有任何一个字节的值不等于该初始值,即可判断发生了内存写越界。如图3所示,检测内存的4个字节设置的初始值都是“e”,而在释放的时候前两个字节变为了“ld”,则判断发生了内存写越界,在发出内存写越界错误提示的同时给出产生写越界的位置信息,即申请内存块时记录下来的文件名file.cpp和文件行号100。本实施例写越界的字节大小没有超过检测内存的大小,故不会破坏相邻的内存数据。如果写越界的字节大小超过了检测内存的大小,可能会破坏相邻的内存数据,则***在给出产生写越界的位置信息的同时发出相邻内存数据可能已遭破坏的警告。
该比较操作也可以通过编程接口由应用程序主动触发进行。
图4为本发明提供的嵌入式***内存写越界的检测***原理框图。该检测***包括:初始化单元、内存块单元、内存块头信息单元以及内存写越界检测单元。
其中,初始化单元与内存块单元、内存写越界检测单元连接,用于定义内存块的检测内存大小,根据内存块分配申请命令在与该内存块相邻的高地址处安置检测内存,并设置检测内存中内容的初始值;在此,检测内存大小通常为4字节的整数倍;
内存块单元与内存块头信息单元及内存写越界检测单元连接,用于在接收到内存块分配申请命令时,将分配的内存块大小和申请该内存块的位置信息传输给内存块头信息单元,该位置信息包括申请该内存的代码所在文件的文件名(或文件的唯一标识码id)和文件的行号;在收到内存块释放命令时,向内存写越界检测单元传输内存块写越界检测命令;
内存块头信息单元与内存写越界检测单元连接,用于将接收到的内存块大小和位置信息进行记录,同时,记录申请该内存的位置信息并置内存块状态为已使用;在接收到内存块写越界检测单元发出的获取内存块信息命令时,将内存块大小和该内存块的位置信息传送给内存写越界检测单元;
内存写越界检测单元在接收到内存块写越界检测命令时,根据检测内存大小和检测内存的初始值以及内存块大小进行内存写越界检测。如果内存写越界检测单元检测出有内存写越界错误发生,但写越界的字节大小未超过检测内存的大小,便发出写越界错误提示,同时提示发生写越界错误的位置信息;如果内存写越界检测单元检测出有内存写越界错误发生,且写越界的字节大小超过了检测内存的大小,则发出数据可能已被破坏的警告,同时发出发生写越界错误的位置信息。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,本领域技术人员当可根据本发明作出各种相应的改进和润饰,但这些相应的改进和润饰都应属于本发明所附的权利要求的保护范围。
Claims (12)
1.一种嵌入式***内存写越界的检测方法,其步骤如下:
(a)定义内存块的检测内存大小;
(b)当分配一内存块时,在与所述内存块相邻的高地址处安置所述检测内存,并设置所述检测内存中内容的初始值;
(c)在进行内存写越界检测时,比较所述检测内存中的值是否与所述初始值相等,若不相等便判断发生内存写越界。
2.按照权利要求1所述的方法,其特征在于,步骤(a)将所述检测内存大小定义为固定的字节数;或者,步骤(a)根据所述内存块的大小确定所述检测内存的字节数。
3.按照权利要求2所述的方法,其特征在于,步骤(a)将所述检测内存大小定义为4字节的整数倍。
4.按照权利要求1所述的方法,其特征在于,步骤(b)进一步包括:记录所述内存块的位置信息并置该内存块的状态为已使用;步骤(c)进一步包括:当判断发生内存写越界的同时判断写越界的字节大小没有超过检测内存的大小,则发出内存写越界错误提示,并给出发生写越界的所述位置信息;或者,步骤(c)进一步包括:当判断发生内存写越界的同时判断写越界的字节大小超过检测内存的大小,则发出相邻内存数据已遭破坏的警告,并给出发生写越界的所述位置信息。
5.按照权利要求4所述的方法,其特征在于,所述位置信息为申请分配所述内存块的代码所在文件的文件名和文件行号;或者,所述位置信息为中请分配所述内存块的代码所在文件的唯一标识号和文件行号。
6.按照权利要求1所述的方法,其特征在于,步骤(c)的所述内存写越界检测是在释放所述内存块时进行;或者,步骤(c)的所述内存写越界检测是通过编程接口由应用程序主动触发进行。
7.一种嵌入式***内存写越界的检测***,其特征在于,该检测***包括:初始化单元、内存块单元、内存块头信息单元以及内存写越界检测单元;其中:
所述初始化单元与内存块单元、内存写越界检测单元连接,用于定义检测内存大小,根据内存块分配申请命令在与所述内存块相邻的高地址处安置所述检测内存,设置检测内存中内容的初始值,并将所述检测内存大小及所述检测内存的初始值传输给所述内存写越界检测单元;
所述内存块单元与所述内存块头信息单元及所述内存写越界检测单元连接,用于在接收到所述内存块分配申请命令时,将分配的内存块大小和申请该内存块的位置信息传输给所述内存块头信息单元;在收到内存块释放命令时,向所述内存写越界检测单元传输内存块写越界检测命令;
所述内存块头信息单元与所述内存写越界检测单元连接,用于将接收到的所述内存块大小和所述位置信息进行记录,并在接收到内存块写越界检测单元发出的获取内存块信息命令时,将所述内存块大小传送给所述内存写越界检测单元;
所述内存写越界检测单元用于在接收到所述内存块写越界检测命令时,向所述内存块头信息单元发出所述获取内存块信息命令,根据接收到的所述内存块大小、所述检测内存大小以及所述检测内存的初始值进行内存写越界检测。
8.按照权利要求7所述的***,其特征在于,所述初始化单元将所述检测内存大小定义为固定的字节数;或者,所述初始化单元根据所述分配的内存块的大小确定所述检测内存大小。
9.按照权利要求8所述的检测***,其特征在于,所述初始化单元将所述检测内存大小定义为4字节的整数。
10.按照权利要求7所述的***,其特征在于,所述内存块头信息单元在接收到所述内存块写越界检测单元发出的获取内存块信息命令时,还将所述位置信息传输给所述内存写越界检测单元;所述内存写越界检测单元若检测出有内存写越界错误发生时提示发生写越界错误的所述位置信息。
11.按照权利要求10所述的***,其特征在于,所述内存块头信息单元和所述内存块写越界检测单元发出的所述位置信息包括申请该内存的代码所在文件的文件名和文件的行号;或者,所述位置信息包括申请该内存的代码所在文件的唯一标识码和文件的行号。
12.按照权利要求7所述的***,其特征在于,所述内存块单元在收到释放内存块命令时发出所述内存块写越界检测命令;或者,所述内存块单元通过应用程序主动触发而发出所述内存块写越界检测命令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101304269A CN101145129A (zh) | 2007-07-18 | 2007-07-18 | 一种嵌入式***内存写越界的检测方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2007101304269A CN101145129A (zh) | 2007-07-18 | 2007-07-18 | 一种嵌入式***内存写越界的检测方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101145129A true CN101145129A (zh) | 2008-03-19 |
Family
ID=39207666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2007101304269A Pending CN101145129A (zh) | 2007-07-18 | 2007-07-18 | 一种嵌入式***内存写越界的检测方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101145129A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657275A (zh) * | 2015-03-09 | 2015-05-27 | 浪潮软件集团有限公司 | 一种内存越界的定位方法及装置 |
CN106502926A (zh) * | 2016-09-26 | 2017-03-15 | 华为技术有限公司 | 一种内存监控方法、内存访问控制器及SoC*** |
WO2017162049A1 (zh) * | 2016-03-24 | 2017-09-28 | 广州广电运通金融电子股份有限公司 | 驱动模块内存数据监测方法及装置 |
CN108446122A (zh) * | 2018-03-22 | 2018-08-24 | 中国银行股份有限公司 | 一种参数一致性验证方法及装置 |
CN108664419A (zh) * | 2018-04-03 | 2018-10-16 | 郑州云海信息技术有限公司 | 一种确定内存大页数目的方法及其装置 |
CN110413521A (zh) * | 2019-07-24 | 2019-11-05 | 杭州迪普信息技术有限公司 | 一种堆内存的写越界检测方法和装置 |
CN110569037A (zh) * | 2019-09-06 | 2019-12-13 | 北京小米移动软件有限公司 | 数据写入的方法和装置 |
CN110674050A (zh) * | 2019-10-08 | 2020-01-10 | 腾讯科技(深圳)有限公司 | 内存越界检测方法、装置、电子设备及计算机存储介质 |
CN112114964A (zh) * | 2020-08-17 | 2020-12-22 | 上海睿赛德电子科技有限公司 | 一种适用于嵌入式***的应用安全访问内核方法 |
CN112527663A (zh) * | 2020-12-17 | 2021-03-19 | 杭州国芯科技股份有限公司 | 一种嵌入式***中软件所用内存的检测方法 |
-
2007
- 2007-07-18 CN CNA2007101304269A patent/CN101145129A/zh active Pending
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104657275A (zh) * | 2015-03-09 | 2015-05-27 | 浪潮软件集团有限公司 | 一种内存越界的定位方法及装置 |
WO2017162049A1 (zh) * | 2016-03-24 | 2017-09-28 | 广州广电运通金融电子股份有限公司 | 驱动模块内存数据监测方法及装置 |
CN106502926B (zh) * | 2016-09-26 | 2019-11-19 | 华为技术有限公司 | 一种内存监控方法、内存访问控制器及SoC*** |
CN106502926A (zh) * | 2016-09-26 | 2017-03-15 | 华为技术有限公司 | 一种内存监控方法、内存访问控制器及SoC*** |
CN108446122A (zh) * | 2018-03-22 | 2018-08-24 | 中国银行股份有限公司 | 一种参数一致性验证方法及装置 |
CN108446122B (zh) * | 2018-03-22 | 2021-10-29 | 中国银行股份有限公司 | 一种参数一致性验证方法及装置 |
CN108664419A (zh) * | 2018-04-03 | 2018-10-16 | 郑州云海信息技术有限公司 | 一种确定内存大页数目的方法及其装置 |
CN110413521A (zh) * | 2019-07-24 | 2019-11-05 | 杭州迪普信息技术有限公司 | 一种堆内存的写越界检测方法和装置 |
CN110413521B (zh) * | 2019-07-24 | 2023-01-24 | 杭州迪普信息技术有限公司 | 一种堆内存的写越界检测方法和装置 |
CN110569037A (zh) * | 2019-09-06 | 2019-12-13 | 北京小米移动软件有限公司 | 数据写入的方法和装置 |
CN110569037B (zh) * | 2019-09-06 | 2023-03-31 | 北京小米移动软件有限公司 | 数据写入的方法和装置 |
CN110674050A (zh) * | 2019-10-08 | 2020-01-10 | 腾讯科技(深圳)有限公司 | 内存越界检测方法、装置、电子设备及计算机存储介质 |
CN110674050B (zh) * | 2019-10-08 | 2022-04-19 | 腾讯科技(深圳)有限公司 | 内存越界检测方法、装置、电子设备及计算机存储介质 |
CN112114964A (zh) * | 2020-08-17 | 2020-12-22 | 上海睿赛德电子科技有限公司 | 一种适用于嵌入式***的应用安全访问内核方法 |
CN112527663A (zh) * | 2020-12-17 | 2021-03-19 | 杭州国芯科技股份有限公司 | 一种嵌入式***中软件所用内存的检测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101145129A (zh) | 一种嵌入式***内存写越界的检测方法及*** | |
US8516471B2 (en) | Detecting impact of operating system upgrades | |
CN100487658C (zh) | 一种检测内存访问越界的方法 | |
CN101714124B (zh) | 存储器保护方法及信息处理装置 | |
CN1091273C (zh) | 为计算机***提供操作***的方法 | |
CN102789371A (zh) | 硬盘盘符分配方法 | |
KR20100138980A (ko) | 어플리케이션 가상 환경에서의 소프트웨어 설치 및 사용을 검출하기 위한 방법과 시스템 | |
CN105446868A (zh) | ***兼容性测试方法、测试用例管理方法及相关装置 | |
CN101515242B (zh) | 一种查找改写内存的任务的方法和*** | |
CN110879742A (zh) | 虚拟机异步创建内部快照方法、装置及存储介质 | |
CN102385671A (zh) | 软件加密方法及*** | |
CN102707963A (zh) | 设备标志 | |
CN105988921A (zh) | 一种内存越界的检测方法及装置 | |
CN109271789A (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
CN105247533A (zh) | 信息处理装置和确定方法 | |
CN113535474A (zh) | 异构云存储集群故障自动修复的方法、***、介质及终端 | |
CN105094811A (zh) | 一种事件处理的方法和装置 | |
JP4923925B2 (ja) | チェックプログラム、監視装置および監視方法 | |
CN110879701B (zh) | 工作流可视化配置方法、服务器、***及介质 | |
CN101349994A (zh) | 一种定位程序错误的方法、***及装置 | |
CN100487657C (zh) | 嵌入式***中自动监测内存泄漏与内存越界的方法 | |
CN102984229A (zh) | 用于配置信任机的方法和*** | |
US20090019052A1 (en) | Providing file system availability during local path failure of a non-server node | |
CN111414269A (zh) | 一种日志告警方法、装置、存储介质及设备 | |
CN106326094A (zh) | 检查指针异常的方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20080319 |