本发明涉及软件测试系统,包括测试平台和调试目标平台的构建,是一种轻量级的测试平台系统的逆向调试实现方法。
背景技术:
以往的软件调试都是正向执行无法回退的,如果用户需要回退到之前程序运行的位置时,就必须重新设置断点,重新启动程序并运行到断点,对于小规模程序来说并不复杂,但是对于大规模程序尤其是耗时程序来说消耗过大,用户难以接受。
随着软件测试需求的不断提出,逆向调试满足了用户对于程序回退执行的需求,在GNU发布的GDB 7.0及其以上版本提供了对i386-linux、amd64-linux和moxie-elf三种目标平台的支持,而对于其他目标平台不提供逆向支持,用户必须对调试器重新设计构建才可以进行逆向调试。对调试器重新设计构建涉及到命令协议、回退状态等诸多问题,工程量复杂,实现难度大。此外,对于每一种目标平台,都必须对对应的调试器重新设计构建,这进一步加剧了软件逆向调试的实现代价。
基于上述技术背景,本发明创新地提出了一种轻量级的测试平台系统的逆向调试实现,使得软件逆向调试的实现代价大大降低。
技术实现要素:
本发明的目的在于针对现有技术的不足,提供一种轻量级的测试平台系统的逆向调试实现方法。
为实现上述目的,本发明采用的技术方案是:一种轻量级的测试平台系统的逆向调试实现方法,其特征在于,该方法包括如下步骤:
(1)测试平台的调试上位机和目标平台程序运行下位机建立调试连接进入正常调试模式;
(2)以约定的逆向调试协议,由测试平台向目标平台发送程序运行方向控制命令;
(3)目标平台对通信内容进行响应,并调整下位机的运行方向设置;
(4)在正向运行方式下,下位机对程序运行进行记录,每隔一定的时钟周期记为一个检查点日志,并记录最近一次单步运行和断点的位置。在逆向运行方式下,逆向单步或逆向运行将根据位置查找对应的检查点日志,下位机加载检查点日志并运行到对应的单步或断点位置,来达到逆向单步或逆向执行的效果;
(5)通过在测试平台中的交互,实时快速地对程序运行方向进行自由控制,以实现正向或逆向调试。
进一步地,所述的逆向调试协议包括两部分:GNU标准通信协议RSP(Remote Serial Protocol)和方向命令。其中方向命令包括正向运行(bid-forward)和逆向运行(bid-backward)。
进一步地,调试上位机以通过只对程序运行方向进行控制来取代调试器增加对逆向调试命令协议、逆向状态管理的复杂设计和实现,而在不需要对调试器进行复杂的重新构建的情况下,轻量级地实现对目标平台的逆向调试。
进一步地,运行下位机只需要实现正向和逆向两种程序执行方式,来取代对大量逆向调试命令的解析和分别实现,轻量级地实现目标平台的逆向调试。
进一步地,提供程序运行方向的可视化配置接口,用于可以自由选择程序运行方向来实现正向或逆向调试。本发明具有的有益效果是:本发明通过对目标平台程序运行方向的控制,来做到逆向调试的运行协议和控制流程的简化,实现了在不需要对调试器进行复杂的重新构建的情况下的逆向调试,并且具有广泛的平台适应性和兼容性。极大地减小了软件逆向调试的实现代价。
附图说明
图1是逆向调试系统框架;
图2是逆向调试在GNU环境下的系统框架;
图3是逆向调试使用流程。
具体实施方式
下面结合附图和实例对本发明作进一步说明。
本发明提供了一种轻量级的测试平台系统的逆向调试实现方法,包括以下步骤:
(1)测试平台对于逆向调试协议设计,包括对目标平台程序运行方向的控制,所述的逆向调试协议包括两部分:GNU标准通信协议RSP(Remote Serial Protocol)和方向命令。其中方向命令包括正向运行(bid-forward)和逆向运行(bid-backward);
(2)测试平台在上述协议设计下向调试目标平台的逆向调试命令注入,对于集成GNU调试器链来说需要独立于MI接口向目标平台注入调试命令;以通过只对程序运行方向进行控制来取代调试器增加对逆向调试命令协议、逆向状态管理的复杂设计和实现,而在不需要对调试器进行复杂的重新构建的情况下实现逆向调试。
(3)目标平台对通信内容进行响应,并调整下位机的运行方向设置。在正向运行方式下,下位机对程序运行进行记录,每隔一定的时钟周期记为一个检查点日志,并记录最近一次单步运行和断点的位置。在逆向运行方式下,逆向单步或逆向运行将根据位置查找对应的检查点日志,下位机加载检查点日志并运行到对应的单步或断点位置,来达到逆向单步或逆向执行的效果。运行下位机只需要实现正向和逆向两种程序执行方式,来取代对大量逆向调试命令的解析和分别实现,轻量级地实现目标平台的逆向调试。
(4)通过在测试平台中的交互,实时快速地对程序运行方向进行自由配置。用户可以通过测试平台程序运行方向的可视化配置接口,来决定程序运行方向,可以在正向调试与逆向调试之间自由切换。
通过对测试平台进行扩展,可以支持对多种目标平台进行调试,在保证目标平台遵循基于方向的运行模式和方向控制协议的情况下,可以直接对目标平台进行逆向调试而不需要对测试平台和测试工具做任何改变。
与已经实现了传统逆向调试的测试平台和目标平台兼容,对于已经实现了传统逆向调试的测试平台和目标平台,只要目标平台遵循基于方向的运行模式和方向控制协议,那么通过传统的逆向调试流程或本发明所述的逆向调试流程均可以实现对程序的逆向调试,而不会造成冲突。
当新的目标平台需要连接测试平台进行逆向调试时,只需要遵循方向控制协议,在不同的运行方向下,对程序的继续运行以逆向还原的形式进行响应,而不需要对目标平台的逆向实现模块进行改变。
提供可视化配置接口,包括对程序运行方向进行控制的模组。
实施例
如图1所示,测试软件系统由测试平台和测试目标平台组成,测试平台与测试目标平台的通信分为正向调试命令和运行方向控制命令两部分。
逆向调试在GNU环境下的系统框架如图2所示:
逆向调试使用流程如图3所示:
(1)测试平台建立与目标平台的调试和通信连接;
(2)进入正常的正向调试流程;
(3)在程序运行至某一断点位置时,用户通过可视化组件设置程序运行方向;
(4)根据用户设置的运行方向,如果正向执行那么目标平台以正向调试的流程继续进行调试;
(5)如果是逆向执行,那么以逆向回退至逆向上下一个断点的方式继续进行调试。