CN100432955C - 一种非法内存读写的检测方法 - Google Patents
一种非法内存读写的检测方法 Download PDFInfo
- Publication number
- CN100432955C CN100432955C CNB2005101322874A CN200510132287A CN100432955C CN 100432955 C CN100432955 C CN 100432955C CN B2005101322874 A CNB2005101322874 A CN B2005101322874A CN 200510132287 A CN200510132287 A CN 200510132287A CN 100432955 C CN100432955 C CN 100432955C
- Authority
- CN
- China
- Prior art keywords
- write
- read
- internal memory
- memory
- illegal
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开一种非法内存读写的检测方法,应用于CPU中含有MMU的嵌入式系统平台,包括步骤:将针对非法内存读写的异常处理程序挂到数据存取违背存取权限的异常向量处;设定需要监控的内存、合法任务及对非法访问的处理方式,并内存所在页设置为不可读或/及写;当有程序指令访问到设置了读写保护的页时,产生数据存取违背存取权限的异常,CPU自动跳到所述异常处理程序中;在异常处理程序中判断该指令读写的是需要监控的内存且读写该内存的指令不是合法任务时,根据设置的对非法访问的处理方式记录和处理,结束;否则正常读写内存,完成后跳出异常处理程序,回到正常的程序中去。本发明方法可以方便地实现对非法内存读写的实时检测。
Description
技术领域
本发明涉及一种内存读写的检测方法,尤其涉及基于MMU(内存管理单元)的非法内存读写的检测方法。
背景技术
在嵌入式系统中,由于其任务是使用的相同的一个内存地址空间,因此经常发现内存(全局变量,堆栈,堆)的内容会莫名其妙的被非法的读写。如使用一个全局数组的时候,由于数组下标的越界而非法读写到了其它全局变量。对于这些非法的内存读写造成的系统故障,要想准确的定位故障需要分析代码,推断哪个任务可能错误操作了这些数据,这种分析往往是及其费力的工作,需要消耗大量的人力和环境。如果我们知道谁在什么时候修改了我们关注的内存,有这样一个线索我们分析问题来就非常容易,要获得这样一个线索需要我们有方法实时监控内存的变化。
如使用这样的功能来跟踪一些系统级的全局变量,如:errno,一旦errno被写了,马上会保存一个消息,打开后,你能看到函数的堆栈情况,以及是在哪个任务调用后出现了错误。这个使用很方便我们找到一些非法内存读写方面的问题。
现有的技术中有一种通过硬件断点来监控嵌入式系统的内存情况。如在MPC7410的CPU中就有DABR(数据地址断点寄存器),通过设置DABR来控制内存空间的读写权限,从而监控对该内存的访问是否就是非法内存读写。但这种技术强烈依赖于CPU是否实现了数据地址断点寄存器,而大多数的CPU是没有这个功能的;同时由于DABR寄存器较有限,只有一个或二个,所以同时监控的内存块的数量也只有一块或二块。
因此现有技术存在上述缺陷,有待于进一步发明出更好的技术来实时监控内存。
发明内容
本发明要解决的技术问题是提供一种非法内存读写的检测方法,可以在带有MMU的嵌入式系统平台方便地实现对非法内存读写的检测,无需增加DABR。
为了解决上述技术问题,本发明提供了一种非法内存读写的检测方法,应用于含有内存管理单元的嵌入式系统平台,包括以下步骤:
(a)初始化全局变量,将针对非法内存读写的异常处理程序挂到数据存取违背存取权限的异常向量处;
(b)设定需要监控的内存和可访问内存的合法任务,以及对非法访问的处理方式,计算出所述内存所在的页,并将所在页设置为不可写、不可读或者不可读写;
(c)当有程序指令访问到设置了读写保护的页时,产生数据存取违背存取权限的异常,CPU自动跳到所述异常处理程序中;
(d)在异常处理程序中,如果判断该指令读写的是需要监控的内存且该指令不是合法任务时,执行步骤(e),否则执行步骤(f);
(e)根据设置的对非法访问的处理方式记录和处理,结束;
(f)按该指令正常读写内存,完成后跳出异常处理程序,回到正常的程序中去。
进一步地,上述检测方法还可具有以下特点:所述步骤(b)中,该对非法访问的处理方法是打印异常信息,则在上述步骤(e)中执行以下操作:打印异常信息。
进一步地,上述检测方法还可具有以下特点:所述步骤(b)中,该对非法访问的处理方法是挂起该非法的任务,则在上述步骤(e)中执行以下操作:挂起该非法的任务,跳出异常处理程序,切换到其他任务。
进一步地,上述检测方法还可具有以下特点:所述步骤(f)中,按指令读写内存的方法是先将该内存所在的页设置为可写、可读或者可读写,再通过解析指令来实现内存的读写,读写完成后再将该内存所在的页恢复为不可写、不可读或者不可读写。
进一步地,上述检测方法还可具有以下特点:所述步骤(b)中设定的所述的需要监控的内存、可访问内存的合法任务和对非法访问的处理方法都保存在全局变量里。
进一步地,上述检测方法还可具有以下特点:设置的需要监控内存为多块,在设置对非法访问的处理方式和/或合法任务时,对多块内存统一设置非法访问的处理方式和/或合法任务,或对每块分别设置不同的处理方式。
由上可知,本发明可以实时的监控关注的多块内存的读写情况,通过参数来判断是否是非法的内存读写,然后可以打印错误信息或者挂起非法读写的任务,本发明使用灵活,可以广泛应用帮助研发人员在开发阶段和工程维护中快速的定位故障,从而有效的减少了研发和维护的成本。
附图说明
图1为本发明实施例的初始化流程图。
图2为本发明实施例的内存设置的流程图。
图3为本发明实施例的异常处理的流程图。
具体实施方式
本发明适用于所有CPU中含有MMU的嵌入式系统平台。下面结合附图,通过具体实例对本发明方法加以详细描述:
首先描述本实例的应用环境,本实例使用的CPU是MPC8245,该CPU带有MMU,页大小是4K bytes,数据存取违背存取权限的异常的向量为0×300,当发生数据存取违背存取权限的异常时,CPU会自动跳转到0×300处执行异常处理程序,执行完异常程序后,CPU会跳回到正常的程序中执行。使用的操作系统是vxWorks(嵌入式实时操作系统),该操作系统提供有设置和读取MMU块的读写属性的接口函数vmStateSet和vmStateGet,所有本实例直接利用这两个函数设置MMU块的读写属性。
在进行基于MMU的非法内存读写的检测之前,需要先进行初始化,如图1所示,包括以下步骤:
步骤110,先初始化全局变量;
步骤120,由于在vxWorks中,针对数据存取违背存取权限的异常,有一个简单的异常处理程序,所以需要保存好vxWorks在该异常向量(0×300)处的异常处理程序,以备恢复vxWorks的标准设置使用;
步骤130,将本实例的异常处理程序挂到0×300处。
初始化完成后,需要进行内存设置,其流程如图2所示。包括以下步骤:
步骤210,首先添加需要监控的内存,可以是一块或者多块,设置需要监控的每块内存的地址,大小;
步骤220,针对每一块内存,设定哪些任务可以合法访问,并且将设置保存到全局变量里;
步骤230,设定对非法访问的处理方法,可以对多块内存统一设置也可以对每块分别设置,处理方法可以是打印异常信息或者挂起该非法的任务;
以上这些设置都保存到全局变量里。
步骤240,然后根据监控的内存的大小和地址来计算其所在的页,由于页的大小为4K,所以计算出来的页可能为1页,也可能为多页。
步骤250,通过MMU的接口函数vmSateSet将要监控的内存所在页设置为不可写、不可读或者不可读写,由要检测的非法内存操作是读操作、写操作或者读写操作来决定。
如图3所示,本发明实施例检测非法内存读写的方法包括如下步骤:
步骤310,当有程序指令访问到设置了读写保护的页时,就会产生数据存取违背存取权限的异常,CPU就会自动跳转到0×300处执行程序,也就相应的跳到了本实例的异常处理程序中;
步骤320,在异常处理程序中判断该指令读写的是否我们需要监控的内存,即根据全局变量的内容来查询CPU访问的数据地址是否就是需要监控的地址,如果是,执行步骤330,否则执行步骤350;
步骤330,判断读写该内存的指令是否合法任务,如果是,执行步骤350,否则执行步骤340;
步骤340,根据设置的对非法访问的处理方法打印异常信息;
步骤350,按该指令正常读写内存,完成后跳出异常处理程序,回到正常的程序中去。
在异常处理程序中让指令读写内存的方法是先通过vmSateSet将该内存所在的页设置为可以读或/及写,再通过解析指令来实现内存的读写,读写完成后用vmSateSet将该内存所在的页设置为不可读或/及写。
在本发明的另一个实施例中,进行内存设置时把对非法访问的处理方法设置为挂起该非法的任务。当非法的任务读写我们需要监控的内存时,挂起该非法的任务,跳出异常处理程序,切换到其他任务。
应当理解的是,本发明所述的基于MMU的非法内存读写的检测方法,在上述具体实例中进行了详细描述,然而对本领域普通技术人员来说,可以根据本发明的技术方案及其构思进行各种可能的改进或替换,而所有这些改进或替换都应属于本发明所附权利要求的保护范围。
Claims (6)
1、一种非法内存读写的检测方法,应用于含有内存管理单元的嵌入式系统平台,包括以下步骤:
(a)初始化全局变量,将针对非法内存读写的异常处理程序挂到数据存取违背存取权限的异常向量处;
(b)设定需要监控的内存和可访问内存的合法任务,以及对非法访问的处理方式,计算出所述内存所在的页,并将所在页设置为不可写、不可读或者不可读写;
(c)当有程序指令访问到设置了读写保护的页时,产生数据存取违背存取权限的异常,CPU自动跳到所述异常处理程序中;
(d)在异常处理程序中,如果判断该指令读写的是需要监控的内存且该指令不是合法任务时,执行步骤(e),否则执行步骤(f);
(e)根据设置的对非法访问的处理方式记录和处理,结束;
(f)按该指令正常读写内存,完成后跳出异常处理程序,回到正常的程序中去。
2、如权利要求1所述的方法,其特征在于,所述步骤(b)中,该对非法访问的处理方法是打印异常信息,则在上述步骤(e)中执行以下操作:打印异常信息。
3、如权利要求1所述的方法,其特征在于,所述步骤(b)中,该对非法访问的处理方法是挂起该非法的任务,则在上述步骤(e)中执行以下操作:挂起该非法的任务,跳出异常处理程序,切换到其他任务。
4、如权利要求1所述的方法,其特征在于,所述步骤(f)中,按指令读写内存的方法是先将该内存所在的页设置为可写、可读或者可读写,再通过解析指令来实现内存的读写,读写完成后再将该内存所在的页恢复为不可写、不可读或者不可读写。
5、如权利要求1所述的方法,其特征在于,所述步骤(b)中设定的所述的需要监控的内存、可访问内存的合法任务和对非法访问的处理方法都保存在全局变量里。
6、如权利要求1所述的方法,其特征在于,设置的需要监控内存为多块,在设置对非法访问的处理方式和/或合法任务时,对多块内存统一设置非法访问的处理方式和/或合法任务,或对每块分别设置不同的处理方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005101322874A CN100432955C (zh) | 2005-09-02 | 2005-12-27 | 一种非法内存读写的检测方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200510098555.5 | 2005-09-02 | ||
CN200510098555 | 2005-09-02 | ||
CNB2005101322874A CN100432955C (zh) | 2005-09-02 | 2005-12-27 | 一种非法内存读写的检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1924826A CN1924826A (zh) | 2007-03-07 |
CN100432955C true CN100432955C (zh) | 2008-11-12 |
Family
ID=37817476
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005101322874A Expired - Fee Related CN100432955C (zh) | 2005-09-02 | 2005-12-27 | 一种非法内存读写的检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100432955C (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101178679B (zh) * | 2007-12-14 | 2010-04-21 | 华为技术有限公司 | 多核系统中内存核查的方法和系统 |
CN101917708B (zh) * | 2010-08-16 | 2014-11-05 | 中兴通讯股份有限公司 | 一种无线通信终端及其数据保护方法 |
CN103164290B (zh) * | 2011-12-14 | 2017-08-04 | 腾讯科技(深圳)有限公司 | 应用内存管理方法和装置 |
CN106294089A (zh) * | 2015-06-23 | 2017-01-04 | 阿里巴巴集团控股有限公司 | 辅助对被监控内存空间的访问监控的方法和装置 |
CN105718357B (zh) * | 2016-01-22 | 2018-12-28 | 烽火通信科技股份有限公司 | 一种内存监视的方法 |
CN109144760B (zh) * | 2018-06-29 | 2019-10-11 | 清华大学 | 用于获取内存状态的方法、装置、系统及介质 |
CN112395601B (zh) * | 2019-08-15 | 2024-03-01 | 奇安信安全技术(珠海)有限公司 | 一种应用层内存访问的监控方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08212140A (ja) * | 1995-02-01 | 1996-08-20 | Hitachi Ltd | メモリプロテクション方式 |
JPH11242633A (ja) * | 1998-02-26 | 1999-09-07 | Hitachi Ltd | メモリ保護方式 |
CN1286429A (zh) * | 1999-11-20 | 2001-03-07 | 深圳市中兴通讯股份有限公司 | 一种嵌入处理机内存的检测和监控方法 |
US20030014667A1 (en) * | 2001-07-16 | 2003-01-16 | Andrei Kolichtchak | Buffer overflow attack detection and suppression |
CN1585932A (zh) * | 2001-11-13 | 2005-02-23 | 先进微装置公司 | 内存管理系统及依据线性地址的内存存取保密的方法 |
-
2005
- 2005-12-27 CN CNB2005101322874A patent/CN100432955C/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08212140A (ja) * | 1995-02-01 | 1996-08-20 | Hitachi Ltd | メモリプロテクション方式 |
JPH11242633A (ja) * | 1998-02-26 | 1999-09-07 | Hitachi Ltd | メモリ保護方式 |
CN1286429A (zh) * | 1999-11-20 | 2001-03-07 | 深圳市中兴通讯股份有限公司 | 一种嵌入处理机内存的检测和监控方法 |
US20030014667A1 (en) * | 2001-07-16 | 2003-01-16 | Andrei Kolichtchak | Buffer overflow attack detection and suppression |
CN1585932A (zh) * | 2001-11-13 | 2005-02-23 | 先进微装置公司 | 内存管理系统及依据线性地址的内存存取保密的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1924826A (zh) | 2007-03-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100432955C (zh) | 一种非法内存读写的检测方法 | |
CN100375060C (zh) | 一种嵌入式系统及其实时内存监控处理方法 | |
Qin et al. | Lift: A low-overhead practical information flow tracking system for detecting security attacks | |
CN101561775B (zh) | 内存监控方法和装置 | |
US8291379B2 (en) | Runtime analysis of a computer program to identify improper memory accesses that cause further problems | |
Levin | Mac OS X and iOS internals: to the apple's core | |
CN100440163C (zh) | 对计算机程序进行运行时分析的方法和系统 | |
US20110153689A1 (en) | Confirming the sensitivity of a data object in a managed object heap | |
US10380336B2 (en) | Information-processing device, information-processing method, and recording medium that block intrusion of malicious program to kernel | |
US20090172642A1 (en) | System and method for debugging a computer program | |
CN103109276A (zh) | 系统测试方法 | |
CN107479980A (zh) | 一种检测应用中死锁的方法与设备 | |
CN101520754A (zh) | 内存越界访问的定位方法及装置 | |
KR101701515B1 (ko) | 메모리 접근 정보를 추적하기 위한 장치 및 방법 | |
CN105095079B (zh) | 一种热点模块指令跟踪的方法及设备 | |
US8161324B2 (en) | Analysis result stored on a field replaceable unit | |
JP2003512667A (ja) | 電子装置 | |
CN102799523B (zh) | 动态探测程序执行路径的方法、装置和计算机系统 | |
CN103914311B (zh) | 固件管理方法及系统 | |
CN104461880A (zh) | 一种嵌入式系统中自动检测内存越界的方法及系统 | |
CN101650688B (zh) | 一种访问vm_io地址空间的方法和用户态调试器 | |
CN101739519B (zh) | 用于一硬件的监控装置及监控方法 | |
US8042176B2 (en) | Computer readable medium on which is stored a program for preventing the unauthorized use of program data | |
CN110046097A (zh) | 一种定位内存非法改写的方法、系统及存储介质 | |
WO2012137321A1 (ja) | 情報処理装置、及びその方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20081112 Termination date: 20141227 |
|
EXPY | Termination of patent right or utility model |