MOPT: Optimize Mutation Scheduling for Fuzzers

题目:MOPT: Optimize Mutation Scheduling for Fuzzers
作者:Chenyang Lv†, Shouling Ji†, Chao Zhang¶, Yuwei Li†, Wei-Han Lee§, Yu Song†, and Raheem Beyah‡
单位:Zhejiang University; Tsinghua University; IBM Research;Georgia Institute of Technology
出版:USENIX Security 2019

1. 简介

 基于变异的模糊测试是目前最流行的漏洞发现方法之一。其生成的测试用例的性能很大程度上取决于变异调度策略。现有的模糊测试算法通常遵循一个特定的分布来选择变异策略,效率很低.因此本文提出了一种新的突变调度方案MOPT.MOPT使用一种定制的粒子群优化算法( Particle Swarm Optimization) ,从模糊有效性的角度寻找算子的最优选择概率分布,并提供一种引领模糊测试模式,以加快PSO的收敛速度。我们将MOPT应用于最先进的模糊测试工具AFL、AFLFAST和Vuzzer,分别实现了MOPT-AFL、-AFLFAST和-Vuzzer,并在13个真实的开源程序上进行了评估。结果表明,MOPT-AFL发现的安全漏洞比AFL多170%,崩溃率比AFL高350%。MOPT AFLFAST和MOPT Vuzzer的表现也优于其对手。此外,广泛的评价也表明,MOPT具有良好的合理性、兼容性和稳定性,同时引入了可忽略不计的成本。

 基于突变的模糊是最流行的漏洞发现解决方案之一。通常,它采用种子测试用例,并按照一定的顺序选择它们,然后以各种方式对它们进行变异,并用新生成的测试用例测试目标程序。在过去的几年中,已经提出了许多新的解决方案,包括改进种子生成解决方案的解决方案[1、2、3、4]、改进种子选择策略的解决方案[5、6、7、8、9]、提高测试速度和代码覆盖率的解决方案[10、11、12、13]以及将其他技术与模糊测试技术相结合的解决方案[14、15、16]。

  然而,如何通过改变测试用例来生成新的有效的测试用例却很少受到关注。大量公认的模糊测试工具,如AFL[16]及其后代libFuzzer[17]、honggfuzz[18]和VUzzer[6],通常预先定义一组突变操作符,以描述突变的位置(如哪个字节)和如何突变(如添加、删除或替换字节)。在模糊测试过程中,他们使用特定的突变调度程序从这个预先定义的集合中选择操作符,以使模糊测试用例发生突变并生成新的模糊测试用例。突变调度程序不是直接生成一个突变操作符,而是生成一个预先定义的操作符的概率分布,而模糊测试工具将根据这个分布选择操作符。例如,AFL统一选择突变运算符。
  目前只有有限的解决方案专注于改进突变调度程序。以前的工作[8,9]利用强化学习动态地选择每一轮的突变算子。但是,它们在漏洞发现方面没有显示出显著的性能改进[8,9]。因此,需要一个更好的突变调度器。我们发现,大多数前人的工作都不能达到最佳性能,因为它们没有考虑到以下问题。

  一个操作员的效率随目标程序的不同而变化。每个操作员的效率都依赖于程序,并且不太可能或至少很难静态地推断出这种依赖性。因此,最优的突变调度器必须根据每个操作人员对目标程序的运行效率来决定每个程序。

  一个操作员的效率随时间变化。在当前测试案例中表现良好的变异算子在极端情况下可能在以下测试案例中表现不佳。如前所述,最优变异调度程序依赖于算子的历史效率来计算最优概率分布来选择算子。由于操作效率的动态特性,这种概率计算过程应该收敛得很快。

  调度程序会产生性能开销。突变调度对模糊测试的执行速度有影响。由于执行速度是影响模糊测试效率的关键因素之一,一个更好的变异调度程序应该减少计算量,以避免减慢模糊测试速度。

 机器学习数据不平衡。在模糊测试过程中,正样本和负样本的数量不平衡,例如,一个变异算子只能以很小的概率生成有趣的测试用例,这可能会影响梯度下降算法和其他机器学习算法的有效性[7,8]。

 本文将突变调度问题作为一个优化问题,提出了一种新的突变调度方案MOPT,旨在解决上述问题,提高模糊性能。MOPT以著名的优化算法粒子群优化(PSO)[19]为灵感,对候选变异算子的效率进行动态评估,并将其选择概率调整到最优分布。

 mopt将每个突变算子建模为沿概率空间[xmin;xmax]移动的粒子,其中xmin和xmax分别是预先定义的最小和最大概率。在局部最佳概率和全局最佳概率的指导下,每一个粒子(即算子)都朝着其最佳选择概率移动,从而产生更高质量的测试用例。因此,MOPT的目标是通过对粒子发现的概率进行聚合,找到最优的算子选择概率分布,从而使聚合产生更高质量的测试用例。与PSO类似,MOPT根据粒子的局部最佳概率和全局最佳概率迭代更新每个粒子的概率。然后,将所有粒子的更新概率进行整合,得到一个新的概率分布。MOPT可以快速收敛到选择变异算子的概率分布的最佳解,从而显著提高模糊性能。

 总之,我们做出了以下贡献:

  • 我们调查了现有的突变调度程序的缺点,由此得出结论,突变操作人员应根据其历史表现进行调度。
  • 提出了一种新的突变调度方案MOPT,能够选择更好的突变算子,实现更好的模糊测试效率。它可以广泛应用于现有的基于突变的模糊测试中。
  • 我们将MOPT应用于几种最先进的模糊测试,包括AFL、AFLFAST和Vuzzer,并在13个现实世界项目中进行了评估。结果表明,MOPT能发现更多的漏洞、崩溃和程序路径,具有良好的稳定性、兼容性和低成本。
  • MOPT-AFL发现了97个以前未知的安全漏洞,并帮助供应商提高其产品的安全性。它还发现这些程序(最新版本)中有15个以前已知的漏洞,这表明安全修补在实践中需要很长时间。我们也在https://github.com/puppet-meteor/mopt-afl上开放源代码MOPT-AFL以及使用的数据、种子集和结果,以促进这一领域的研究。

2. 背景知识

2.1 基于突变的模糊化方法

 基于突变的模糊化[5,6,13,14,15,16,17,18]在不利用目标程序的先验知识(如测试用例规范)的情况下,发现漏洞。相反,它通过以某种方式对一些格式良好的种子测试用例进行变异来生成新的测试用例。
 基于突变的模糊化的一般工作流程如下。fuzzer(1)维护一个种子测试用例队列,可以在运行时更新;(2)从队列中按一定顺序选择一些种子;(3)以各种方式变异种子;(4)使用新生成的测试用例测试目标程序,并报告漏洞或在必要时更新种子队列;然后(5)返回步骤(2)。

 为了有效地引导变异和模糊测试,一些模糊测试工具还将在测试过程中使用目标程序来收集运行时信息,并用它来指导种子更新,决定选择哪种种子以及如何进行变异。本文主要研究突变阶段(即步骤(3))。

2.2 变异操作(突变算子)

 基于突变的模糊测试能以无数种方式使种子突变。考虑到性能和可用性,在实践中,这些模糊测试工具,包括AFL[16]及其后代,libfuzzer[17]、honggfuzz[18]、vuzzer[7]通常预先定义了一组突变算子,并选择其中一些在运行时对种子进行突变。这些变异操作符描述了变异的位置(例如,哪个字节)以及如何变异(例如,添加、删除或替换字节)。

在这里插入图片描述

2.3 突变调度方案

 在运行时,基于突变的模糊测试不断地选择一些预先定义的突变算子来突变种子测试用例。不同的模糊测试有不同的方案来选择算子。例如,AFL在三个阶段使用了三种不同的调度方案,如图1所示。
在这里插入图片描述
 1.确定性阶段调度程序: AFL对第一次选择变异的种子测试用例应用确定性调度方案。该调度程序按顺序使用6种确定类型的突变操作符,并将它们逐个应用于种子测试用例。例如,它将应用位翻转8/8来翻转种子测试用例的每个字节。

 2. havoc阶段调度程序:在随机阶段采用了AFL的主要突变调度方案。如图2所示,AFL首先决定要在这个阶段生成的新测试用例的数量,用RT表示。每一次,AFL都会按照均匀分布的方式选择一系列的RO突变算子,并将它们应用到种子上,生成一个测试用例。在生成了RT新的测试用例之后,随机阶段就结束了。
在这里插入图片描述

 3.拼接阶段调度程序:在一些罕见的情况下,AFL通过上述两个阶段为所有种子工作,但在一轮中未能发现任何独特的崩溃或路径。然后AFL将进入一个特殊的拼接阶段。在这个阶段,AFL只使用一个操作符交叉来生成新的测试用例。这些新的测试用例将被发送到HAVOC阶段调度程序,而不是被测试的程序,以生成新的测试用例。

 第一阶段的突变调度程序具有确定性和慢速性,而最后阶段的突变调度程序很少使用。如图2所示,浩劫阶段的调度程序更为通用,已被许多模糊器广泛采用。因此,在本文中,我们主要关注于改进在浩劫阶段使用的调度器,从而可以在大多数基于突变的模糊器中实现。更具体地说,我们的目标是寻找一个最优的概率分布,然后调度程序可以选择更好的变异算子,提高模糊效率。

2.4 突变效率

 不同的突变算子的工作方式完全不同。一个直观的假设是,它们在不同的目标程序上有不同的效率。有些在生成测试用例(称为有趣的测试用例)方面比其他更好,这些测试用例可以触发新的路径或崩溃。为了验证我们的假设,我们在AFL上进行了一个实验来评估每个操作者的效率。为了使评价结果具有确定性,我们只测量了确定性阶段12个变异算子产生的有趣的测试用例。结果如图3所示

在这里插入图片描述
 在确定性阶段,突变算子的顺序和选择时间是固定的。图4显示了AFL在AVCONV模糊测试过程中选择操作人员的顺序和次数,表明了模糊测试所花的时间。
在这里插入图片描述
在这里插入图片描述
 1. 不同的变异算子对一个目标程序的效率是不同的。对于大多数程序,操作程序bitfilp 1/1、bitfilp 2/1和arith 8/8可以产生比其他操作程序更有趣的测试用例。另一方面,其他几个突变算子,如位翻转16/8、位翻转32/8和算术32/8,只能产生不到2%的测试用例。

 2.每个算子的效率因目标程序而异。算子可以在一个程序上产生良好的输出,但在另一个程序上失败。例如,ARITH 8/8在exiv2和tiff2bw上表现良好,但在avconv上只找到12%的有趣测试案例。

 3.AFL将大部分时间花在确定性阶段。我们记录每个阶段花费的时间以及每个阶段在24小时内发现的有趣测试用例的数量,如图5所示。我们首先分析一个特殊的案例。对于tiff2bw,由于AFL找不到更有趣的测试用例,因此它完成了模糊队列中所有输入的确定阶段,并长时间跳过了确定阶段。然后,AFL将大部分时间花在havoc阶段,却一无所获。对于其他三种情况,AFL将70%以上的时间花在确定性阶段。模糊AVCONV时,AFL甚至不能在24小时内完成第一次输入的确定阶段。另一个重要的观察是,与确定性阶段相比,havoc阶段在发现有趣的测试用例方面更有效。此外,由于AFL在一个输入的确定阶段花费了太多时间,因此在给定的24小时内对avconv和pdfimages进行模糊处理时,它无法从模糊队列中的后期输入生成测试用例。注意,由于拼接阶段只使用交叉转换来改变测试用例,因此与将测试第2.3节中提到的目标程序的其他阶段相比,它花费的时间太少,无法在图5中显示。
  4. AFL花大量时间在低效的突变操作上。图3表明,突变算子bitfilp1/1和bitfilp2/1发现了最有趣的测试用例。但根据图4,它们只被选择了少量的次数。另一方面,低效操作被频繁地选择,但很少产生感兴趣的测试用例,这降低了模糊测试效率。

  动机: 基于以上分析,我们发现不同的突变算子具有不同的效率。因此,现有模糊测试中的突变调度程序遵循一些预先定义的分布,是不有效的。理想情况下,应该将更多的时间花在能够更好地生成有趣测试用例的突变操作上。因此,需要一个更好的突变调度器。

3. MOPT的概述

3.1 设计理念

 突变调度器的目标是为给定的运行时上下文选择下一个最佳的突变操作符,它可以找到更有趣的测试用例。我们将这个问题简化为寻找一个最优的变异算子概率分布,然后调度程序在测试目标程序时选择下一个算子。

 寻找所有变异算子的最优概率分布是一个挑战。相反,我们可以先让每个操作符探索自己的最佳概率。然后,基于这些最优概率,得到突变算子的全局最优概率分布。

 粒子群优化(PSO)算法可以用来寻找算子的最优分布,并在我们的设置中详细描述了PSO的修改。

3.2 粒子群优化算法

 Eberhart和Kennedy提出了PSO[19]算法,旨在寻找问题的最优解。它使用多个粒子迭代搜索解空间,其中位置是一个候选解。
 如图所示,在每次的迭代中,每个粒子移动到新的位置 x n o w x_{now} xnow是根据公式(1)其惯性(即先前的运动速度 v n o w v_{now} vnow),(2)该粒子迄今位置发现的最好的位置 L b e s t L_{best} Lbest (3) 移到所有粒子迄今为止发现的全局最佳位置 G b e s t G_{best} Gbest,将每个粒子移动到新的位置 x n o w x_{now} xnow。具体来说,粒子p的运动计算公式如下:
v now  ( P ) ← w × v now  ( P ) + r × ( L best  ( P ) − x now  ( P ) ) + r × ( G best  − x now  ( P ) ) x now  ( P ) ← x now  ( P ) + v now  ( P ) \begin{array}{c} v_{\text {now }}(P) \leftarrow w \times v_{\text {now }}(P)+r \times\left(L_{\text {best }}(P)-x_{\text {now }}(P)\right) +r \times\left(G_{\text {best }}-x_{\text {now }}(P)\right) \\ x_{\text {now }}(P) \leftarrow x_{\text {now }}(P)+v_{\text {now }}(P) \end{array} vnow (P)w×vnow (P)+r×(Lbest (P)xnow (P))+r×(Gbest xnow (P))xnow (P)xnow (P)+vnow (P)
 其中 w w w是惯性权重, r ϵ ( 0 , 1 ) 是 随 机 位 移 的 权 重 r\epsilon (0,1)是随机位移的权重 rϵ(0,1)

 因此,每个粒子都朝着 L b e s t L_{best} Lbest G b e s t G_{best} Gbest移动,并且很可能继续朝着更好的位置移动。通过向 G b e s t G_{best} Gbest移动,多个粒子可以同步工作,避免陷入局部最优状态。因此,群将得到最优解。另外,粒子群算法易于实现,计算成本低,适合于优化变异调度。

3.3 设计细节

 MOPT的目标是找到一个最佳的概率分布。我们提出了一种定制的粒子群算法,它不是直接用粒子来探索候选分布,而是先探索每个算子的最优概率,然后构造最优概率分布。

3.3.1 粒子(Particles)

 MOPT使用每个操作符作为一个粒子,并尝试在预定义的概率空间[xmin,xmax]中为每个操作符探索一个最佳位置,其中0<xmin<xmax<=1。

 粒子(即操作符)在概率空间(即xnow)中的当前位置表示调度程序选择该操作符的概率。由于概率的性质,一次迭代中所有粒子的概率之和应规范化为1.
在这里插入图片描述

3.3.2 局部最优位置(Local Best Position L b e s t L_{best} Lbest)

  与粒子群算法相似, MOPT同样也指定了粒子所处的最佳位置作为其局部最佳位置

  对于一个给定的粒子,位置 X 1 X_{1} X1 X 2 X_{2} X2更好,如果且仅当,其相应的操作符在前一位置比后者生成更有趣的测试用例(具有相同数量的调用)。因此, L b e s t L_{best} Lbest是粒子的位置,在该位置对应的运算符生成更多有趣的测试用例(给定相同数量的调用)。

 为了进行这种比较,对于每个粒子(即操作符),我们测量它的局部效率e f fnow,即,由该操作符贡献的有趣测试用例的数量除以在一次迭代中该操作符的调用数量。我们将最大的e f fnow表示为e f fbest。因此,lbest是操作员在历史上获得e f fbest的位置。

3.3.3 全局最优位置 G b e s t G_{best} Gbest

 粒子群算法将所有粒子的最佳位置指定为全局最佳位置。请注意,与在统一解空间中移动粒子的原始粒子群算法不同,MOPT在不同的概率空间(形状和大小相同)移动粒子。因此,没有唯一适合所有粒子的全局最佳位置。相反,不同的粒子在这里有不同的全局最佳位置(在不同的空间中)。在粒子群算法中,全局最优位置取决于不同粒子之间的关系。因此,我们还通过一次评估多个粒子群,从全局的角度评估每个粒子的效率,称为 g l o b a l e f f global_{eff} globaleff

  更具体地说,我们测量了迄今为止每个操作者在所有群中贡献的有趣的测试用例的数量,并将其用作粒子的 g l o b a l e f f global_{eff} globaleff。然后计算所有粒子的全局效率分布。对于每个操作符(即粒子),其全局最佳位置 G b e s t G_{best} Gbest定义为其 g l o b a l e f f global_{eff} globaleff在该分布中的比例。通过这种分布,效率更高的粒子(即操作员)可以获得更高的被选择的概率。

3.3.4 多个粒子群(Multiple Swarms)

  考虑到粒子、局部最佳位置和全局最佳位置的定义,我们可以采用PSO算法来逼近最优解(即突变算子的特定概率分布)。

  然而,与已有的粒子群算法不同,MOPT定义的粒子群算法实际上只在解空间中探索一个候选解(即概率分布),因此可能陷入局部最优。因此,MOPT使用多个群,并将定制的PSO算法应用于每个群,如图7所示,以避免局部最优。
在这里插入图片描述

 这些群之间需要同步。MOPT简单地以最有效的群体为最佳,利用其分布来调度模糊测试过程中的突变。在这里,我们将群的效率(称为swrameff)定义为该群贡献的有趣测试用例数除以一次迭代中的新测试用例数。

 概述:总之,MOPT使用多个群,并将定制的PSO算法应用于每个群。在模糊测试过程中,在PSO的每次迭代中都会执行以下三个额外的任务

T1:定位每个群中所有粒子的局部最佳位置。在每个群中,每个粒子在一次迭代中的局部效率e f fnow在模糊测试过程中被评估。对于每一个粒子,历史上效率最高的e f fbest被标记为其局部最佳位置lbest。

T2:确定所有粒子在群中的最佳位置。每一个粒子的全局效率globaleff是通过群评估的。然后评估粒子的整体效率分布。在这个分布中,每个粒子的globaleff的比例被用作其全局最佳位置gbest。

T3:选择最好的群来引导模糊测试。在一次迭代中对每个群的效率swarmeff进行了评估。选择了swarmeff最大的群,并将其在当前迭代中的概率分布用于进一步的模糊化。

 然后,在每次迭代结束时,mopt以与pso类似的方式移动每个群中的粒子。更具体地说,对于群体 S i S_i Si中的粒子 P j P_j Pj,我们更新其位置如下。

在这里插入图片描述
其中w是惯性权重,r满足0<r<1是一个随机位移权重

此外,我们规范化这些位置以满足一些约束。首先,调整每个粒子的位置以适应概率空间[xmin;xmax]。然后,对于每个群,其所有粒子的位置(即概率)将被标准化,这样这些概率的总和等于1。

在更新了所有粒子群中所有粒子的位置后,模糊测试可以继续将这些粒子移动到新的位置,并进入一个新的粒子群算法迭代。

4. MOPT的实现

4.1 MOpt 主要的框架(MOPT Main Framework)

 如图8所示,MOPT由四个核心模块组成,即PSO初始化和更新模块,以及pliot模糊测试和core模糊测试模块。
在这里插入图片描述

 在循环的每次迭代中,粒子群算法粒子更新一次。为了用粒子群算法更新粒子的位置,需要在每次迭代中找出每个粒子的局部最佳位置和全局最佳位置。

  • pilot模糊测试模块采用多个群,即多概率分布,来选择变异算子并进行模糊测试。在模糊测试过程中,测量了每个粒子群的局部效率。因此,我们可以找到每个粒子在每个群中的局部最佳位置。
  • 此外,在pilot模糊测试中,还对每个群的效率进行了评估。然后,选择最有效的群,core模糊测试模块利用其所探索的概率分布来调度变异算子。
  • core模糊测试模块完成后,可以评估到目前为止每个操作贡献的有趣测试用例总数。因此,可以评估每个粒子的全局效率(即全局最佳位置)

 利用该迭代回路,模糊器可以利用粒子群算法寻找最优的概率分布来选择变异算子,并逐步提高模糊效率。

 注意,MOPT的工作流程独立于目标模糊测试,只要模糊测试的突变调度器使用概率分布来选择运算符。我们不需要改变目标模糊测试的行为,只需要评估模糊测试的效率,以移动粒子群优化算法粒子。对目标模糊测试的检测是最小的,性能开销也很小。

 因此,MOPT是一种通用实用的突变调度方案,可以应用于各种模糊测试

4.1.1 PSO Initialization Module (粒子群算法初始化模块)

此模块初始化PSO算法的参数。更具体地说,mopt(1)用随机值设置每个群中每个粒子的初始位置xnow,并将一个群中所有粒子的xnow和归一化为1;(2)将每个群中每个粒子的运动vnow位移设为0.1;(3)将每个群中每个粒子的初始局部效率e f fnow设置为0;(4)将每个粒子群中每个粒子的初始局部最佳位置lbest设置为0.5;(5)将每个粒子群中每个粒子的初始全局最佳位置gbest设置为0.5。注意,当模糊测试开始运行时,初始化模块只执行一次。
在这里插入图片描述

4.1.2 Pilot Fuzzing Module

 该模块利用多个群进行模糊测试,每个群探索不同的概率分布。此模块按顺序评估每个群,并在生成新测试用例的可配置数字(表示为PeriodPilot)后停止测试群。特定群的模糊测试处理过程如下。

 对于每一个群,其概率分布用于调度变异算子的选择和模糊测试目标程序。在模糊测试过程中,该模块将测量三个测量值:(1)特定粒子(即操作)提供的感兴趣测试用例的数量;(2)特定粒子的调用数量;(3)该群通过检测目标程序发现的感兴趣测试用例的数量。

 每个粒子的局部效率(在当前群中)是第一次测量除以第二次测量。因此,我们可以找到每个粒子的局部最佳位置。当前群的效率是第三个测量值除以测试用例计数PeriodPilot。因此,我们可以找到最有效的群.

4.1.3 模糊测试核心模块(Core Fuzzing Module )

该模块采用模糊测试模块选择的最佳群,利用其概率分布进行模糊测试。它将在生成新测试用例的可配置数字(表示为periodcore)后停止。

一旦它停止,我们就可以测量每个粒子所贡献的有趣的测试用例的数量,不管它属于哪个粒子群,从PSO初始化开始到现在。然后,我们可以计算出粒子之间的分布,并确定每个粒子的全局最佳位置。

注意,如果我们在引导模块中只使用一个群,那么核心模块可以与引导模块合并。

4.1.4 更新模块 (Updating Module)

 利用pilot和core模糊测试模块提供的信息,该模块按照方程3和4更新每个群中的粒子。

 在更新每个粒子之后,我们将进入下一个PSO更新迭代。因此,我们可以接近最优群(即操作的概率分布),利用它来指导core模糊测试模块,并有助于提高模糊测试效率。

4.2 Pacemaker Fuzzing Mode

虽然MOPT在突变模糊测试中的应用是通用的,但我们认识到MOPT在应用于AFL等特定模糊测试时,其性能可以进一步优化。
在这里插入图片描述
基于广泛的经验分析,我们认识到AFL及其后代在确定性阶段花费的时间要比在破坏和拼接阶段花费的时间多,后者可以发现更多独特的崩溃和路径。因此,MOPT为基于AFL的模糊测试提供了一种优化,即引领模糊测试模式,有选择地避免了耗时的确定阶段。

具体地说,当mopt完成一个种子测试用例的变异时,如果长时间没有发现任何新的唯一崩溃或路径,即用户设置的t,那么它将有选择地禁用以下测试用例的确定性阶段。引领模糊测试的方式具有以下优点。

  • 确定性阶段花费的时间太多,会降低整体效率。另一方面,MOPT只更新了havoc阶段的概率分布,独立于确定性阶段。因此,用引领模糊模式禁用确定性阶段可以加快MOPT的收敛速度。
  • 在这种模式下,模糊测试可以跳过确定性阶段,而不会在单独的测试用例上花费太多时间。相反,它将从模糊队列中挑选更多的种子进行变异,从而有更好的机会更快地发现漏洞。
  • 确定性阶段在模糊测试初期可能具有良好的性能,但过一段时间后会变得效率低下。此模式只有在效率降低后才有选择地禁用此阶段,从而避免在此阶段下浪费大量时间。

更具体地说,MOPT为AFL提供了两种类型的引领模糊测试模式,基于确定性阶段是否会被重新启用:(1)MOPT-AFL-tmp,当新的有趣的测试案例数量超过预定的阈值时,它将重新启用确定性阶段;(2)MOPT-AFL-ever,它将永远不会重新启用确定性阶段。在随后的模糊测试过程中处于初始阶段

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值