一种计算机程序运行阶段代码内存校验方法与流程

文档序号:14443870阅读:821来源:国知局

本发明属于计算机技术领域,尤其涉及一种计算机程序运行阶段代码内存校验方法。



背景技术:

应用程序代码段包含了程序指令和参数数据,有可能会因为操作系统运行异常等原因,出现代码段数据异位或数据被改写等代码段内存故障,从而使得某些起关键作用的应用软件发生错误,造成重大影响。比如在某个列车通过的线路上,需要检查5个设备均正常才允许列车通过,但是因为存储“5”这个数量的代码段故障,“5”变成了“4”,就会漏检查一项内容,就可能对列车安全运行造成影响。因此,应用软件被系统加载至内存后,需要考虑并处理程序运行过程中,代码段内存故障导致的代码段异常情况。

现有技术是对应用软件增加校验码,在程序加载阶段进行校验,不能实现程序运行阶段对代码内存的校验。



技术实现要素:

本发明的目的是:为避免程序运行阶段出现代码段内存故障,从而提供一种计算机程序运行阶段代码内存校验方法。

本发明的技术方案是:一种计算机程序运行阶段代码内存校验方法,包括以下步骤:

步骤1:在加载程序阶段,采用校验算法对代码进行计算,生成校验码;

步骤2:程序主体逻辑执行;

步骤3:采用步骤1中的校验算法对程序代码执行校验,将校验结果与步骤1中的效验码进行比较:

若比较结果一致,通过校验,表明不存在代码段故障;

若比较结果不一致,未通过校验,表明代码段发生了改变,此时执行安全措施。

更进一步地,所述代码内存校验方法在进行所述步骤1、步骤2、步骤3之前还包括判断系统运算资源,根据判断结果选择校验方式的步骤,该步骤包括:

在程序参数配置阶段,通过实际代码运行,按一次校验方式计算程序执行时间,若执行时间超出预定的时间,则认定一次校验运算资源不足,否则认定运算资源充足;

若系统运算资源充足,对程序代码执行一次校验;

若系统运算资源不足,对程序代码进行分时、分段校验,直至实现完整的程序代码校验。

更进一步地,所述预定的时间,根据该程序代码在不添加内存校验情况下,执行一次逻辑运算所花费的时间确定。

更进一步地,所述步骤1中的校验算法为crc校验算法。

更进一步地,所述crc校验算法为crc16校验算法。

更进一步地,所述步骤3中的安全措施为终止程序运行并输出校验日志。

更进一步地,所述计算机程序运行阶段代码内存校验方法为程序内部逻辑,不依赖于操作系统。

与已有技术相比,本发明的有益效果体现在:本发明提出程序运行阶段代码段内存校验方法,可在不同操作系统中进行,并可根据系统资源分时、分段校验,不仅提高了程序运行的可靠性,也减少了代码校验对系统资源的占用,提高了校验效率。在代码段内存故障时,可以执行安全措施,提高了应用程序的可靠性。

附图说明

图1计算机程序运行阶段代码内存校验流程图

具体实施方式

下面将结合本发明的附图和具体实施例,对本发明的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,本发明的保护范围不仅限于下述实施例的限制。

本实施例将以针对计算机联锁应用程序的000138e8h~00056958h内存段中的代码进行内存校验为例,说明本发明的技术方案。

对计算机程序的内存校验通常采用对代码进行一次校验的方式进行,但实际中可能存在cpu运算能力较低或者程序配置参数过于庞大等原因造成对代码进行一次校验系统资源不足,影响程序的校验效率及运行效率。本实施例优选地,在进行校验之前,增加判断系统运算资源,根据判断结果决定选择校验方式的步骤:

在程序参数配置阶段,对000138e8h~00056958h段程序代码按一次校验方式计算程序执行时间,若执行时间超出预定的时间,则认定一次校验运算资源不足,否则认定运算资源充足;

若系统运算资源充足,对程序代码执行一次校验;

若系统运算资源不足,对程序代码进行分时、分段校验,直至实现完整的程序代码校验。

这里,上述预定的时间,根据该程序代码在不添加内存校验情况下,执行一次逻辑运算所花费的时间确定。通常计算机联锁应用程序执行一次逻辑运转过程都低于300ms这个时间且留有较大的余量,因此预定的时间可设为300ms。如果增加了内存校验功能,使得计算机联锁应用程序运转时间仍在300ms以内,则认定运算资源充足;若运转时间超过了300ms,则认定运算资源不足。

如图1所示,计算机程序运行阶段代码内存校验实现如下。这里将针对上述两种校验方式,本实施例分别进行了验证说明。

步骤1:

在加载程序阶段,采用校验算法对代码进行计算,生成校验码。

本实施例中,校验算法优选采用crc校验算法,可以选择其中的crc16校验算法或crc32校验算法。本实施例优选地使用crc16校验算法为例加以说明。

若系统运算资源充足,采取crc16校验算法对上述代码段进行整体校验计算,得到的校验码为06bch。

若系统运算资源不足,采取crc16校验算法对上述代码段进行分三段校验计算,得到的校验码分别为51adh、0c36h、b05eh。

步骤3:

程序主体逻辑执行。

步骤4:

采用步骤1中的校验算法,即crc16校验算法对程序代码执行校验,将校验结果与步骤1中的效验码进行比较。

步骤4.1:

系统运算资源充足时,使用crc16校验算法对上述代码段执行一次校验,得出的结果为06bch。

系统运算资源不足时,使用crc16校验算法对程序代码分成3段执行了3次校验,最终得出的结果为分别为51adh、0c36h、b05eh。

步骤4.2:

系统运算资源充足时,与步骤2得出的结果06bch比较,发现运行时该程序通过校验,不存在代码段内存故障。

系统运算资源不足时,与步骤2得出的结果51adh、0c36h、b05eh比较,发现运行时该程序通过校验,不存在代码段内存故障。

人为添加干扰使得代码段参数数据错误,再次重复步骤4;系统运算资源充足时,校验得出的结果为7bedh,与步骤2中的结果06bch比较,两者不一致,判断为发生了代码段内存故障,此时执行安全措施;系统运算资源不足时,校验得出的结果分别为d78eh、3eadh、041dh,与步骤2中的结果51adh、0c36h、b05eh比较,两者不一致,发生了代码段内存故障,此时执行安全措施。

本实施例中的安全措施为终止程序运行并输出校验日志。

本实施例表明,本发明提供的计算机程序运行阶段代码内存校验方法,可以有效的检验出应用软件代码段内存故障,并采取相应的安全措施。此外,本发明的技术方案是应用程序自身对自身代码段的检查,不依赖于某一操作系统,可以跨平台实现。



技术特征:

技术总结
本发明公开了一种计算机程序运行阶段代码内存校验方法。它包括:在加载程序阶段,采用校验算法对代码进行计算,生成校验码;程序主体逻辑执行;采用相同校验算法对程序代码执行校验,将校验结果与程序加载时得到的效验码进行比较,从而判断是否存在代码段内存故障等步骤。该校验方法可以根据系统资源是否充足采取一次性校验或分时分段校验的方式,节省了系统资源。检查到代码段出现内存故障时,可以执行安全措施提高了应用程序的可靠性。

技术研发人员:聂志国;邱锡宏;王春华;金松岳;邱兆阳
受保护的技术使用者:北京全路通信信号研究设计院集团有限公司
技术研发日:2017.11.13
技术公布日:2018.05.15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1