一种实现指令集模拟器正逆双向执行的方法与流程

文档序号:18403715发布日期:2019-08-10 00:09阅读:536来源:国知局
一种实现指令集模拟器正逆双向执行的方法与流程

本发明涉及一种程序调试与测试技术,特别是一种实现指令集模拟器正逆双向执行的方法。



背景技术:

软件调试与测试是提高软件质量,保证软件可靠性必不可少的有效手段,软件测试的目的是发现软件错误,软件调试的目的是定位错误、纠正错误。在软件调试、测试过程中,往往需要使软件执行到特定的时刻,从而便于查找软件问题。通常在软件测试与调试程序过程中,为了能快速对错误进行定位,会在一些重要的变量内容输出(尤其是一些变量的中间结果),或者关键变量、特定函数、子程序、过程调用、循环语句前后及循环体等关键部位设置断点,以此来监视重要变量的变化以及软件程序状态。上述方法能显示软件程序的动态行为,并利用软件程序语言的纠错功能对错误进行定位,另外上述测试与调试方法采用的工具支持单步或多步执行,并逐步显示运行软件程序状态信息。根据该状态信息可以分析与判断软件程序的执行情况,确定错误的位置。

然而在很多情况下,正向的单步或多步执行并不能满足软件程序的调试需求。当软件程序执行出现错误时,正向的单步或者多步执行难以确认软件程序是具体从何时开始出现异常,进而无法得到软件程序执行错误的起因。在这种情况下,需要测试与调试者不断在执行错误位置之前设置断点并复位软件重新调试,直到找到错误起因,耗费大量的时间和精力,因此需要一种实现软件程序双向执行的测试技术。



技术实现要素:

本发明解决的技术问题是:克服现有技术的不足,提供了一种实现指令集模拟器正逆双向执行的方法,解决了软件程序调试、测试过程中需要将目标软件程序执行到小于或大于当前仿真时刻的问题,与现有技术相比可以使得软件程序相对当前时刻向前或向后执行,大大提高了软件程序调试与测试的效率与质量。

本发明的技术解决方案是:一种实现指令集模拟器正逆双向执行的方法,包括如下步骤:

(1)使用指令集模拟器对软件进行执行,在软件执行过程中记录并存储执行开始时指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态,其中,外设状态包括软件执行所使用的虚拟的定时器、总线、中断控制器、FPGA、传感器的内部数据;

每隔时间T记录并存储指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态直至软件执行结束,将起始开始时间、每个记录时间点记为关键记录时间点,得到关键记录时间点集合;所述的起始开始时间为软件执行开始的时间;其中,T为正数,关键记录时间点为指令集模拟器中的仿真时间,每个关键记录时间点均会记录并存储指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态;

(2)当需要进行逆向执行时,从外部获取需要逆向执行的起始时间点并判断,若起始时间点不为关键记录时间点,则判断当前逆向执行,如果进行指令逆向执行,则选取指令时间粒度,进而得到选取指令时间粒度对应的时间,然后计算得到需要逆向执行的起始时间点与选取指令时间粒度对应的时间的差值t’,并记为需要逆向执行的终止时间点,在关键记录时间点集合中寻找最接近且不大于t’的关键记录时间点,转入步骤(3),其中,指令时间粒度为正数;如果进行函数逆向执行,则选取函数时间粒度,进而得到选取函数时间粒度对应的时间,然后计算得到需要逆向执行的起始时间点与选取函数时间粒度对应的时间的差值t’,并记为需要逆向执行的终止时间点,在关键记录时间点集合中寻找最接近且不大于t’的关键记录时间点,转入步骤(3),其中,函数时间粒度为正数;如果进行软件功能逆向执行,则选取功能时间粒度,进而得到选取功能时间粒度对应的时间,然后计算得到需要逆向执行的起始时间点与选取功能时间粒度对应的时间的差值t’,并记为需要逆向执行的终止时间点,在关键记录时间点集合中寻找最接近且不大于t’的关键记录时间点,转入步骤(3),其中,功能时间粒度为正数;若起始时间点为关键记录时间点,则读取当前起始时间点对应的关键记录时间点,并转入步骤(3);当需要进行正向执行时,使用指令集模拟器对软件进行执行,然后等待新的逆向执行或者正向执行;

(3)读取步骤(2)得到的关键记录时间点对应的指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态,控制指令集模拟器恢复为读取到的指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态,将指令集模拟器的仿真时间恢复为关键记录时间点,实现逆向执行至指定时间点,然后等待新的逆向执行或者正向执行。

所述的T的取值为5s-10s。

所述的关键记录时间点集合还包括通过如下方法获得的时间点:

(1)从外部获取需要进行逆向调试的参考时间点并记为ti,在[0-ti]中寻找最接近ti的关键记录时间点;

(2)将步骤(1)得到的关键记录时间点与ti的中间时间点作为新的关键记录时间点,将新的关键记录时间点添加到关键记录时间点集合;

(3)选取新的关键记录时间点与ti之间的中间时间点作为另一个新的关键记录时间点或者选取0与新的关键记录时间点之间的中间时间点作为另一个新的关键记录时间点;

(4)重复步骤(3)选取多个关键记录时间点,直至关键记录时间点集合中元素个数满足要求。

所述的指令时间粒度为1-20个cpu cycles。

所述的指令时间粒度为10个cpu cycles。

所述的函数时间粒度为0.01ms-0.1ms。

所述的功能时间粒度为0.01s-0.1s。

本发明与现有技术相比的优点在于:

本发明方法通过在软件执行过程中记录关键记录时间点集合中各个时间点对应的指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态,能够控制软件进行正向及逆向执行,避免了传统的调试方法只能知道软件出现错误的结果而难以确认软件何时开始出现异常、造成错误起因难确定的问题,使调试者可以通过正向执行和逆向执行相结合的调试手段,快速查找的软件何时开始出现异常、造成最终错误呈现的结果的起因,节省大量时间和精力。

附图说明

图1为本发明一种实现指令集模拟器正逆双向执行的方法原理流程图。

具体实施方式

本发明针对现有技术的不足,提供了一种实现指令集模拟器正逆双向执行的方法,解决了软件程序调试、测试过程中需要将目标软件程序执行到小于或大于当前仿真时刻的问题,使软件程序能够相对当前时刻向前或向后执行,提高了软件程序调试与测试的效率与质量,本发明一种实现指令集模拟器正逆双向执行的方法,包括记录关键时间节点的状态、查找最近记录的一个点、设置点的间隔、运行到制定的时间等步骤,下面结合附图对本发明方法进行详细说明,如图1所示本发明方法包括如下步骤。

STEP.1:记录关键点的状态。

使用指令集模拟器对软件进行执行,在软件执行过程中记录并存储执行开始时指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态,其中,外设状态包括虚拟的定时器、总线、中断控制器、FPGA、传感器的内部数据,关键记录时间点为指令集模拟器中仿真时间;每隔时间T记录并存储指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态,将起始开始时间、每个记录时间点记为关键记录时间点,得到关键记录时间点集合,其中,T的取值为5-10s,本发明方法中每个关键记录时间点均会记录并存储其对应的指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态。

另外,本发明方法可以获取或者选择新的关键记录时间点来补充到关键记录时间点集合,提高精度,以下结合一种获取新关键时间点的方式进行说明。

从外部获取需要进行逆向调试的参考时间点并记为ti,在[0-ti]寻找最接近ti的关键记录时间点,将当前关键记录时间点与ti的中间时间点作为新的关键记录时间点,然后在新的关键记录时间点与ti之间或者0与新的关键记录时间点之间重复上述过程得到更多新的关键记录时间点,直至关键记录时间点集合满足精度要求。

STEP.2:设置时间粒度

执行到需要逆向执行的起始时间点时,进行判断,若当前起始时间点不为STEP.1得到的关键记录时间点,则判断当前逆向执行,如果需要指令逆向执行时,则选取时间粒度为一般1-20(最好为10)个cpu cycles,获取cpu cycle对应的时间,进而得到选取时间粒度对应的时间,然后计算得到需要逆向执行的起始时间点与选取时间粒度对应的时间的差值t’,并记为需要逆向执行的终止时间点,寻找最接近且不大于t’的关键记录时间点;如果进行函数逆向执行,则选取函数时间粒度(0.01ms-0.1ms),进而得到选取函数时间粒度对应的时间,然后计算得到需要逆向执行的起始时间点与选取函数时间粒度对应的时间的差值t’,并记为需要逆向执行的终止时间点,在关键记录时间点集合中寻找最接近且不大于t’的关键记录时间点;如果进行软件功能逆向执行,则选取功能时间粒度(0.01s-0.1s),进而得到选取功能时间粒度对应的时间,然后计算得到需要逆向执行的起始时间点与选取功能时间粒度对应的时间的差值t’,并记为需要逆向执行的终止时间点,在关键记录时间点集合中寻找最接近且不大于t’的关键记录时间点;

若当前起始时间点为STEP.1得到的关键记录时间点,则读取当前起始时间点对应的关键记录时间点。

STEP.3:恢复运行状态。

读取步骤(2)得到的关键记录时间点对应的指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态,控制指令集模拟器恢复为读取到的指令集模拟器的处理器运行状态、寄存器状态、内存状态、外设状态,将指令集模拟器的仿真时间恢复为关键记录时间点,实现将指令集模拟器恢复到指令集模拟器中软件在关键记录时间点的执行状态。

STEP.4:向下执行。

恢复运行状态后完成当前逆向执行,当需要再次逆向执行时,重复STEP.2-STEP.3完成执行,另外本发明方法也可以根据精准时间点或者时间粒度进行正向执行。

按照上述四个步骤,即可实现指令集模拟器正逆双向执行的方法。应用此方法的产品工具中“运行到”功能工具栏的按钮从左至右依次为:时间存点、设置运行时间、向前运行、向后运行、参数设置、存点管理。该“运行到”功能让仿真系统运行到指定的时刻,指定的时刻可以小于当前仿真时刻,其原理是以定时存点为基础,首先将仿真系统恢复到设定时刻之前最近的一个存点状态,再运行到指定的时刻,另外,本发明方法可以使用存点管理功能删除或直接装载已有的存点状态。

本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1