一种定位特定内存被函数非法改写的方法

文档序号:6458073阅读:278来源:国知局
专利名称:一种定位特定内存被函数非法改写的方法
技术领域
本发明涉及通信领域,特别涉及一种定位特定内存被函数非法改写的方法。
背景技术
在通信技术领域中,大多数产品采用的是嵌入式实时操作系统,例如Linux、 VxWorks等操作系统。在当前数据通讯产品,例如路由器、交换机、 以及宽带接入服务器中,都使用了 VxWorks作为技术人员开发的基石,内存 管理采用了基于VxWorks的扁平(FLAT)内存模式,所有的全局变量、队列、 链表、指针可以被所有的任务直接访问。尽管这样可以提高进程或任务间通讯 的效率,但同时也4艮有可能导致系统运行出现异常。为了避免上述共享内存带来的系统不稳定问题,目前通常考虑使用禁止抢 占、关中断或者使用信号量的方式来保护共享内存。在上述三种方法中,禁止抢占会使内核任务调度暂时失效,但是,除了中 断程序,其它任务都不能运行;使用信号量来保护共享内存时,并不禁止其它 任务的运行,只会让访问到共享内存资源的任务暂停,尽管对系统实时性影响 较小,但是也无法防止中断服务程序对临界资源的访问;而关中断,相对上述 两种方式而言更为有效,其可以完全防止其它任务或中断服务程序的冲突访 问,执行效率也最高,但是,中断只能关很短时间,否则会造成系统时钟以及 其它外部事件都无法得到正确处理,从而极大的降低系统的实时程度。总之,通过上述三种方式对特定的共享内存进行保护均有各自的缺点,为 此,需要找到一种更为有效的防止特定内存被非法改写的方法。 发明内容本发明的目的在于,提供一种定位特定内存被函数非法改写的方法,能够 较好的避免并定位内存被非法改写而不得知的情况,可以提高系统稳定性。 本发明的定位特定内存被函数非法改写的方法,其中,在嵌入式实时操作系统运行中,在不允许访问特定内存的函数体内设定函数改写特定内存时候的 异常处理,并在函数内进行了改写特定内存操作时进行相应的处理及定位。其中,所述在函数体内设定函数改写特定内存时候的异常处理,为将非法 操作任务挂起。其中,所述在函数内进行了改写特定内存操作时进行相应的处理及定位,包括下列步骤通过调用系统中的查看运行任务功能的函数,查看当前CPU 上运行的所有任务,针对其中处于挂起状态的任务,通过调用系统中的查看当 前任务中函数调用情况的函数,查看给定任务的当前函数调用堆栈情况,获知 特定内存被哪个函数所改写。进一步地,可以包括下列步骤步骤A:预先设置特定内存空间所在页的页属性为不可写;步骤B:系统在运行过程中,当有函数访问或改写特定内存时,判断是否 允许所述函数访问或改写,如果否,则在不允许访问特定内存的函数体内设定 函数改写特定内存时候的异常处理。其中,在所述步骤A之前,可以进一步包括下列步骤系统在初始化过 程中,设定一内存空间为特定内存,内存空间的大小以页为单位。其中,在步骤B中,在判断结果为允许所述函数访问或改写时,可以包 括下列步骤在所述函数执行体的开始部分,编写代码设置特定内存所在页属 性为可写,然后所述函数执行写特定内存操作的程序指令,并在函数执行结束 时设置内存属性为不可写后退出,系统正常运行。此外,所述嵌入式实时操作系统,为VxWorks系统或者Linux系统。其中,在VxWorks系统中,所述系统内相关函数,包括查看系统上运行 任务的i函数、查看当前任务中函数调用情况的tt函数、以及查看当前任务状 态的ti函凄史。本发明的有益效果是依照本发明的定位特定内存被函数非法改写的方 法,通过只允许一个或几个有合法写权限的函数可以对重要的共享内存空间执 行写操作,对于某些不被授权的函数,则增加针对改写内存操作的异常处理方 式,从而能够较好的避免并定位内存被非法改写而不得知的情况,可以提高系 统的稳定性。


图1为本发明实施例的定位VxWorks特定内存被函数非法改写的方法流 程图。
具体实施方式
以下,参考附图详细描述本发明的定位特定内存被函数非法改写的方法。本发明的核心思想是对于嵌入式实时操作系统,任务表现为一个函数, 该函数就是任务的入口函数,每个任务拥有自己的堆栈,操作系统使用抢占调 度或轮转调度对系统中的任务进行调度,所有任务在一个统一的线性地址空间 内运行。因此,可利用系统中自带的很多调试函数来查看系统运行异常如任务 挂起时候的信息,根据此信息定位任务挂起的原因,从而迅速解决问题。以下,仅以VxWorks系统为例对本发明的定位特定内存被函数非法改写 的方法进行说明,但是本发明并不局限于此,还可以包括Linux系统等;在VxWorks系统中,i函数,为查看系统上运行的任务的函数;tt函数, 为查看当前任务中函数调用情况的函数;ti函数,为查看当前任务状态的函数。如图1所示,为本发明实施例的定位VxWorks特定内存被函数非法改写 的方法流程图,该方法包括下列步骤步骤101:设置特定内存空间所在页的页属性为不可写;其中,在步骤101之前,可以进一步包括下列步骤系统在初始化过程中, 设定一内存空间为特定内存,内存空间的大小以页为单位。步骤102:系统在运行过程中,当有函数访问或改写该特定内存时,判断 是否允许该函数访问或改写,如果是,则执行步骤103;否则,执行步骤104;步骤103:在该函数执行体的开始部分,编写代码设置特定内存所在页属 性为可写,然后函数执行写特定内存操作的程序指令,并在函数执行结束时设 置内存属性为不可写后退出函数;其中,在步骤103中,在函数执行结束时,意味着函数对特定内存的改写 也结束了,此时,在函数体的结束部分,编写代码将特定内存空间所在页属性 设置为不可写,最后退出函数的执行,系统正常运行。步骤104:预先在函数体内设定函数改写特定内存时的异常处理,例如, 将非法操作任务挂起,进而判断该函数体内是否有写特定内存操作;如果是,则将非法操作任务挂起,并定位该改写特定内存的函数;否则,系统正常运行。其中,在步骤104中,将非法操作任务挂起,并定位该改写特定内存的函 数,包括下列步骤步骤41:调用系统中查看任务的函数,查看挂起的任务名或者任务ID;其中,对于VxWorks系统,可以通过调用系统自带的查看运行任务功能 的i函数,查看当前CPU上运行的所有任务,如果看到某个任务的状态为挂 起(suspend),则表明其因为某种原因,已经出现异常的状态;步骤42:针对上述处于suspend状态的任务,通过调用特定系统函数定位 改写特定内存的函数。其中,在步骤42中,对于VxWorks系统,可以通过调用系统自带的查看 当前任务中函数调用情况的tt函数,通过"tt任务名/任务ID,,查看给定任务 的当前函数调用堆栈情况,从而获知内存是被哪个函数改写的。综上所述,依照本发明的定位特定内存被函数非法改写的方法,通过只允 许一个或几个有合法写权限的函数可以对重要的共享内存空间执行写操作,对 于某些不被授权的函数,则增加针对改写内存操作的异常处理方式,从而能够 较好的避免并定位内存被非法改写而不得知的情况,可以提高系统的稳定性。以上是为了使本领域普通技术人员理解本发明,而对本发明所进行的详细 描述,但可以想到,在不脱离本发明的权利要求所涵盖的范围内还可以做出其 它的变化和修改,这些变化和修改均在本发明的保护范围内。
权利要求
1.一种定位特定内存被函数非法改写的方法,其特征在于,在嵌入式实时操作系统运行中,在不允许访问特定内存的函数体内设定函数改写特定内存时候的异常处理,并在函数内进行了改写特定内存操作时进行相应的处理及定位。
2. 如权利要求1所述的定位特定内存被函数非法改写的方法,其特征在 于,所述在函数体内设定函数改写特定内存时候的异常处理,为将非法操作任 务挂起。
3. 如权利要求2所述的定位特定内存被函数非法改写的方法,其特征在 于,所述在函数内进行了改写特定内存操作时进行相应的处理及定位,包括下 列步骤通过调用系统中的查看运行任务功能的函数,查看当前CPU上运行的所 有任务,针对其中处于挂起状态的任务,通过调用系统中的查看当前任务中函 数调用情况的函数,查看给定任务的当前函数调用堆栈情况,获知特定内存被 哪个函数所改写。
4. 如权利要求3所述的定位特定内存被函数非法改写的方法,其特征在 于,进一步包括下列步骤步骤A:预先设置特定内存空间所在页的页属性为不可写;步骤B:系统在运行过程中,当有函数访问或改写特定内存时,判断是否允许所述函数访问或改写,如果否,则在不允许访问特定内存的函数体内设定函数改写特定内存时候的异常处理。
5. 如权利要求4所述的定位特定内存被函数非法改写的方法,其特征在 于,在所述步骤A之前,进一步包括下列步骤系统在初始化过程中,设定 一内存空间为特定内存,内存空间的大小以页为单位。
6. 如权利要求4所述的定位特定内存被函数非法改写的方法,其特征在 于,在步骤B中,在判断结果为允许所述函数访问或改写时,包括下列步骤在所述函数执行体的开始部分,编写代码设置特定内存所在页属性为可 写,然后所述函数执行写特定内存操作的程序指令,并在函数执行结束时设置内存属性为不可写后退出,系统正常运行。
7. 如权利要求1所述的定位特定内存被函数非法改写的方法,其特征在 于,所述嵌入式实时操作系统,为VxWorks系统或者Linux系统。
8. 如权利要求7所述的定位特定内存被函数非法改写的方法,其特征在 于,在VxWorks系统中,所述系统内相关函数,包括查看系统上运行任务的i 函数、查看当前任务中函数调用情况的tt函数、以及查看当前任务状态的ti 函数。
全文摘要
本发明提供一种定位特定内存被函数非法改写的方法,其中,在嵌入式实时操作系统运行中,在不允许访问特定内存的函数体内设定函数改写特定内存时候的异常处理,并在函数内进行了改写特定内存操作时进行相应的处理及定位。本发明的定位特定内存被函数非法改写的方法,能够较好的避免并定位内存被非法改写而不得知的情况,可以提高系统稳定性。
文档编号G06F9/46GK101231599SQ20081000683
公开日2008年7月30日 申请日期2008年2月2日 优先权日2008年2月2日
发明者杨利君, 石江涛 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1