我目前正在集成libFuzzer
一个解析硬盘驱动器上文件的项目。我在 AFL 方面有过一些经验,其中使用了像这样的命令行:
afl-fuzz -m500 -i input/ -o output/ -t100 -- program_to_fuzz @@
...@@
生成输入的路径在哪里。libFuzzer
然而,我看到模糊目标看起来像这样:
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
DoSomethingInterestingWithMyAPI(Data, Size);
return 0; // Non-zero return values are reserved for future use.
}
我知道输入不是以文件的形式提供的,而是作为内存中的缓冲区提供的。问题是我试图模糊测试的程序处理文件并通过fread()
调用获取其数据。在任何时候都不应该将整个输入加载到内存中(在一般情况下,它甚至可能不适合);所以我无能为力const uint8_t*
。
将缓冲区写回硬盘驱动器以取回文件似乎效率极低。有没有解决的办法?