提问人:jimkokko5 提问时间:11/17/2023 更新时间:11/17/2023 访问量:16
QEMU-AFL:跟随 fork() 进入子节点
QEMU-AFL: follow fork() into child
问:
我已经搜索 AFL++ 和 QEMU 文档一段时间了,但我似乎找不到这个问题的答案:你能指示 QEMU-AFL(AFL++ 的 QEMU 分支,运行时使用)跟随在当前模糊处理的过程中创建的分支吗?afl-fuzz -Q
一个非常简单的例子是二进制文件和二进制文件(见下面的代码)。二进制“fork + exec”是二进制文件,子二进制文件从中读取一个字符,如果它等于 .崩溃将传播到二进制文件。parent
child
parent
child
stdin
'c'
parent
当我用 运行它时,我得到:afl-fuzz -i in/ -o out/ -Q -- ./parent
last new find : none yet (odd, check syntax!)
这让我相信 AFL++ 实际上并没有跟踪子进程中的覆盖率。由于似乎可以使用检测二进制文件执行此操作,因此我认为限制不在 AFL++ 中,而是在 QEMU-AFL 中。有没有办法指示 QEMU-AFL(或 QEMU)遵循分叉?
代码 :parent.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
printf("Hello from the parent!\n");
pid_t new_pid = fork();
if (new_pid == 0) {
execve("./child", argv, NULL);
return 0;
}
// Wait for child to finish.
int child_retcode = 0;
while (wait(&child_retcode) > 0);
return child_retcode;
}
代码 :child.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
printf("Hello from the child!\n");
char c1 = getchar();
char c2 = getchar();
if (c1 == 'c') {
printf("Oh no, we're crashing!\n");
abort();
}
return 0;
}
答: 暂无答案
上一个:SQL - 减法行
下一个:如何将 U 盘连接到 VM
评论