一种内存异常访问定位方法及装置的制作方法

文档序号:6483126阅读:239来源:国知局
专利名称:一种内存异常访问定位方法及装置的制作方法
技术领域
本发明涉及通信技术领域,尤其涉及一种内存异常访问定位方法及装置。
背景技术
MIPS ( Microprocessor without Interlocked Pipeline Stages,无内部互锁流水 级的微处理器)是一种CPU体系架构,釆用MIPS架构的CPU称为MIPS CPU。 MIPS CPU在宽带设备、无线网络、便携游戏机、数码相机、数字电视等领域 有着广泛的应用。
MIPS CPU在开发调度阶段,会存在内存异常访问问题,所谓内存异常访 问是指在程序运行过程中,某一条指令(或某一段代码)对内存的读写超出了 正常读写范围,对其它不属于正常读写范围的内存进行了修改, 一般都跟内存 越界、内存泄露等问题有关。在发生内存异常访问现象时,程序刚开始运行时 往往是正常的,但在运行过程中,当有指令想正常读写存在异常访问现象的内 存区域时,由于这片区域因为异常访问问题已被非法修改过,因此程序将会出 错。由于这个原因,内存异常访问现象有着隐蔽性强、难以定位等特点。
现有技术一般通过配置WATCH寄存器组或JTAG寄存器组监视内存地址 来对内存异常访问进行查找定位,以利用WATCH寄存器为例,参见图1,包 括如下步骤
1) 配置寄存器组,用于捕获访问行为;
2) 系统正常执行;
3) 对监视的内存地址发生访问时,保存寄存器组; 通过保存寄存器组可以查看产生访问的指令。
4) 复位系统。
发明人在实现本发明过程中,发现现有技术至少存在以下缺点 在对监视的内存地址发生访问时,系统会产生异常,处理完异常返回后, 程序会继续执行产生异常的指令,从而再次进入异常,如此循环反复,只能复位系统,不能继续对访问指令进行捕获及分析。同时,由于内存异常访问现象 发生的概率很低,而在实际中,对被监视的内存地址进行的访问在大多数情况 下都是正常的访问,这时,现有技术中分析查看的指令往往都是正常的指令, 从而无法对引起内存异常访问现象的非法访问指令进行有效定位。

发明内容
本发明实施例提供一种内存异常访问定位方法及装置,用于对内存异常访
问现象进行有效定位,通过以下方案来实现 监视出现异常访问的内存,捕获访问行为;
根据所述访问行为获取访问指令,通过所述访问指令对所述访问行为进行 定位;
分析所述访问指令,得到分析结果; 根据所述分析结果,代替所述访问指令完成相应的动作。 以及,
监视单元,用于监视出现异常访问的内存,捕获访问行为; 获取单元,用于根据所述访问行为获取访问指令,通过所述访问指令对所 述访问^亍为进4亍定4立;
分析单元,用于分析所述访问指令,得到分析结果;
代替单元,用于根据所述分析结果,代替所述访问指令完成相应的动作。
上述技术方案中具有如下的优点
通过不断查看访问指令,分析访问指令,能够有效及时地对内存异常访问 进行定位;并代替访问指令完成相应的动作,避免了需要复位系统的情况,使 得程序能够继续执行,从而可以不断对内存异常访问进行定位。


为了更清楚地说明本发明实施例或现有技术中的^支术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明方法实施例流程示意图2为本发明方法实施例流程示意图; 图3为本发明装置实施例结构示意图。
具体实施例方式
为使本发明的目的、技术方案及优点更加清楚明白,以下将通过具体实施 例和相关附图,对本发明作进一步详细说明。
本发明实施例提供了 一种内存异常访问定位方法,用于有效地对内存异常 访问进行定位,参见图l,包括如下步骤
5101、 监视出现异常访问的内存,捕获访问行为;
可以通过配置相关寄存器组(如WATCH寄存器组或JTAG寄存器组)来监 视出现异常访问的内存,当有指令对被监视的内存进行访问时,捕获这些指令 的i方问4亍为。
5102、 根据所述访问行为获取访问指令,通过所述访问指令对所述访问行 为进行定位;
当通过配置WATCH寄存器组来监视内存时,可以通过查询EPC寄存器获 取所述访问指令;或者,
当通过配置JTAG寄存器组来监视内存时,可以通过查询DEPC寄存器获取 所述访问指令。
5103、 分析所述访问指令,得到分析结果;
分析执行所述访问指令时,所述访问指令会对寄存器和/或内存产生影响的 特征,可以对以下至少一个方面进行分析 确定访问指令的类型; 分析访问指令所操作的位宽; 分析是否使用了寄存器的偏移量; 检查访问指令是否在延迟槽等。
5104、 根据分析后的结果,代替所述访问指令完成相应的动作。
具体地,根据分析后的结果修改与完成所述访问指令动作相关的寄存器和 /或内存,使得能够代替所述访问指令完成相应的动作,使得程序能够继续执行。本发明实施例还可以包括
分析获取所述访问指令的访问次数,根据所述访问次数从少到多的次序查
看所述访问指令,能够更快地对内存异常访问进行定位;因为异常访问发生的 概率很低,有多次访问的通常是正常访问行为。
本发明实施例通过不断查看访问指令,分析访问指令,能够有效及时地对 内存异常访问进行定位;并代替访问指令完成相应的动作,避免了需要复位系 统的情况,使得程序能够继续执行,从而可以不断对内存异常访问进行定位。 同时,从访问次数从少到多的次序查看访问指令,能够更快地对内存异常访问 进行定位。
参见图2,为本发明另一实施例流程图,包括以下步骤
5201、 监视出现异常访问的内存,捕获访问行为;
出现异常访问的内存区域为事先所确定的,为了对内存异常访问进行定 位,需要通过监视出现异常访问的内存,以捕获访问行为,即有哪些指令访问 了这块内存。
监视出现异常访问的内存需要对相关寄存器组进行配置,以便在发生内存 访问时捕获访问行为,这里的访问行为可以包括对内存的读写,或者诸如取指 令等一些执行动作。上述相关寄存器组可以是WATCH寄存器组或JTAG寄存器 组,例如可以设置WATCH寄存器组中WATCHLO和WATCHHI寄存器,然后 进行监视。当满足指定的访问策略,CPU会将Cause Register (触发寄存器)中 的ExcCode字段设置为23,表示出现指定的访问行为,并跳转到异常处理代码 段,由此便捕获了访问行为。其中,异常处理代码段为事先定义添加的一段代 码,其具体实现可才艮据程序的需要而不同,如可以对内存访问异常或Cache异 常等进行一些处理等。
5202、 获取访问指令,得到指令地址;
访问指令是指访问被监视的内存的指令。在步骤S 101中捕获访问行为时, 需要获取这些产生访问行为的访问指令的地址。获取访问指令的地址可以通过
可以通过查询EPC寄存器来得到。EPC寄存器是一个64位寄存器,保存着程序在一个异常后继续执行的地址,在发生访问行为时,EPC寄存器中的值就是引
起访问行为的指令地址。通过如果使用JTAG寄存器组来对访问行为进行捕获 时,则可以通过查询DEPC寄存器来得到指令的地址。
5203、 获取访问指令访问次数;
在捕获的访问行为中, 一些访问是引起内存异常访问的非正常访问;而多 数情况往往是正常的访问,且同一访问指令可能重复访问多次,这时,可以记 录这些进行重复访问指令的访问次数,这样做的好处在于当后续对这些指令 进行分析时,可以从访问次数少的指令先开始分析,因为访问次数少,是引起 内存异常访问的非正常访问的概率就大,从而更利于快速地对这些指令进行定 位。
需要说明的是,这个步骤并非并发明实施例必要的步骤,而是优选的一个 方案,通过加入对指令访问次数的获取,可以更快速地对引发内存异常访问的 指令进行定位。
5204、 根据指令地址定位引起内存异常访问的函数; 通过步骤S202获取访问指令的地址后,可以通过查看程序的二进制文件找
到这条指令所在的函数,如果发现该函数原本是不应该访问被监视的内存的, 则这个函数就是引起内存异常访问的函数。
例如,在内存赋值函数memset()中,第一个参数为指向需要赋值的内存首 地址的指针。假设通过步骤S202获取访问指令的地址,并通过查看程序二进制 文件找到这次访问行为是由memset()函数引起的,便可以分析memset()的第一 个参数是否出错,如果没有出错,说明这是一次正常的访问;相反,如果发现 参数有问题,比如指针值已经发生被改变,或变成了值不确定的野指针,则这 次访问为非正常的访问,也就是说,是memset()函数的第一个参数设置错误引 发了内存异常访问,由此即对引起内存异常访问的函数进行了定位,后续便可 以通过修改相应的参数来避免内存异常访问现象的发生。
5205、 分析访问指令,得到分析结果;
在步骤S204中对引发内存异常访问的指令进行了定位,但此时程序处于异 常处理当中(参见步骤S201,程序在对监视的内存出现设定的访问行为时会跳 转到异常处理中),为了让程序继续执行,还需要对该访问指令进行分析,得到分析结果。
对访问指令的分析具体包括修改与完成所述访问指令动作相关的寄存器 和/或内存,使得能够代替所述访问指令完成相应的动作,以及后续需要通过代 替这条指令完成相应的动作,使得程序能够继续完整地执行下去。
分析访问指令可以至少包括以下一个方面
1) 确定访问指令的类型;
确定访问指令的类型可以知道指令对内存或寄存器的操作过程。如指令类 型为LOAD类指令(加载指令)时,则可以知道这条指令是将内存的值加载到 寄存器当中;或者指令类型为STORE类指令(存储指令)时,则可以知道这条 指令是将寄存器的值加载到内存当中。
2) 分析访问指令所操作的位宽;
在MIPS指令中,有一些指令只能操作一个字节(8位),有些指令能操作 一个半字(Half Word,占16位);还有一些指令能够操作一个字(Word,占 16位)或双字(Double Word,占64位),需要分析访问指令属于上述哪一种 情况。
3) 分析是否使用了基于寄存器的偏移量;
有些指令(如LOAD类指令或STORE类指令)对内存或寄存器进行操作时, 会使用基于寄存器的偏移量,如LOAD类指令中的LW (LoadWord)指令用于 从内存中加载一个字(带符号)到寄存器中,占32位的存储空间,其中第0位 到第15位即为基于寄存器的偏移量。对其余指令的分析可参考相关MIPS定义, 在此不再赘述。
4) 检查访问指令是否在DelaySlot (延迟槽);
在MIPS流水线(Pipeline )执行过程当中, 一个条件分支(Conditional Branch)通常不能立刻判断出是否跳转;这个时候,为了使流水线正常进行, MIPS流水线先执行其它一条(或多条指令)不依赖于该条件分支的指令,这就 像在条件分支指令和它的跳转目的指令之间形成了一个槽,用于执行其它指 令,称这个槽为延迟槽。
检查指令是否在延迟槽中,具体可通过查询Cause Register中的BD位;如 果BD位为l,说明该指令是在延迟槽中;否则,该指令不位于延迟槽中。如果访问指令位于延迟槽时,说明上一条指令是个条件分支,即存在一个 跳转指令。当程序从异常处理返回时,并不会执行该访问指令的下一条指令, 而是会去执行跳转指令,但由于延迟槽的存在,程序又会去执行延迟槽中的指 令,然后异常处理返回后又去执行跳转指令,如此反复会使程序出现死循环。 为了防止这种情况的发生,需要分析跳转指令的下一条指令为哪一条指令,然 后代替跳转指令完成向下一条指令跳转的目的。
如果访问指令不位于延迟槽中,则不会存在上述出现死循环的情况,程序 会接着执行该访问指令的下一条指令,因此,只需要分析该访问指令即可。
5206、 根据分析结果,代替访问指令完成相应的动作; 通过步骤S205分析指令功能后,可以根据分析结果来代替访问指令完成相
应的动作。 一条指令如果要完成相应动作的话,需要修改与该指令相关的寄存 器,或者如果还对内存进行操作的话,还需要修改与访问指令相关的内存的内 容。
在本步骤中,通过修改与完成所述访问指令动作相关的寄存器,使得能够 代替访问指令完成相应的动作,从而可以使程序继续正常执行。
以代替LOAD类指令(如LW、 LL、 LWR等指令)要完成的功能为例,因 为LOAD类指令要从内存中读取数据到寄存器中,通过步骤S105的分析,可以 知道访问指令所进行的操作,所以可以根据步骤S105的分析结果,读取相应内 存的值,并且更改相应寄存器的值,来代替LOAD类指令要完成的功能。需要 说明的是,在实际中,根据指令功能及目的不同,还需要修改一些其它寄存器, 如修改EPC寄存器,使得执行完本指令后执行下一条指令等。
通过代替访问指令完成相应的动作,使得程序可以继续正常执行,避免出 现需要复位系统的情况,在对内存异常访问进行定位的同时又不影响正常业 务。
5207、 继续对设定的内存区域进行监视;
继续对内存进行监视,获取访问行为,如果出现访问行为,则继续从步骤 S202开始执行。
本发明实施例通过不断查看访问指令,分析访问指令,能够有效及时地对
内存异常访问进行定位;并代替访问指令完成相应的动作,避免了需要复位系统的情况,使得程序能够继续执行,从而可以不断对内存异常访问进行定位。 同时,从访问次数从少到多的次序查看访问指令,能够更快地对内存异常访问 进行定位。
参见图3,本发明实施例还提供了一种内存异常访问定位装置30,包括 监视单元301,用于监视出现异常访问的内存,捕获访问行为; 获取单元302,用于根据所述访问行为获取访问指令,通过所述访问指令 对所述访问行为进行定位;
分析单元303,用于分析所述访问指令,得到分析结果;
代替单元304,用于根据所述分析结果,代替所述访问指令完成相应的动作。
其中,监视单元301可以通过配置相关寄存器组(如WATCH寄存器组或 JTAG寄存器组)来监视出现异常访问的内存,当有指令对相关内存进行访问 时,即出现了访问行为,此时,系统会改变相关寄存器(如Casuse寄存器)中 某些位,以捕获该访问行为。
所述获取单元302还用于
当通过配置WATCH寄存器组来监视内存时,查询EPC寄存器获取所述访 问指令;或者,
当通过配置JTAG寄存器组来监视内存时,查询DEPC寄存器获取所述访 问指令。
当发生访问行为时,程序会跳转到异常处理代码码,此时,获取单元302 可以通过查询EPC寄存器或DEPC寄存器来获取访问指令的地址,EPC寄存 器或DEPC寄存器中保存着产生访问行为的访问指令的地址。
所述内存异常访问定位装置30,还包括
统计单元305,用于获取所述访问指令的访问次数,根据所述访问次数从 少到多的次序查看所述访问指令,4吏得能够更快对内存异常访问进行定位。
因为对监视的内存的访问不仅有异常访问,也有正常的访问,且正常的访 问往往是占绝大多数。为了快速对产生异常访问的访问指令进行定位,可以通 过统计单元305统计各指令的访问次数,并根据访问次数从少到多的次序查看,这样,先查看的是异常指令的概率就比较大,有利于对内存异常访问进行更快 速地定位。
分析单元303还用于
分析执行所述访问指令时,所述访问指令会对寄存器和/或内存产生影响的 特征,还可以至少如下单元
类型分析单元,用于确定所述访问指令的类型;或者, 位宽分析单元,用于分析所述访问指令所操作的位宽;或者, 偏移量分析单元,用于分析是否使用了基于寄存器的偏移量;或者 延迟槽分析单元,用于检查访问指令是否在延迟槽。 所述代^,单元304还用于
修改与完成所述访问指令动作相关的寄存器和/或内存,使得能够代替所述 访问指令完成相应的动作。
为了避免程序在处理完异常返回后引起系统复位的问题,需要代替引起异 常的访问指令完成相应的动作,使得程序能够继续执行,并在执行过程中不断 查看访问指令,以对引起内存异常访问的指令进行有效定位。
本发明实施例通过不断查看访问指令,分析访问指令,能够有效及时地对
内存异常访问进行定位;并代替访问指令完成相应的动作,避免了需要复位系 统的情况, -使得程序能够继续执行,从而可以不断对内存异常访问进行定位。 同时,从访问次数从少到多的次序查看访问指令,能够更快地对内存异常访问 进行定位。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程, 是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算 机可读取存^诸介质中,该程序在执行时,可包括如上述各方法的实施例的流程。
其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random Access Memory, RAM)等。
上列较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说 明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本 发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
权利要求
1、一种内存异常访问定位方法,其特征在于,包括如下步骤监视出现异常访问的内存,捕获访问行为;根据所述访问行为获取访问指令,通过所述访问指令对所述访问行为进行定位;分析所述访问指令,得到分析结果;根据所述分析结果,代替所述访问指令完成相应的动作。
2、 如权利要求1所述的内存异常访问定位方法,其特征在于,所述根据 所述访问行为获取访问指令的步骤包括当通过配置WATCH寄存器组来监视内存时,查询EPC寄存器获取所述访 问指令;或者,当通过配置JTAG寄存器组来监视内存时,查询DEPC寄存器获取所述访 问指令。
3、 如权利要求1所述的内存异常访问定位方法,其特征在于,还包括 获取所述访问指令的访问次数,根据所述访问次数从少到多的次序查看所述访问指令。
4、 如权利要求1所述的内存异常访问定位方法,其特征在于,所述分析 所述访问指令的步骤包括分析执行所述访问指令时,所述访问指令会对寄存器和/或内存产生影响的 特征,所述分析至少包括确定所述访问指令的类型;或者, 分析所述访问指令所操作的位宽;或者, 分析是否使用了基于寄存器的偏移量;或者 检查访问指令是否在延迟槽。
5、 如权利要求1所述的内存异常访问定位方法,其特征在于,根据所述 分析结果,代替所述访问指令完成相应的动作的步骤包括修改与完成所述访问指令动作相关的寄存器和/或内存,使得能够代替所述 访问指令完成相应的动作。
6、 一种内存异常访问定位装置,其特征在于,包括 监视单元,用于监视出现异常访问的内存,捕获访问行为;获取单元,用于根据所述访问行为获取访问指令,通过所述访问指令对所 述访问4亍为进4亍定4立;分析单元,用于分析所述访问指令,得到分析结果;代替单元,用于根据所述分析结果,代替所述访问指令的完成相应的动作。
7、 如权利要求6所述的内存异常访问定位装置,其特征在于,所述获取 单元还用于当通过配置WATCH寄存器组来监视内存时,查询EPC寄存器获取所述访 问指令;或者,当通过配置JTAG寄存器组来监视内存时,查询DEPC寄存器获取所述访 问指令。
8、 如权利要求6所述的内存异常访问定位装置,其特征在于,还包括 统计单元,用于获取所述访问指令的访问次数,根据所述访问次数从少到多的次序查看所述访问指令,使得能够更快对内存异常访问进行定位。
9、 如权利要求6所述的内存异常访问定位装置,其特征在于,所述分析 单元还用于,分析执行所述访问指令时,所述访问指令会影响寄存器和/或内存 的特征,至少还包括如下单元。类型分析单元,用于确定所述访问指令的类型;或者,位宽分析单元,用于分析所述访问指令所操作的位宽;或者,偏移量分析单元,用于分析是否使用了基于寄存器的偏移量;或者延迟槽分析单元,用于检查访问指令是否在延迟槽。
10、 如权利要求6所述的内存异常访问定位装置,其特征在于,所述代替 单元还用于修改与完成所述访问指令动作相关的寄存器和/或内存,使得能够代替所述 访问指令完成相应的动作。
全文摘要
本发明实施例公开了一种内存异常访问定位方法及装置,其中,内存异常访问定位方法包括如下步骤监视出现异常访问的内存,捕获访问行为;根据所述访问行为获取访问指令,通过所述访问指令对所述访问行为进行定位;分析所述访问指令,得到分析结果;根据所述分析结果,代替所述访问指令完成相应的动作。通过本发明实施例,可以对内存异常访问进行有效地定位。
文档编号G06F11/36GK101533370SQ20091005890
公开日2009年9月16日 申请日期2009年4月9日 优先权日2009年4月9日
发明者王洪雷 申请人:成都市华为赛门铁克科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1