CN101520754A - 内存越界访问的定位方法及装置 - Google Patents
内存越界访问的定位方法及装置 Download PDFInfo
- Publication number
- CN101520754A CN101520754A CN200910119747A CN200910119747A CN101520754A CN 101520754 A CN101520754 A CN 101520754A CN 200910119747 A CN200910119747 A CN 200910119747A CN 200910119747 A CN200910119747 A CN 200910119747A CN 101520754 A CN101520754 A CN 101520754A
- Authority
- CN
- China
- Prior art keywords
- task
- function
- visit
- page
- internal memory
- 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)
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种定位内存越界访问的方法和装置。在程序某任务中的函数访问某一块合法内存时发生越界后,按以下步骤实现定位:重新分配内存,在所述合法内存的前面和/或后面为所述合法内存多分出包含至少一个完整内存页的区域,并设置多分出的所述内存页的属性为禁止所述访问;重新编译后,启动所述程序;当所述任务中的所述函数非法访问多分出的所述内存页时,进行数据访问异常处理,查看当前的程序运行信息,定位到进行非法访问的所述任务和/或所述函数,更准确而清楚的找出越界访问的原因,方便了用户的使用。
Description
技术领域
本发明涉及计算机技术领域,尤其是内存越界访问的定位方法和装置。
背景技术
对于嵌入式系统,运行时会出现内存访问越界的问题,内存访问越界分为读越界和写越界。读越界时,操作系统会给出越界警告,程序可能会中途夭折,也可能会继续运行;写越界时,因为有可能会覆盖运行中的程序的数据,甚至覆盖程序代码。如果操作系统缺少保护,甚至会覆盖系统代码,这种覆盖有可能使整个系统崩溃。
虽然内存访问越界会导致严重后果,但编译程序却没办法事先报警,因为在编译期间无法知道在程序运行中才能实现的变量值。为了找到造成越界访问的函数和任务,通常的做法是,通过分析程序,加入相关的调试信息,一步步调试实现,这样做非常浪费时间。尤其是内存随机访问越界的情况,通常的方法无法实现准确、快速定位。
发明内容
本发明要解决的技术问题是提供了一种内存越界访问的定位方法及装置,利用本方法在发生内存越界访问时,可以定位到内存越界访问的任务和/或函数,实现了准确、快速的定位。
一种内存越界访问的定位方法,在程序某任务中的函数访问某一块合法内存时发生越界后,按以下步骤实现定位:
(1)重新分配内存,在所述合法内存的前面和/或后面为所述合法内存多分出包含至少一个完整内存页的区域,并设置多分出的所述内存页的属性为禁止所述访问;
(2)重新编译后,启动所述程序;
(3)当所述任务中的所述函数非法访问多分出的所述内存页时,进行数据访问异常处理,查看当前的程序运行信息,定位到进行非法访问的所述任务和/或所述函数。
进一步地,上述方法中,所述访问为读,所述内存页的属性设置为不可读或不可读不可写;或者所述访问为写,所述内存页的属性设置为不可写或不可读不可写。
进一步地,上述方法中,进行所述数据访问异常处理时,将非法访问多分出的所述内存页的任务挂起在访问语句上,通过查看当前运行的任务的状态,将被挂起的任务确定为要定位的所述任务,再查看所述任务当前的函数调用信息,定位到访问多分出的所述内存页的所述函数。
进一步地,上述方法中,定位到所述任务和函数后,将所述任务和函数的信息显示给用户或者将所述任务和函数的信息记录在指定的内存中供用户查看。
进一步地,上述方法中,进行所述数据访问异常处理时,在定位到进行非法访问的所述任务后,还通过在任务栈或任务寄存器中查看所述任务的当前运行指令指针,定位到所述任务中进行非法访问的访问语句。
进一步地,上述方法可应用于嵌入式系统。
本发明还公开了一种可对内存越界访问进行定位的装置,其包括:
(1)初始化模块,用于在程序某任务中的函数访问某一块合法内存时发生越界访问后,根据重新分配了内存并重新编译后的程序,在初始化时,在所述合法内存的前面和/或后面为所述合法内存多分出包含至少一个完整内存页的区域,并设置多分出的所述内存页的属性为禁止所述访问;
(2)数据访问异常检测模块,用于在所述任务中的所述函数非法访问多分出的所述内存页时,调用数据访问异常处理模块;
(3)数据访问异常处理模块,用于进行数据访问异常处理,查看当前的程序运行信息,定位到进行非法访问的所述任务和/或所述函数。
进一步地,上述装置中,所述数据访问异常处理模块进行所述数据访问异常处理时,将非法访问多分出的所述内存页的任务挂起在访问语句上,通过查看当前运行的任务的状态,将被挂起的任务确定为要定位的所述任务,再查看所述任务当前的函数调用信息,定位到访问多分出的所述内存页的所述函数。
进一步地,上述装置中,所述数据访问异常处理模块定位到所述任务和函数后,还将所述任务和函数的信息显示给用户或者将所述任务和函数的信息记录在指定的内存中供用户查看。
进一步地,上述装置中,所述数据访问异常处理模块在定位到进行非法访问的所述任务后,还通过在任务栈或任务寄存器中查看所述任务的当前运行指令指针,定位到所述任务中进行非法访问的访问语句。
通过上述方法和装置,通过给一合法内存多分出一块内存区域,该内存区域至少包含一个完整的内存页,可以在合法内存的前面和/或后面,并设置该多分出的内存页的属性为禁止访问,当有任务中的函数访问此多分出的内存页时,即产生数据访问异常,将所述任务挂起,通过查看当前挂起的任务以及当前任务中函数调用的情况,实现了将内存访问越界定位到任务和/或函数以及访问语句,更准确而清楚的找出越界访问的原因,方便了用户的使用。
附图说明
图1是本发明实施例内存越界访问的定位方法的流程图。
具体实施方式
以下,参考图1详细描述实施例内存越界访问的定位方法。
嵌入式系统一般都是基于任务或者进程来调度的,任务或者进程是系统实现特定功能的最小运行单元,函数是任务或进程的最小构成单元。如果能够定位到内存越界访问的函数及运行这个函数的任务,就找到引起内存越界访问的原因了。本实施例虽以嵌入式系统为例,但本发明也可用于其他具有类似环境的系统。
本实施例利用了嵌入式系统的软硬件特性,即操作系统的内存是基于页来管理的,每块内存都有页属性,例如可读、可写、可缓存等。操作系统一般都会提供处理异常的手段,比如说如果访问一段不存在的地址,或者写一段不可写的地址那么就会产生数据访问异常,并提供相应的数据访问异常处理函数。
本实施例需配置一个针对不可读不可写的内存被读或写后进行异常处理的数据访问异常处理函数,在该异常处理函数中实现以下功能:将产生异常的任务挂起,并可查找嵌入式系统当前记录的任务状态和调用栈,确定越界读写内存的任务和函数。
在嵌入式系统运行时,如程序某任务中的函数访问某一块合法内存(以下称为内存p)时发生越界访问,按照以下步骤来定位产生数据访问异常的任务和函数:
步骤101,重新分配内存,在内存p的后面为内存p多分出一块区域,且保证该区域包括至少一个完整的内存页;
根据越界访问是向前越界还是向后越界,在其他实施例中,也可以在内存p的前面为内存p多分出一块区域且保证该区域包括至少一个完整的内存页。当然,在内存p的前面和后面为内存p各多分出一块包括至少一个完整的内存页的区域也是可以的。这里为内存p多分出一块区域,并不一定是将内存p扩大出该区域,而是指该区域是用于定位内存p的越界访问。
步骤102,设置多分出的内存页的属性为不可读不可写;
步骤103,对该程序重新编译后再次运行该程序;
步骤104,当所述任务中的函数非法访问多分出的内存页时,嵌入式系统检测到发生数据访问异常,调用数据访问异常处理函数进行处理;
例如,CPU可以在数据访问异常时产生中断,在响应中断时通过中断向量调用上述数据访问异常处理函数。不过这仅仅是一个示例,也可以采用其他方式进行异常处理,在异常处理过程中实现定位。
步骤105,数据访问异常处理函数将任务挂起在访问语句上;
步骤106,数据访问异常处理函数查找当前的程序运行信息,本实施例是挂起的任务和该任务调用的函数,定位到进行非法访问的任务和函数,进一步还可以查看非法访问所述多分出的内存页的语句,使得定位更加精确。
例如,可以通过调用系统中查看任务的函数,查看挂起的任务名或者任务ID;对于VxWorks系统,可以通过调用系统自带的查看运行任务功能的i函数,查看当前CPU上运行的所有任务,如果看到某个任务的状态为挂起,则表明其出现异常;针对上述处于挂起状态的任务,通过调用系统自带的查看当前任务中函数调用情况的tt函数,通过“tt任务名/任务ID”查看给定任务当前的函数调用信息(如查看该任务的函数调用堆栈),从而获知多分出的内存页是被哪个函数访问的;通过“ti任务名/任务ID”可以进一步通过在任务栈或任务寄存器中查看该任务的当前运行指令指针,获知该任务中非法访问所述多分出的内存页的语句。
进一步地,可以将定位到的该任务和函数的信息显示给用户,也可以将这些信息记录在指定的内存中,用户通过查看所述指定内存定位到进行了非法访问的任务和函数。在定位之后,数据访问异常处理函数可以解除该任务的挂起状态,继续运行该任务。
以上是在发生读和写越界时均可以实现定位,在另一实施例中,可以只在发生读越界时的进行定位。此时,步骤102中,设置该多分出的内存页的属性为不可读;相应的步骤104中,当有任务中的函数读多分出的内存页时,即发生数据访问异常,嵌入式系统调用数据访问异常处理函数进行处理。而在又一实施例中,可以只在发生写越界时的进行定位。此时,步骤102中,设置该多分出的内存页的属性为不可写;相应的步骤104中,当有函数写多分出的内存页时,即发生数据访问异常,嵌入式系统调用数据访问异常处理函数进行处理。
本实施例还提供一种可对内存越界访问进行定位的装置,包括初始化模块、数据访问异常检测模块和数据访问异常处理模块,其中:
初始化模块,用于在程序某任务中的函数访问某一块合法内存(以下称为内存p)时发生越界访问后,根据重新分配了内存并重新编译后的程序,在初始化时,在内存p的后面和/或前面为内存p多分出包含至少一个完整内存页的区域,设置多分出的内存页的属性为不可读不可写;
数据访问异常检测模块,用于在所述任务中的所述函数非法访问多分出的所述内存页时,调用数据访问异常处理模块;
数据访问异常处理模块,用于进行数据访问异常处理,查看当前的程序运行信息,定位到进行非法访问的所述任务和函数。
具体的异常处理可以是:将访问该内存的任务挂起在访问语句上,通过查看当前运行的任务的状态,并针对挂起的任务查看函数调用情况,可以获知发生内存越界访问的任务和函数,实现了对越界访问的任务和函数的定位,进一步通过查看该任务的当前运行指令指针,可获知造成越界访问的访问语句。此后,可以将挂起的任务信息、该任务的函数调用情况以及上述访问语句显示给用户或者记录在内存中供用户查看。在定位之后,还可以解除该任务的挂起状态,继续运行该任务。
在另一实施例中,如越界的访问为读,初始化模块可以设置所述多分出的内存页的属性为不可读,当有任务中的函数读所述多分出的内存页时,数据访问异常处理模块对该任务和/或函数进行定位。
在另一实施例中,如越界的访问为写,初始化模块可以设置所述多分出的内存页的属性为不可写,当有任务中的函数写所述多分出的内存页时,数据访问异常处理模块对该任务和/或函数进行处理和定位。
以上详细说明了本发明的工作原理,但这只是为了便于理解而举的形象化的实例,不应被视为是对本发明范围的限制。同样,根据本发明的技术方案及其较佳实施例的描述,可以做出各种可能的等同改变或替换,而所有这些改变或替换都应属于本发明的权利要求的保护范围。
Claims (10)
1、一种内存越界访问的定位方法,在程序某任务中的函数访问某一块合法内存时发生越界后,按以下步骤实现定位:
重新分配内存,在所述合法内存的前面和/或后面为所述合法内存多分出包含至少一个完整内存页的区域,并设置多分出的所述内存页的属性为禁止所述访问;
重新编译后,启动所述程序;
当所述任务中的所述函数非法访问多分出的所述内存页时,进行数据访问异常处理,查看当前的程序运行信息,定位到进行非法访问的所述任务和/或所述函数。
2、根据权利要求1所述的定位方法,其特征在于:
所述访问为读,所述内存页的属性设置为不可读或不可读不可写;或者
所述访问为写,所述内存页的属性设置为不可写或不可读不可写。
3、根据权利要求1或2所述的定位方法,其特征在于:
进行所述数据访问异常处理时,将非法访问多分出的所述内存页的任务挂起在访问语句上,通过查看当前运行的任务的状态,将被挂起的任务确定为要定位的所述任务,再查看所述任务当前的函数调用信息,定位到访问多分出的所述内存页的所述函数。
4、根据权利要求3所述的定位方法,其特征在于:
定位到所述任务和函数后,将所述任务和函数的信息显示给用户或者将所述任务和函数的信息记录在指定的内存中供用户查看。
5、根据权利要求3所述的定位方法,其特征在于:
进行所述数据访问异常处理时,在定位到进行非法访问的所述任务后,还通过在任务栈或任务寄存器中查看所述任务的当前运行指令指针,定位到所述任务中进行非法访问的访问语句。
6、根据权利要求1所述的定位方法,其特征在于:所述定位方法应用于嵌入式系统。
7、一种可对内存越界访问进行定位的装置,其特征在于,包括:
初始化模块,用于在程序某任务中的函数访问某一块合法内存时发生越界访问后,根据重新分配了内存并重新编译后的程序,在初始化时,在所述合法内存的前面和/或后面为所述合法内存多分出包含至少一个完整内存页的区域,并设置多分出的所述内存页的属性为禁止所述访问;
数据访问异常检测模块,用于在所述任务中的所述函数非法访问多分出的所述内存页时,调用数据访问异常处理模块;
数据访问异常处理模块,用于进行数据访问异常处理,查看当前的程序运行信息,定位到进行非法访问的所述任务和/或所述函数。
8、根据权利要求7所述的装置,其特征在于:
所述数据访问异常处理模块进行所述数据访问异常处理时,将非法访问多分出的所述内存页的任务挂起在访问语句上,通过查看当前运行的任务的状态,将被挂起的任务确定为要定位的所述任务,再查看所述任务当前的函数调用信息,定位到访问多分出的所述内存页的所述函数。
9、根据权利要求8所述的装置,其特征在于:
所述数据访问异常处理模块定位到所述任务和函数后,还将所述任务和函数的信息显示给用户或者将所述任务和函数的信息记录在指定的内存中供用户查看。
10、根据权利要求8或9所述的装置,其特征在于:
所述数据访问异常处理模块在定位到进行非法访问的所述任务后,还通过在任务栈或任务寄存器中查看所述任务的当前运行指令指针,定位到所述任务中进行非法访问的访问语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910119747A CN101520754A (zh) | 2009-03-24 | 2009-03-24 | 内存越界访问的定位方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910119747A CN101520754A (zh) | 2009-03-24 | 2009-03-24 | 内存越界访问的定位方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101520754A true CN101520754A (zh) | 2009-09-02 |
Family
ID=41081355
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910119747A Pending CN101520754A (zh) | 2009-03-24 | 2009-03-24 | 内存越界访问的定位方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101520754A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831339A (zh) * | 2012-07-19 | 2012-12-19 | 北京奇虎科技有限公司 | 一种针对网页的恶意攻击进行防护的方法、装置和浏览器 |
CN103324582A (zh) * | 2013-06-17 | 2013-09-25 | 华为技术有限公司 | 一种内存迁移方法、装置及设备 |
CN104657275A (zh) * | 2015-03-09 | 2015-05-27 | 浪潮软件集团有限公司 | 一种内存越界的定位方法及装置 |
CN106502926A (zh) * | 2016-09-26 | 2017-03-15 | 华为技术有限公司 | 一种内存监控方法、内存访问控制器及SoC系统 |
CN107729751A (zh) * | 2016-08-12 | 2018-02-23 | 阿里巴巴集团控股有限公司 | 数据检测方法及装置 |
CN107977577A (zh) * | 2016-10-21 | 2018-05-01 | 龙芯中科技术有限公司 | 访存指令访问检测方法及装置 |
CN111124921A (zh) * | 2019-12-25 | 2020-05-08 | 北京字节跳动网络技术有限公司 | 内存越界的检测方法、装置、设备和存储介质 |
CN117648196A (zh) * | 2024-01-29 | 2024-03-05 | 苏州元脑智能科技有限公司 | 一种内存分配的保护方法、装置、设备及介质 |
-
2009
- 2009-03-24 CN CN200910119747A patent/CN101520754A/zh active Pending
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831339A (zh) * | 2012-07-19 | 2012-12-19 | 北京奇虎科技有限公司 | 一种针对网页的恶意攻击进行防护的方法、装置和浏览器 |
CN102831339B (zh) * | 2012-07-19 | 2015-05-27 | 北京奇虎科技有限公司 | 一种针对网页的恶意攻击进行防护的方法、装置和浏览器 |
CN103324582A (zh) * | 2013-06-17 | 2013-09-25 | 华为技术有限公司 | 一种内存迁移方法、装置及设备 |
CN104657275A (zh) * | 2015-03-09 | 2015-05-27 | 浪潮软件集团有限公司 | 一种内存越界的定位方法及装置 |
CN107729751A (zh) * | 2016-08-12 | 2018-02-23 | 阿里巴巴集团控股有限公司 | 数据检测方法及装置 |
CN106502926A (zh) * | 2016-09-26 | 2017-03-15 | 华为技术有限公司 | 一种内存监控方法、内存访问控制器及SoC系统 |
CN106502926B (zh) * | 2016-09-26 | 2019-11-19 | 华为技术有限公司 | 一种内存监控方法、内存访问控制器及SoC系统 |
CN107977577A (zh) * | 2016-10-21 | 2018-05-01 | 龙芯中科技术有限公司 | 访存指令访问检测方法及装置 |
CN111124921A (zh) * | 2019-12-25 | 2020-05-08 | 北京字节跳动网络技术有限公司 | 内存越界的检测方法、装置、设备和存储介质 |
CN111124921B (zh) * | 2019-12-25 | 2023-09-26 | 抖音视界有限公司 | 内存越界的检测方法、装置、设备和存储介质 |
CN117648196A (zh) * | 2024-01-29 | 2024-03-05 | 苏州元脑智能科技有限公司 | 一种内存分配的保护方法、装置、设备及介质 |
CN117648196B (zh) * | 2024-01-29 | 2024-04-26 | 苏州元脑智能科技有限公司 | 一种内存分配的保护方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101520754A (zh) | 内存越界访问的定位方法及装置 | |
US6883162B2 (en) | Annotations for transaction tracing | |
CN102388368B (zh) | 一种内存监控方法及装置 | |
US9003146B2 (en) | Managing memory of a computer | |
CN109583190B (zh) | 监控进程的方法和装置 | |
CN101714124B (zh) | 存储器保护方法及信息处理装置 | |
KR20110048531A (ko) | 가상처리장치의 인터럽트 제어 | |
CN104205113B (zh) | 向操作系统报告恶意活动 | |
US20170364679A1 (en) | Instrumented versions of executable files | |
CN109471697A (zh) | 一种监控虚拟机中系统调用的方法、装置及存储介质 | |
KR20100108816A (ko) | 프로그램의 동적 분석 방법 및 그 장치 | |
CN102708043B (zh) | 静态数据竞争检测和分析 | |
CN110442379A (zh) | 保护有条件的推测指令执行 | |
CN102207913B (zh) | 嵌入式系统中写保护的控制方法和装置 | |
CN111625833B (zh) | 一种高效的软件程序释放后重用漏洞判定方法和装置 | |
US8898124B2 (en) | Controlling database trigger execution with trigger return data | |
KR101996641B1 (ko) | 메모리 오버레이 장치 및 방법 | |
CN100432955C (zh) | 一种非法内存读写的检测方法 | |
KR20230166610A (ko) | Rpa 컴퓨팅 디바이스의 전산업무 자동화 서비스 제공방법 | |
EP3262519A1 (en) | Configuration of a memory controller for copy-on-write | |
US7484239B1 (en) | Detecting heap and stack execution in the operating system using regions | |
US8484620B2 (en) | Implementing performance impact reduction of watched variables | |
US20100095081A1 (en) | Early detection of an access to de-allocated memory | |
CN102750493A (zh) | 访问权限控制方法、装置及系统 | |
KR20120052752A (ko) | 메모리 접근 정보를 추적하기 위한 장치 및 방법 |
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 |
Application publication date: 20090902 |