CN105138459B - 一种对软件程序进行测试的方法及装置 - Google Patents
一种对软件程序进行测试的方法及装置 Download PDFInfo
- Publication number
- CN105138459B CN105138459B CN201510578849.1A CN201510578849A CN105138459B CN 105138459 B CN105138459 B CN 105138459B CN 201510578849 A CN201510578849 A CN 201510578849A CN 105138459 B CN105138459 B CN 105138459B
- Authority
- CN
- China
- Prior art keywords
- target program
- data
- program
- snapshot
- breakpoint
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种对软件程序进行测试的方法,所述方法包括:获取目标程序对应的畸形数据,其中,所述目标程序中的用于处理输入数据的目标代码之前设置有断点,用以在所述目标程序中断运行后获取和记录所述目标程序运行在所述断点时的快照;将所述畸形数据作为所述输入数据,运行所述目标程序;当所述目标程序处理所述畸形数据发生异常时,获取所述目标程序的异常信息,并根据所述快照恢复运行所述目标程序。相应的,本发明还提供了一种装置。采用本发明,可实现在利用批量畸形数据对所述目标程序进行模糊测试的过程中,所述目标程序根据所述快照直接从所述断点处恢复运行,避免反复运行所述目标代码之前的代码,提高了测试效率。
Description
技术领域
本发明涉及软件测试领域,尤其涉及一种对软件程序进行测试的方法及装置。
背景技术
模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入(也称畸形数据)并监视异常结果来发现软件漏洞的方法。
现有的模糊测试工具通常会生成二进制的畸形测试数据,通过反复的启动待测试软件来处理所述畸形测试数据,结合调试器的异常捕获机制,来捕捉待测试软件是否出现崩溃或者卡死等异常现象。当待测试软件处理所述畸形数据发生异常时,开发人员可以结合异常信息,通过分析导致异常的畸形测试数据发现待测试软件中可能存在的安全漏洞。
但是,现有的模糊测试技术中,每一次测试都需要重新启动整个待测试软件。开发人员需要在启动待测试软件后等待较长时间后才能捕捉到待测试软件处理所述畸形数据所产生的异常。尤其对于某些较庞大的待测试软件(如Word)来说,因其初始化速度很慢(需要初始化的配置项较多),其退出速度也很慢(需要释放的资源较多),现有的模糊测试技术极大地浪费了测试时间,测试效率低下。
发明内容
本发明实施例提供了一种对软件程序进行测试的方法及装置,可实现在利用批量畸形数据对所述目标程序进行模糊测试的过程中,所述目标程序根据所述快照直接从所述断点处恢复运行,避免反复运行所述目标代码之前的代码,提高了测试效率。
本发明实施例第一方面提供了一种对软件程序进行测试的方法,所述目标程序中的用于处理输入数据的目标代码之前设置有断点,用以在所述目标程序中断运行后获取和记录所述目标程序运行在所述断点时的快照,所述方法,包括:
获取目标程序对应的畸形数据;
将所述畸形数据作为所述输入数据,运行所述目标程序;
当所述目标程序处理所述畸形数据发生异常时,获取所述目标程序的异常信息,并根据所述快照恢复运行所述目标程序。
结合第一方面,在第一种可能的实现方式中,在所述目标程序中的初始化代码之后,在所述目标程序中的用于处理所述输入数据的目标代码之前设置有断点。
结合第一方面,或者,结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,在所述目标程序中的多个用于处理输入数据的目标代码之前分别设置有相应断点,用以分别获取和记录目标程序运行在所述相应断点时的快照。
结合第一方面,在第三种可能的实现方式中,在所述运行所述目标程序之后,所述方法还包括:记录所述目标程序处理所述畸形数据没有发生异常的时间,如果所述时间超过预设时间,则结束运行所述目标程序,并根据所述快照恢复运行所述目标程序。
结合第一方面,在第四种可能的实现方式中,在所述运行所述目标程序之前,所述方法还包括:开启异常捕捉程序,所述异常捕捉程序用于捕捉所述目标程序出现的所述异常。
本发明实施例第二方面提供了一种对软件程序进行测试的装置,在目标程序中的用于处理输入数据的目标代码之前设置有断点,用以在所述目标程序中断运行后获取和记录所述目标程序运行在所述断点时的快照,所述装置包括:
获取单元,用于获取目标程序对应的畸形数据;
执行单元,用于将所述畸形数据作为所述输入数据,运行所述目标程序;
恢复单元,用于当所述目标程序处理所述畸形数据发生异常时,获取所述目标程序的异常信息,并根据所述快照恢复运行所述目标程序。
结合第二方面,在第一种可能的实现方式中,在所述目标程序中的初始化代码之后,在所述目标程序中的用于处理所述输入数据的目标代码之前设置有断点。
结合第二方面,或者,结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,在所述目标程序中的多个用于处理输入数据的目标代码之前分别设置有相应断点,用以分别获取和记录目标程序运行在所述相应断点时的快照。
结合第二方面,在第三种可能的实现方式中,所述装置还包括:记录单元,其中:
所述记录单元,用于在所述执行单元运行所述目标程序之后,记录所述目标程序处理所述畸形数据没有发生异常的时间;
所述恢复单元,还用于:如果所述时间超过预设时间,则结束运行所述目标程序,并根据所述快照恢复运行所述目标程序。
结合第二方面,在第四种可能的实现方式中,所述装置还包括:开启单元,用于在所述执行单元运行所述目标程序之前,开启异常捕捉程序,所述异常捕捉程序用于捕捉所述目标程序出现的所述异常。
实施本发明实施例,通过在目标程序中的用于处理输入数据的目标代码之前设置有断点,当所述目标程序在所述断点处中断运行时,记录所述目标程序运行在所述断点时的快照,并在所述目标程序处理所述畸形数据发生异常时,根据所述快照恢复运行所述目标程序,可实现在利用批量畸形数据对所述目标程序进行模糊测试的过程中,所述目标程序根据所述快照直接从所述断点处恢复运行,避免反复运行所述目标代码之前的代码,提高了测试效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的对软件程序进行测试的方法的流程图;
图2是本发明实施例提供的一种单断设置方法的示意图;
图3是本发明实施例提供的另一种单断设置方法的示意图;
图4是本发明实施例提供的一种软件架构的示意图;
图5是本发明实施例提供的对软件程序进行测试的装置的第一实施例的结构示意图;
图6是本发明实施例提供的对软件程序进行测试的装置的第二实施例的结构示意图;
图7是本发明实施例提供的终端的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中的目标程序即本发明实施例提供的测试方法针对的测试对象,所述目标程序可主要是用于处理输入数据的程序,例如,办公文档处理程序、即时通讯中的通信数据处理程序等等。
本发明实施例提供的对软件程序进行测试的方法可实现高效率地利用畸形数据发现所述目标程序的安全性漏洞。下面结合附图进行详细说明。
参见图1,是本发明实施例提供的对软件程序进行测试的方法的流程图。如图1所示,该方法包括:
步骤S101:获取目标程序对应的畸形数据。
具体的,所述畸形数据是所述目标程序的非预期的输入,用于测试所述目标程序对非预期输入的处理能力,发现所述目标程序的安全漏洞。
本发明实施例涉及的畸形数据可以是批量的畸形数据,用以利用多条畸形数据来多次反复地测试所述目标程序。本发明实施例涉及的畸形数据也可以是单个畸形数据,用于多次重现所述目标程序在处理所述单个畸形数据时产生的异常。
具体实现中,所述畸形数据可以是随机产生的数据。例如,所述目标程序是TXT文件读取程序。那么,所述畸形数据可以是随机生成的大小为1K字节的TXT文件。
优选的,可以根据所述目标程序处理的数据类型、数据格式和数据范围等等来有针对性的生成所述畸形数据,可提高发现漏洞的几率,进一步提高测试效率。例如,所述目标程序处理的数据范围是0-128。那么,本实施例可有针对性的输入超范围的畸形数据来测试所述目标程序。示例仅仅是本发明实施例的一种实现方式,实际使用中还可以不同,不应构成限定。
步骤S103:将所述畸形数据作为所述输入数据,运行所述目标程序。
步骤S105:当所述目标程序处理所述畸形数据发生异常时,获取所述目标程序的异常信息,并根据所述快照恢复运行所述目标程序。
本发明实施例中,所述目标程序中的用于处理输入数据的目标代码之前设置有断点,用以在所述目标程序中断运行后获取和记录所述目标程序运行在所述断点时的快照。
具体的,所述断点可以由所述终端在执行所述目标程序之前设置的,所述断点也可以是由用户在所述终端在执行所述目标程序之前手动设置的,这里不作限制。
本发明实施例中,所述目标代码可以是所述目标程序中实际需要测试的用于处理输入数据的代码段。如果所述目标程序包括多个用于处理输入数据的代码段,所述目标代码既可以指所述多个代码段中的全部代码段,也可以指所述多个代码段中的部分代码段。
可以理解的,根据中断处理机制,在所述目标程序运行到所述断点时,中断被触发,所述目标程序会中断运行,程序指针会跳转到相应的中断处理程序。这里,所述断点对应的中断处理程序主要用于获取和记录所述目标程序运行在所述断点时的快照。
中断结束后,即中断处理程序完成获取和记录所述快照后,程序指针会回到所述断点处,接着执行所述目标程序。
根据快照技术可知,快照包含了应用程序在一段时间内的执行信息,可支持应用程序恢复到快照所记录的运行状态。通常有两种类型的快照:CPU快照和内存快照。其中:CPU快照主要包含了应用程序中函数的调用关系及运行时间,内存快照主要包含了内存的分配和使用情况、载入的所有类、存在的对象信息及对象间的引用关系。
在一种实现方式中,中断发生后,所述中断处理程序可以被触发执行,用于收集所述目标程序运行在所述断点处的各种执行数据(即所述断点处的快照)。
在另一种实现中,本实施例可以开启独立的线程(或进程)监测所述目标程序的运行,或调用第三方工具,如虚拟机转换器(Virtual Machine Converter,VMC),监测所述目标程序的运行。在所述目标程序启动后,该独立的线程(或进程),或第三方工具开始收集和保存所述目标程序的各种执行数据(包括快照)。中断发生后,所述中断处理程序可要求获得所述断点处的快照。
本发明实施例涉及的所述异常可以是所述目标程序崩溃,也可以是CPU占用率超过预设占用率所导致的程序运行缓慢,还可以是其他自定义的异常,例如I/O读写异常等。
本发明实施例涉及的所述断点可以是INT 3断点,实际应用中所述断点的类型还可不同,这里不作限制。
优选的,如图2所示,所述断点可以设置在所述目标程序中的初始化代码之后,所述目标程序中的用于读取所述输入数据的目标代码之前。这样可实现根据所述断点处的快照直接从所述断点处恢复运行所述目标程序,避免反复运行所述目标代码之前的初始化代码,绕过耗时较长的初始化过程,提高测试效率。
图2示出的所述目标程序主要包括三部分:初始化代码、目标代码和结束代码。其中,初始化代码可用于初始化配置,目标代码可主要用于处理输入数据,结束代码可主要用于资源释放和数据保存。目标代码之前设置有断点。
在执行完初始化代码(即S1)之后,所述目标程序运行到所述断点,中断被触发,所述目标程序会中断运行,程序指针会跳转到用于获取快照的中断处理程序(即S2);中断结束后,目标代码才会被执行(即S3)。
如果目标代码在处理畸形数据的过程中抛出异常,则可根据中断处理程序获取的所述快照恢复运行所述目标程序。
可以理解的,在根据所述快照恢复运行所述目标程序后,程序指针会指向所述断点所处的代码,所述目标程序会从所述目标代码处开始恢复运行。也即是说,异常出现之后的测试过程可直接从所述目标代码开始,不再去执行初始化代码,绕过了初始化过程,提高了测试效率。
在本发明的一种实施场景中,如图3所示,所述目标程序中存在多个目标代码,即需要测试所述目标程序中的多个用于处理输入数据的代码段。那么,可在所述多个目标代码之前分别设置相应断点,用以分别获取和记录目标程序运行在所述相应断点时的快照。
举例来说,如图3所示,“目标代码1”处理畸形数据没有发生异常,“目标代码2”处理畸形数据时抛出异常。那么,可根据中断处理程序获取的“断点2”处的“快照2”恢复运行所述目标程序。
可以理解的,在根据“快照2”恢复运行所述目标程序后,程序指针会指向“断点2”所处的代码,所述目标程序会从“目标代码2”处开始恢复运行。也即是说,异常出现之后的测试过程可直接从“目标代码2”开始,不再去执行初始化代码,也不执行在前的没有发生异常的“目标代码1”,提高了测试效率。
进一步的,本发明实施例中,在运行所述目标程序之后,还可以记录所述目标程序处理所述畸形数据没有发生异常的时间,如果所述时间超过预设时间,则结束运行所述目标程序,并根据所述快照恢复运行所述目标程序。
也即是说,如果所述目标程序处理一份畸形数据耗费的时间较长,且没有产生异常,则放弃继续运行所述目标程序。具体实现中,可换取另一份畸形数据来测试所述目标程序(根据所述快照恢复运行所述目标程序),或,利用该畸形数据重新测试所述目标程序(根据所述快照恢复运行所述目标程序),可进一步省去执行目标代码之后的代码,提高测试效率。
本发明实施例中,在运行所述目标程序之前,可创建异常捕捉程序,所述异常捕捉程序可用于捕捉所述目标程序出现的所述异常,即所述异常捕捉程序注册了所述异常。具体实现中,所述异常捕捉程序可以是所述目标程序的父进程,可调用所述目标程序,从而具有较高的权限,可以处理子进程抛出的异常。
为了便于实施本发明实施例,图4提供了实施本发明的一种软件架构示意图。其中:目标程序已按照步骤S101设置了断点。
在图4所示的软件架构中,具体的测试流程可包括:
首先,测试程序(Fuzz)可生成一批用于测试的畸形数据。具体的生成方式可参见步骤S103中的内容,不再赘述。
之后,测试程序可创建异常捕捉程序,用以捕捉目标程序出现的异常。所述异常捕捉程序可以是目标程序的父进程,从而具有较高的权限,可以处理子进程的抛出的异常。需要说明的,所述异常捕捉程序可以是多进程(或线程)的程序,用以分别捕捉不同的异常;所述异常捕捉程序也可以是单进程(或线程)的程序。
在目标程序被异常捕捉程序调用之后,监测程序可开始监测目标程序的运行环境,收集和记录所述目标程序的快照。监测程序可以是独立的线程(或进程),或调用第三方工具,如虚拟机转换器(Virtual Machine Converter,VMC)。
在目标程序运行到所述断点时,测试程序可根据监测程序收集的所述断点处的快照恢复运行目标程序。
需要说明的,除了图4所示的实施方式,实际应用中还可以采用其他软件架构方式,这里不作限制。
实施本发明实施例,通过在目标程序中的用于处理输入数据的目标代码之前设置有断点,当所述目标程序在所述断点处中断运行时,记录所述目标程序运行在所述断点时的快照,并在所述目标程序处理所述畸形数据发生异常时,根据所述快照恢复运行所述目标程序,可实现在利用批量畸形数据对所述目标程序进行模糊测试的过程中,所述目标程序根据所述快照直接从所述断点处恢复运行,避免反复运行所述目标代码之前的代码,提高了测试效率。
参见图5,是本发明提供的对软件程序进行测试的装置的第一实施例的结构示意图。本发明实施例中的目标程序即本发明实施例提供的测试方法针对的测试对象,所述目标程序可主要是用于处理输入数据的程序,例如,办公文档处理程序、即时通讯中的通信数据处理程序等等。如图6所示的装置50可包括:获取单元501、执行单元503以及恢复单元505其中:
获取单元501,用于获取目标程序对应的畸形数据;
执行单元503,将所述畸形数据作为所述输入数据,用于运行所述目标程序;
恢复单元505,用于当所述目标程序处理所述畸形数据发生异常时,获取所述目标程序的异常信息,并根据所述快照恢复运行所述目标程序。
本发明实施例中,所述目标程序中的用于处理输入数据的目标代码之前设置有断点,用以在所述目标程序中断运行后获取和记录所述目标程序运行在所述断点时的快照。
具体的,所述断点可以由所述终端在执行所述目标程序之前设置的,所述断点也可以是由用户在所述终端在执行所述目标程序之前手动设置的,这里不作限制。
本发明实施例中,所述目标代码可以是所述目标程序中实际需要测试的用于处理输入数据的代码段。如果所述目标程序包括多个用于处理输入数据的代码段,所述目标代码既可以指所述多个代码段中的全部代码段,也可以指所述多个代码段中的部分代码段。
可以理解的,根据中断处理机制,在所述目标程序运行到所述断点时,中断被触发,所述目标程序会中断运行,程序指针会跳转到相应的中断处理程序。这里,所述断点对应的中断处理程序主要用于获取和记录所述目标程序运行在所述断点时的快照。
本发明实施例涉及的所述异常可以是所述目标程序崩溃,也可以是CPU占用率超过预设占用率所导致的程序运行缓慢,还可以是其他自定义的异常,例如I/O读写异常等。
本发明实施例涉及的畸形数据可以是批量的畸形数据,用以利用多条畸形数据来多次反复地测试所述目标程序。本发明实施例涉及的畸形数据也可以是单个畸形数据,用于多次重现所述目标程序在处理所述单个畸形数据时产生的异常。
具体实现中,所述畸形数据可以是获取单元501随机产生的数据。例如,所述目标程序是TXT文件读取程序。那么,所述畸形数据可以是获取单元501随机生成的大小为1K字节的TXT文件。
优选的,获取单元501可以根据所述目标程序处理的数据类型、数据格式和数据范围等等来有针对性的生成所述畸形数据,可提高发现漏洞的几率,进一步提高测试效率。例如,所述目标程序处理的数据范围是0-128。那么,获取单元501可有针对性的输入超范围的畸形数据来测试所述目标程序。示例仅仅是本发明实施例的一种实现方式,实际使用中还可以不同,不应构成限定。
本发明实施例涉及的所述断点可以是INT 3断点,实际应用中所述断点的类型还可不同,这里不作限制。
优选的,所述断点可以设置在所述目标程序中的初始化代码之后,所述目标程序中的用于读取所述输入数据的目标代码之前。这样,恢复单元505可根据所述断点处的快照直接从所述断点处恢复运行所述目标程序,避免反复运行所述目标代码之前的初始化代码,绕过耗时较长的初始化过程,提高测试效率。
在本发明的一种实施场景中,所述目标程序中存在多个目标代码,在所述多个目标代码之前分别设置有相应断点,用以分别获取和记录目标程序运行在所述相应断点时的快照。
进一步的,如图6所示,装置50在包括:获取单元501、执行单元503以及恢复单元505外,还可以包括:记录单元509,其中:
记录单元509用于在执行单元503运行单元运行所述目标程序之后,记录所述目标程序处理所述畸形数据没有发生异常的时间,如果所述时间超过预设时间,恢复单元505可结束运行所述目标程序,并根据所述快照恢复运行所述目标程序。
也即是说,如果所述目标程序处理一份畸形数据耗费的时间较长,且没有产生异常,则放弃继续运行所述目标程序。具体实现中,可换取另一份畸形数据来测试所述目标程序(根据所述快照恢复运行所述目标程序),或,利用该畸形数据重新测试所述目标程序(根据所述快照恢复运行所述目标程序),可进一步省去执行目标代码之后的代码,提高测试效率。
更进一步的,如图6所示,装置50在包括:获取单元501、执行单元503以及恢复单元505外,还可以包括:开启单元511,其中:
开启单元511用于在执行单元503运行所述目标程序之前,创建异常捕捉程序,所述异常捕捉程序可用于捕捉所述目标程序出现的所述异常。
具体实现中,所述异常捕捉程序注册了所述异常,所述异常捕捉程序可以是所述目标程序的父进程,可调用所述目标程序,从而具有较高的权限,可以处理子进程抛出的异常。
可以理解的,装置50中的各个模块的功能的实现方式还可参考图1实施例中的方法,这里不再赘述。
为了便于实施本发明实施例,本发明提供了用于实施本发明的终端的结构示意图。其中,如图7所示,该终端100可以包括:输入装置1003、输出装置1004、存储器1005和与存储器1005耦合的处理器1001(终端100中的处理器1001的数量可以是一个或多个,图7中以一个处理器为例)。在本发明的一些实施例中,输入装置1003、输出装置1004、存储器1005和处理器1001可通过总线或者其它方式连接,其中,图7中以通过总线连接为例。
其中,输入装置1003,用于接收外部的输入数据。具体实现中,输入装置101可包括触摸式输入装置、声音输入装置、键盘、鼠标、光电输入装置、扫描仪等。输出装置1004,用于对外输出数据。具体实现中,输出装置1004可包括显示器、扬声器、打印机等。具体实现中,收发装置1005可包括无线收发模块、有线收发模块等收发器件。存储器1005用于存储程序代码,具体实现中,存储器1005可以采用只读存储器(Read Only Memory,ROM)。处理器1001,例如CPU,用于调用存储于存储器1005中的测试程序代码执行如下步骤:
获取目标程序对应的畸形数据;
将所述畸形数据作为目标程序的输入数据,运行所述目标程序;
当所述目标程序处理所述畸形数据发生异常时,获取所述目标程序的异常信息,并根据所述快照恢复运行所述目标程序。
本发明实施例中,所述目标程序中的用于处理输入数据的目标代码之前设置有断点,用以在所述目标程序中断运行后获取和记录所述目标程序运行在所述断点时的快照。
具体的,所述断点可以由所述终端在执行所述目标程序之前设置的,所述断点也可以是由用户在所述终端在执行所述目标程序之前手动设置的,这里不作限制。
本发明实施例中,所述目标代码可以是所述目标程序中实际需要测试的用于处理输入数据的代码段。如果所述目标程序包括多个用于处理输入数据的代码段,所述目标代码既可以指所述多个代码段中的全部代码段,也可以指所述多个代码段中的部分代码段。
可以理解的,根据中断处理机制,在所述目标程序运行到所述断点时,中断被触发,所述目标程序会中断运行,程序指针会跳转到相应的中断处理程序。这里,所述断点对应的中断处理程序主要用于获取和记录所述目标程序运行在所述断点时的快照。
本发明实施例涉及的所述异常可以是所述目标程序崩溃,也可以是CPU占用率超过预设占用率所导致的程序运行缓慢,还可以是其他自定义的异常,例如I/O读写异常等。
本发明实施例涉及的畸形数据可以是批量的畸形数据,用以利用多条畸形数据来多次反复地测试所述目标程序。本发明实施例涉及的畸形数据也可以是单个畸形数据,用于多次重现所述目标程序在处理所述单个畸形数据时产生的异常。
具体实现中,处理器1001可以随机产生所述畸形数据。例如,所述目标程序是TXT文件读取程序。那么,处理器1001可以随机生成的大小为1K字节的TXT文件作为所述畸形数据。
优选的,处理器1001可以根据所述目标程序处理的数据类型、数据格式和数据范围等等来有针对性的生成所述畸形数据,可提高发现漏洞的几率,进一步提高测试效率。例如,所述目标程序处理的数据范围是0-128。那么,处理器1001可有针对性的输入超范围的畸形数据来测试所述目标程序。示例仅仅是本发明实施例的一种实现方式,实际使用中还可以不同,不应构成限定。
本发明实施例涉及的所述断点可以是INT 3断点,实际应用中所述断点的类型还可不同,这里不作限制。
优选的,在所述目标程序中的初始化代码之后,所述目标程序中的用于读取所述输入数据的目标代码之前可以设置有断点。这样可根据所述断点处的快照直接从所述断点处恢复运行所述目标程序,避免反复运行所述目标代码之前的初始化代码,绕过耗时较长的初始化过程,提高测试效率。
在本发明的一种实施场景中,所述目标程序中存在多个目标代码,在所述多个目标代码之前分别设置有相应断点,用以分别获取和记录目标程序运行在所述相应断点时的快照。
进一步的,本发明实施例中,在运行所述目标程序之后,处理器1001还可以记录所述目标程序处理所述畸形数据没有发生异常的时间,如果所述时间超过预设时间,则结束运行所述目标程序,并根据所述快照恢复运行所述目标程序。
也即是说,如果所述目标程序处理一份畸形数据耗费的时间较长,且没有产生异常,则处理器1001放弃继续运行所述目标程序。具体实现中,处理器1001可换取另一份畸形数据来测试所述目标程序(根据所述快照恢复运行所述目标程序),或,利用该畸形数据重新测试所述目标程序(根据所述快照恢复运行所述目标程序),可进一步省去执行目标代码之后的代码,提高测试效率。
本发明实施例中,在运行所述目标程序之前,处理器1001可创建异常捕捉程序,所述异常捕捉程序可用于捕捉所述目标程序出现的所述异常,即所述异常捕捉程序注册了所述异常。具体实现中,所述异常捕捉程序可以是所述目标程序的父进程,可调用所述目标程序,从而具有较高的权限,可以处理子进程抛出的异常。
可理解的是,处理器1001执行的步骤还可以参考上述图1方法实施例中的具体实现方式,这里不再赘述。
综上所述,通过在目标程序中的用于处理输入数据的目标代码之前设置有断点,当所述目标程序在所述断点处中断运行时,记录所述目标程序运行在所述断点时的快照,并在所述目标程序处理所述畸形数据发生异常时,根据所述快照恢复运行所述目标程序,可实现在利用批量畸形数据对所述目标程序进行模糊测试的过程中,所述目标程序根据所述快照直接从所述断点处恢复运行,避免反复运行所述目标代码之前的代码,提高了测试效率。
本发明所有实施例中的模块或子模块,可以通过通用集成电路,例如CPU(CentralProcessing Unit,中央处理器),或通过ASIC(Application Specific IntegratedCircuit,专用集成电路)来实现。
本发明实施例的方法的步骤顺序可以根据实际需要进行调整、合并或删减。本发明实施例的终端的模块可以根据实际需要进行整合、进一步划分或删减。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (6)
1.一种对软件程序进行测试的方法,其特征在于,在目标程序中的用于处理输入数据的目标代码之前设置有断点,用以在所述目标程序中断运行后获取和记录所述目标程序运行在所述断点时的快照,所述方法,包括:
获取目标程序对应的畸形数据;
将所述畸形数据作为所述输入数据,运行所述目标程序;
当所述目标程序处理所述畸形数据发生异常时,获取所述目标程序的异常信息,并根据所述快照恢复运行所述目标程序;
其中,在所述目标程序中的初始化代码之后,在所述目标程序中的用于处理所述输入数据的目标代码之前设置有断点;
在所述目标程序中的多个用于处理输入数据的目标代码之前分别设置有相应断点,用以分别获取和记录目标程序运行在所述相应断点时的快照;
所述当所述目标程序处理所述畸形数据发生异常时,获取所述目标程序的异常信息,并根据所述快照恢复运行所述目标程序,包括:
当所述多个用于处理输入数据的目标代码中的第一目标代码处理畸形数据时发生异常,获取所述目标程序运行在所述第一目标代码相应的断点时的第一快照,并根据所述第一快照恢复运行所述目标程序,不再去执行未发生异常的第二目标代码。
2.如权利要求1所述的方法,其特征在于,在所述运行所述目标程序之后,还包括:
记录所述目标程序处理所述畸形数据没有发生异常的时间,如果所述时间超过预设时间,则结束运行所述目标程序,并根据所述快照恢复运行所述目标程序。
3.如权利要求1所述的方法,其特征在于,在所述运行所述目标程序之前,还包括:
创建异常捕捉程序,所述异常捕捉程序用于捕捉所述目标程序出现的所述异常。
4.一种对软件程序进行测试的装置,其特征在于,在目标程序中的用于处理输入数据的目标代码之前设置有断点,用以在所述目标程序中断运行后获取和记录所述目标程序运行在所述断点时的快照,所述装置包括:
获取单元,用于获取目标程序对应的畸形数据,将所述畸形数据作为所述输入数据;
执行单元,用于将所述畸形数据作为所述输入数据,运行所述目标程序;
恢复单元,用于当所述目标程序处理所述畸形数据发生异常时,获取所述目标程序的异常信息,并根据所述快照恢复运行所述目标程序;
其中,在所述目标程序中的初始化代码之后,在所述目标程序中的用于处理所述输入数据的目标代码之前设置有断点;
在所述目标程序中的多个用于处理输入数据的目标代码之前分别设置有相应断点,用以分别获取和记录目标程序运行在所述相应断点时的快照;
所述恢复单元具体用于:
当所述多个用于处理输入数据的目标代码中的第一目标代码处理畸形数据时发生异常,获取所述目标程序运行在所述第一目标代码相应的断点时的第一快照,并根据所述第一快照恢复运行所述目标程序,不再去执行未发生异常的第二目标代码。
5.如权利要求4所述的装置,其特征在于,还包括:记录单元,其中:
所述记录单元,用于在所述执行单元运行所述目标程序之后,记录所述目标程序处理所述畸形数据没有发生异常的时间;
所述恢复单元,还用于:如果所述时间超过预设时间,则结束运行所述目标程序,并根据所述快照恢复运行所述目标程序。
6.如权利要求4所述的装置,其特征在于,还包括:开启单元,用于在所述执行单元运行所述目标程序之前,开启异常捕捉程序,所述异常捕捉程序用于捕捉所述目标程序出现的所述异常。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510578849.1A CN105138459B (zh) | 2015-09-11 | 2015-09-11 | 一种对软件程序进行测试的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510578849.1A CN105138459B (zh) | 2015-09-11 | 2015-09-11 | 一种对软件程序进行测试的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105138459A CN105138459A (zh) | 2015-12-09 |
CN105138459B true CN105138459B (zh) | 2019-02-15 |
Family
ID=54723813
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510578849.1A Active CN105138459B (zh) | 2015-09-11 | 2015-09-11 | 一种对软件程序进行测试的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105138459B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107315677B (zh) * | 2016-04-26 | 2020-10-23 | 阿里巴巴集团控股有限公司 | 判断应用程序发生异常的方法及装置 |
CN107346391A (zh) * | 2016-05-06 | 2017-11-14 | 阿里巴巴集团控股有限公司 | 一种生成概念验证数据的方法及系统 |
CN108255705A (zh) * | 2017-11-24 | 2018-07-06 | 平安科技(深圳)有限公司 | 发票领用异常的构造方法、装置、计算机设备及存储介质 |
CN110232005B (zh) * | 2018-03-06 | 2023-08-18 | 阿里巴巴(中国)有限公司 | 一种应用软件的监控方法和装置 |
CN109086606B (zh) * | 2018-07-16 | 2020-08-07 | 腾讯科技(北京)有限公司 | 一种程序漏洞挖掘方法、装置、终端及存储介质 |
JP6819660B2 (ja) * | 2018-09-26 | 2021-01-27 | 横河電機株式会社 | プロセス制御システム、プロセス制御装置、及びプログラム更新方法 |
CN110113484A (zh) * | 2019-04-22 | 2019-08-09 | 惠州Tcl移动通信有限公司 | 一种屏幕电源的控制方法、装置、存储介质及电子设备 |
CN110795739A (zh) * | 2019-09-25 | 2020-02-14 | 苏州浪潮智能科技有限公司 | 一种基于动态调试的缓冲区漏洞检查系统和方法 |
CN110851294B (zh) * | 2019-10-10 | 2023-06-30 | 上海上湖信息技术有限公司 | 一种程序运行崩溃补救的方法及装置 |
CN112199282B (zh) * | 2020-10-09 | 2023-01-31 | 杭州安恒信息技术股份有限公司 | 一种office软件的模糊测试方法、装置及设备 |
CN112181853A (zh) * | 2020-10-28 | 2021-01-05 | 上海豹云网络信息服务有限公司 | 程序调试方法、装置及系统 |
CN113742237A (zh) * | 2021-09-13 | 2021-12-03 | 北京奕斯伟计算技术有限公司 | 程序调试方法、装置、设备以及存储介质 |
CN113836035B (zh) * | 2021-10-14 | 2024-03-01 | 东莞新能安科技有限公司 | 电池管理系统测试方法、装置及电子设备 |
CN114297666B (zh) * | 2021-12-31 | 2024-06-07 | 上海安般信息科技有限公司 | 一种基于模糊测试的云部署自动化漏洞挖掘系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101482846A (zh) * | 2008-12-25 | 2009-07-15 | 上海交通大学 | 基于可执行代码逆向分析的漏洞挖掘方法 |
CN102129408A (zh) * | 2011-04-14 | 2011-07-20 | 电子科技大学 | 一种基于记录回放技术的嵌入式软件调试装置和方法 |
CN103267918A (zh) * | 2013-06-09 | 2013-08-28 | 国家电网公司 | 一种就地化安装型继电保护装置的远程调试系统及方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101989225A (zh) * | 2009-07-29 | 2011-03-23 | 中兴通讯股份有限公司 | 基于断点的自动化测试方法及装置 |
TWI437390B (zh) * | 2011-01-07 | 2014-05-11 | Ind Tech Res Inst | 混合模擬系統及方法 |
-
2015
- 2015-09-11 CN CN201510578849.1A patent/CN105138459B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101482846A (zh) * | 2008-12-25 | 2009-07-15 | 上海交通大学 | 基于可执行代码逆向分析的漏洞挖掘方法 |
CN102129408A (zh) * | 2011-04-14 | 2011-07-20 | 电子科技大学 | 一种基于记录回放技术的嵌入式软件调试装置和方法 |
CN103267918A (zh) * | 2013-06-09 | 2013-08-28 | 国家电网公司 | 一种就地化安装型继电保护装置的远程调试系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105138459A (zh) | 2015-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105138459B (zh) | 一种对软件程序进行测试的方法及装置 | |
US10853491B2 (en) | Security agent | |
Wang et al. | Towards fine-grained network security forensics and diagnosis in the SDN era | |
US8799719B2 (en) | On demand tracing of application code execution | |
US8266577B2 (en) | RFID enhanced operating system (EOS) framework | |
JP2016533564A (ja) | システムコンポーネントの状態を相関させるイベントモデル | |
CN112256542B (zh) | 基于eBPF的微服务系统性能检测方法、装置和系统 | |
CN104205109A (zh) | 持续性和弹性的工作者进程 | |
WO2008080780A1 (en) | Recording execution information for a software application | |
KR20180137495A (ko) | 클라이언트 컴퓨팅 디바이스들 및 기업 네트워크들에서 멀웨어 및 공격들을 지능적으로 검출하기 위한 방법들 및 시스템들 | |
Jayathilaka et al. | Detecting performance anomalies in cloud platform applications | |
CN107741902A (zh) | 程序应用检测方法及程序应用检测装置 | |
US20230214229A1 (en) | Multi-tenant java agent instrumentation system | |
WO2023137053A1 (en) | Runtime filtering of computer system vulnerabilities | |
US10509694B2 (en) | System and methods for optimal error detection in programmatic environments | |
CN110213157A (zh) | 一种即时通信请求的监控方法、装置及系统 | |
US7752504B2 (en) | System diagnostics with dynamic contextual information of events | |
KR102578430B1 (ko) | 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법 | |
Dong et al. | Post-deployment anomaly detection and diagnosis in networked embedded systems by program profiling and symptom mining | |
JP2004264914A (ja) | システム性能測定分析装置 | |
US11188378B2 (en) | Management of control parameters in electronic systems | |
CN110874303B (zh) | 数据采集方法、装置以及设备 | |
US9652313B2 (en) | Collection of memory allocation statistics by provenance in an asynchronous message passing system | |
CN116149925A (zh) | 轨道交通分布式调度系统的日志管理方法、装置及设备 | |
CN109002323A (zh) | 一种数据处理方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20181130 Address after: Room 105-53811, No. 6 Baohua Road, Hengqin New District, Zhuhai City, Guangdong Province Applicant after: Zhuhai Leopard Technology Co.,Ltd. Address before: 100085 East District, Second Floor, 33 Xiaoying West Road, Haidian District, Beijing Applicant before: BEIJING KINGSOFT INTERNET SECURITY SOFTWARE Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |