定向模糊测试aflgo中的能量调度

对应部分代码主要在
aflgo::afl-fuzz.c::4820

AFL 的一个核心思想是在模糊测试过程中动态地调整每个输入样本的 “power”,以便更有效地探索新的代码路径。功率在此上下文中用作一种权重,表示给定输入样本的变异应该尝试多少次。

传统的 AFL 通过比较直观的方式计算功率,但随着时间的推移,这种方法可能不是最优的。

“Adaptive Power Scheduling” (APS) 意味着使用更复杂、更智能的策略来决定如何为每个输入分配权重或功率。模拟退火是其中可能用于APS的一种策略。

  double power_factor = 1.0;
  if (q->distance > 0) {
    double normalized_d = q->distance;
    if (max_distance != min_distance)
      normalized_d = (q->distance - min_distance) / (max_distance - min_distance);
    if (normalized_d >= 0) {
        double p = (1.0 - normalized_d) * (1.0 - T) + 0.5 * T;
        power_factor = pow(2.0, 2.0 * (double) log2(MAX_FACTOR) * (p - 0.5));

    }// else WARNF ("Normalized distance negative: %f", normalized_d);
  }

距离目标位置"非常远"的种子s被分配的能量越来越少,直到只分配到原始能量pafl的大约三十二分之一

一个"非常接近"到达目标位置的种子s被分配越来越多的能量,直到分配到原来能量pafl的三十倍左右。

请添加图片描述