对应部分代码主要在
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的三十倍左右。