一种内存被改写的监控方法

文档序号:6461466阅读:189来源:国知局
专利名称:一种内存被改写的监控方法
技术领域
本发明涉及嵌入式技术领域,尤其涉及一种内存被改写的监控方法。
技术背景嵌入式系统的软件开发编程,内存使用是最容易出问题的一个地方,在 我们日常的故障中,关于内存使用方面的故障比例还是相当高的,这其中"内 存被改写"是最为严重最为可怕的一种情况,而且非常难以定位,经常会耗 费大量的人力去分析解决,有时就因为一个这样的故障而导致任务进度受 阻、版本发布延期等严重后果。发明内容本发明要解决的技术问题是提供一种内存被改写的监控方法,提高系统 的故障查找能力,以保障系统更稳定的运行。为了解决上述问题,本发明提供了一种内存被改写的监控方法,包括如下步骤步骤一,在主程序中挂接数据异常处理程序和单步跟踪异常处理程序, 将受监控的内存所在页面设置为不可写状态;步骤二,如果主程序收到修改指令,需要修改受监控的内存时,进入数 据异常处理程序,获取并保存监控信息,再将所述页面设置为可写状态后返 回主程序;步骤三,执行所述修改指令后,进入单步跟踪异常处理程序,保存修改 完成后的监控信息,重置所述页面为不可写状态后返回主程序。进一步地,上述方法还可具有以下特点,步骤二中所述监控信息包括修改指令、受监控的内存被改写前的值以及进行改写的函数堆栈,步骤三中所 述修改完成后的监控信息包括受监控的内存被改写后的值。进一步地,上述方法还可具有以下特点,所述数据异常处理程序中,在 保存监控信息后还保存当前的机器状态寄存器的内容,且在关外部中断情况 下使能单步跟踪异常。进一步地,上述方法还可具有以下特点,所述单步跟踪异常处理程序中, 在保存监控信息之前,进一步还使能外部中断并恢复机器状态寄存器的内容。进一步地,上述方法还可具有以下特点,用户在系统中分配一块内存空 间用作记录空间,所述记录空间用于保存受监控的内存的监控信息,该记录空间由用户管理,在重启后由用户将其清空;所述监控信息包括执行修改受 监控的内存的指令、受监控的内存被改写前的值、受监控的内存被改写后的 值以及进行改写的函数堆栈。进一步地,上述方法还可具有以下特点,分配记录空间后,用户启动4仑 询检测定时器,并在系统中添加检测函数,检测记录空间中是否有新的监控 信息填入。进一步地,上述方法还可具有以下特点,检测函数检测到记录空间里有 监控信息填入后,将所述监控信息存入到非易失性的存储设备里面,并将记 录空间的监控信息清空用作下次记录;所述非易失性的存储设备包括闪存、 安全数码卡和压缩闪存卡。进一步地,上述方法还可具有以下特点,所述轮询检测定时器是系统时 钟,或者是由定时时钟衍生出来的定时功能的程序,或者是单独由中央处理 器提供的其它定时单元所形成的具有定时功能的程序,其检测的时间间隔根 据用户的需要而设定。进一步地,上述方法还可具有以下特点,用户才艮据所述监控信息分析栈 及程序源代码,获得改写受监控的内存的来源,即修改指令、该指令所在的 函it以及相应的调用关系。进一步地,上述方法还可具有以下特点,所述监控信息的记录手段还包括直接打印到文件的方式和发消息到专门处理记录的进程的方式。由上可见,本发明所述方法可以实时监控内存的改写情况,通过记录来 分析数据改写的有效性,以及分析是否是程序员所需要的改写,并且本发明 所述方法能记录改写前后的值、函数等信息,可以有效的帮助研发人员在开 发与工程现场对这类故障快速定位原因,增强研发效率。


图1为本发明的监控启动流程图;图2为本发明的数据异常处理流程图;图3为本发明的单步跟踪异常处理流程图。
具体实施方式
本发明的主要构思是,利用MMU (Memory Management Unit,存储器 管理单元)的可配置性、CPU(中央处理器)的单步跟踪异常特性,自动收 集如下操作信息哪块内存被改写?被谁改写?然后将这些收集到的信息存 储进非易失性的存储设备里面,而后根据记录分析函数调用栈、程序源代码, 从而可以得出去内存改写的"元凶"。需要说明的是,使用本发明的嵌入式 系统的CPU (中央处理器)必须具有MMU以及数据异常、单步跟踪异常特 性。下面结合附图对本发明的技术方案作详细描述。 内存被改写的监控方法包括如下步骤 步骤一,启动监控;具体地,如图l所示,步骤一包括以下子步骤步骤IOI,用户在系统中分配一块内存空间用作记录空间,用于保存受 监控的内存(以下将受监控的内存称为监控目标)的监控信息,该内存空间 可以供多个监控目标使用;所述记录空间不由操作系统管理,而由用户自己管理,重启后操作系统 不负责清空,而是由用户清空。步骤102,分配记录空间后,用户启动轮询净企测定时器,并在系统中添 加检测函数,检测记录空间中是否有新的监控信息填入;所述轮询检测定时器可以是系统时钟,也可是由此衍生出来的定时功能 的程序,也可以是单独由CPU提供的其它定时单元所形成的具有定时功能 的程序,其检测的时间间隔可以根据用户的需要而设定。步骤103,在主程序中挂接数据异常处理程序和单步跟踪异常处理程序, 以在有指令要修改监控目标时进入数据异常处理流程和单步跟踪异常处理 流程;数据异常处理程序用于在有指令要修改监控目标时获取执行修改的指 令以及进行改写的函数堆栈等信息,并保存监控目标的原值。单步跟踪异常 处理程序用于在监控目标的值被改写后保存其新值。步骤104,获取监控目标地址及其长度范围;本步骤中的监控目标地址及其长度范围可以是同时受监控的好几个监 控目标的地址及各自的长度范围。步骤105,根据监控目标地址及其长度范围计算监控目标所处的页面和 分配记录监控信息所需用的内存大小,监控目标所处的页面可以是一个页 面,也可以是多个页面;步骤106,将监控目标所在页面设置为不可写状态;这里可以通过MMU将监控目标所在页面设置为不可写。步骤二,系统监测到有指令要修改监控目标,则进入数据异常处理流程;具体地,如图2所示,本步骤包括以下几个子步骤步骤201,主程序中有指令要修改监控目标,我们将该指令称为修改指令;步骤202,进入数据异常处理程序;步骤203,在数据异常处理程序中,获取异常相关信息(也即监控信息),包括修改指令、监控目标的原值(即监控目标被改写前的值)、进行改写的函数堆栈等信息,并保存到步骤101中分配的记录空间中;数据异常处理程序可以用记录方式处理,也可以用打印信息输出来处 理,也可用其它类似方式。记录的内容可以不止是函数堆栈、被改写内存的 原值,也可以包含任务名、异常发生时间等系统相关信息。步骤204,保存当前MSR (Machine State Register,机器状态寄存器) 的内容,关闭外部中断,在MSR中使能单步跟踪异常;步骤205,设置监控目标所在页面为可写状态,从数据异常处理程序返 回到主程序,这里是通过MMU将所述页面设置为可写。步骤三,CPU执行修改监控目标的指令;步骤四,触发单步跟踪异常功能,即进入单步跟踪异常处理程序,保存 监控目标被改写后的值后返回主程序;具体地,如图3所示,本步骤包括以下几个子步骤步骤301,单步跟踪异常被触发;步骤302,进入单步跟踪异常处理程序;步骤303,在打开外部中断、禁止单步跟踪异常的情况下恢复MSR的 内容;步骤304,保存监控目标被改写后的值到记录空间中;本实施例中采用了将所有监控信息记录到内存(步骤101所述的记录空 间)的方式处理,在其它实施例中,也可以将监控信息直接打印到文件的方 式保存记录,或者发送到专门处理记录的进程或者其它记录手段。步骤305,再次设置监控目标所在页面为不可写状态,返回主程序;步骤五,检测函数检测到记录空间里有监控信息填入后,通知用户,用 户将所述监控信息存入到非易失性的存储设备里面,并将记录空间的监控信 息清空用作下次记录;非易失性存储设备可以是FLASH(闪存),也可以是SD卡(Secure DigitalMemory Card,安全数码卡)、CF卡(Compact Flash Card ,压缩闪存卡) 等可移动设备。步骤六,用户根据所述监控信息分析函数调用栈及程序源代码,获得 改写受监控的内存的来源,即修改指令、该指令所在的函数以及相应的调用 关系。应用实例在某分布式系统的主控与线卡上分别应用上本发明方法,主控的CPU 是PPC750FX,线卡的CPU是PPC8270。比如某设备发现自己的内存0x10000处经常被外来程序修改,导致进 程挂起之类故障。则按前述步骤编制好数据异常处理程序和单步跟踪异常处 理程序后,进行如下操作1、 调用监控函数接口,比如monMem (0x10000, 0x10);这里0x10000指受监控的内存的地址,该地址内的原值为0x12345678, Ox 10指受监控的内存的长度。2、 系统程序运行,比如突然任务A的某子程序由于编写不当,造成指 令b修改0x10000处地址,欲将0x10000处的值0x12345678修改为0x8888;3、 这样在运行指令b时便进入数据异常处理程序,在数据异常处理程 序里面记录对应的原值、b指令的地址、以及堆栈信息、任务名等,并打开 0x10000处的写权限以及单步跟踪异常中断,退出数据异常处理程序,然后 CPU继续执行完b指令,在0x10000处写入0x8888,执行完b指令〗更进入 单步跟踪处理程序,在单步跟踪处理程序里,记录修改后的值,并重新关闭 0x10000处的写一又限;4、 检测函数检测到有新的监控记录,将其写入非易失性存储设备中, 这样, 一次监控以及记录过程就完成了 。本发明可以在任意时候启动监控并监控任意数据,实际应用中提高了系统的故障查找能力,保障了系统更稳定的运行。当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的 形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1、一种内存被改写的监控方法,其特征在于,包括如下步骤步骤一,在主程序中挂接数据异常处理程序和单步跟踪异常处理程序,将受监控的内存所在页面设置为不可写状态;步骤二,如果主程序收到修改指令,需要修改受监控的内存时,进入数据异常处理程序,获取并保存监控信息,再将所述页面设置为可写状态后返回主程序;步骤三,执行所述修改指令后,进入单步跟踪异常处理程序,保存修改完成后的监控信息,重置所述页面为不可写状态后返回主程序。
2、 如权利要求l所述的方法,其特征在于步骤二中所述监控信息包括修改指令、受监控的内存被改写前的值以及 进行改写的函数堆栈,步骤三中所述修改完成后的监控信息包括受监控的内 存被改写后的值。
3、 如权利要求1所述的方法,其特征在于所述数据异常处理程序中,在保存监控信息后还保存当前的机器状态寄 存器的内容,且在关外部中断情况下使能单步跟踪异常。
4、 如权利要求l所述的方法,其特征在于所述单步跟踪异常处理程序中,在保存监控信息之前,进一步还使能外 部中断并恢复机器状态寄存器的内容。
5、 如权利要求l所述的方法,其特征在于用户在系统中分配一块内存空间用作记录空间,所述记录空间用于保存 受监控的内存的监控信息,该记录空间由用户管理,在重启后由用户将其清 空;所述监控信息包括执行修改受监控的内存的指令、受监控的内存被改写 前的值、受监控的内存被改写后的值以及进行改写的函数堆栈。
6、 如权利要求5所述的方法,其特征在于分配记录空间后,用户启动轮询检测定时器,并在系统中添加4企测函数, 检测记录空间中是否有新的监控信息填入。
7、 如权利要求6所述的方法,其特征在于检测函数检测到记录空间里有监控信息填入后,将所述监控信息存入到 非易失性的存储设备里面,并将记录空间的监控信息清空用作下次记录;所 述非易失性的存储设备包括闪存、安全数码卡和压缩闪存卡。
8、 如权利要求6所述的方法,其特征在于所述轮询检测定时器是系统时钟,或者是由定时时钟衍生出来的定时功 能的程序,或者是单独由中央处理器提供的其它定时单元所形成的具有定时 功能的程序,其检测的时间间隔根据用户的需要而设定。
9、 如权利要求1所述的方法,其特征在于用户根据所述监控信息分析栈及程序源代码,获得改写受监控的内存的 来源,即修改指令、该指令所在的函数以及相应的调用关系。
10、 如权利要求l所述的方法,其特征在于所述监控信息的记录手段还包括直接打印到文件的方式和发消息到专 门处理记录的进程的方式。
全文摘要
本发明提供了一种内存被改写的监控方法,包括步骤一,在主程序中挂接数据异常处理程序和单步跟踪异常处理程序,将受监控的内存所在页面设置为不可写状态;步骤二,如果主程序收到修改指令,需要修改受监控的内存时,进入数据异常处理程序,获取并保存监控信息,再将所述页面设置为可写状态后返回主程序;步骤三,执行所述修改指令后,进入单步跟踪异常处理程序,保存修改完成后的监控信息,重置所述页面为不可写状态后返回主程序。本发明所述方法可以有效的帮助研发人员在开发与工程现场对这类故障快速定位原因,增强研发效率。
文档编号G06F11/36GK101251822SQ200810084008
公开日2008年8月27日 申请日期2008年3月11日 优先权日2008年3月11日
发明者周玉辉 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1