问题描述
多个docker容器的afl-fuzz进程都与cpu core0绑定。而我们的实际需求是多个docker容器的afl-fuzz分别与一个cpu core绑定。
解决方案
1.在afl-fuzz.c文件中添加如下代码
void bind_to_cpu(void) {
// 获取环境变量 AFL_CPU_BINDING 的值
const char* cpu_binding = getenv("AFL_CPU_BINDING");
if (cpu_binding) {
// 将字符串形式的 CPU 核心列表转换为整数数组
// 假设环境变量的值为 "0,1,2,3"
int cpu_list[4] = {0};
int cpu_count = sscanf(cpu_binding, "%d,%d,%d,%d",
&cpu_list[0], &cpu_list[1], &cpu_list[2], &cpu_list[3]);
// 设置进程的 CPU 亲和性
cpu_set_t cpu_set;
CPU_ZERO(&cpu_set);
for (int i = 0; i < cpu_count; i++) {
CPU_SET(cpu_list[i], &cpu_set);
}
sched_setaffinity(0, sizeof(cpu_set), &cpu_set);
} else {
// 默认情况下,绑定到空闲的 CPU 核心
bind_to_free_cpu();
}
}
2.修改afl-fuzz.c文件的mian函数中的bind_to_free_cpu()
为bind_to_cpu
。
3.执行afl-fuzz …指令前,设置环境变量export AFL_CPU_BINDING="0,1"
,其中0,1表示第一个cpu core和第2个cpu core。如果想要添加4个以上(不包括4个),可以修改上述代码。上述代码由chatgpt生成。