为什么 libFuzzer 在 Windows 上产生错误:"no interesting inputs were found"?



大约半年前,我用VSCode建立了一个CMake项目,并在Windows和macOS上运行了libFuzzer目标。我使用c++扩展以及微软的CMakeTools扩展。

当我再次恢复项目时,现在我在fuzzer运行结束时得到一个错误:

ERROR: no interesting inputs were found. Is the code instrumented for coverage? Exiting.

全输出:

INFO: Seed: 2201882200
INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 4096 bytes
INFO: A corpus is not provided, starting from an empty corpus
#2      INITED exec/s: 0 rss: 61Mb
ERROR: no interesting inputs were found. Is the code instrumented for coverage? Exiting.

与在macOS上运行时的相同fuzzer相比:

INFO: Seed: 1824512455
INFO: Loaded 1 modules   (7 inline 8-bit counters): 7 [0x10c2baa88, 0x10c2baa8f), 
INFO: Loaded 1 PC tables (7 PCs): 7 [0x10c2baa90,0x10c2bab00), 
INFO:        6 files found in /Users/thomas/SourceTree/vscode-cmake-libfuzzer/fuzzers/corpus/fuzz_test/
INFO: seed corpus: files: 6 min: 1b max: 10b total: 37b rss: 30Mb
#7      INITED cov: 1 ft: 1 corp: 1/1b exec/s: 0 rss: 30Mb
#1048576        pulse  cov: 1 ft: 1 corp: 1/1b lim: 8192 exec/s: 524288 rss: 1099Mb
#2097152        pulse  cov: 1 ft: 1 corp: 1/1b lim: 8192 exec/s: 699050 rss: 1100Mb
#4194304        pulse  cov: 1 ft: 1 corp: 1/1b lim: 8192 exec/s: 599186 rss: 1101Mb
#5740032        DONE   cov: 1 ft: 1 corp: 1/1b lim: 8192 exec/s: 521821 rss: 1101Mb
Done 5740032 runs in 11 second(s)
stat::number_of_executed_units: 5740032
stat::average_exec_per_sec:     521821
stat::new_units_added:          0
stat::slowest_unit_time_sec:    0
stat::peak_rss_mb:              1101

我如何链接libFuzzer的片段:(我手动将库添加到Windows中,因为必须使其链接。)

# https://llvm.org/docs/LibFuzzer.html#fuzzer-usage
target_link_libraries(clang_fuzzer INTERFACE
-fsanitize=fuzzer,address
)
target_compile_options(clang_fuzzer INTERFACE
-fsanitize=fuzzer,address
)

测试模糊器:

#include <iostream>
#include <stddef.h>
#include <stdint.h>
bool FuzzMe(const uint8_t *Data, size_t DataSize) {
return DataSize >= 3 &&
Data[0] == 'F' &&
Data[1] == 'U' &&
Data[2] == 'Z' &&
Data[3] == 'Z';  // :‑<
}
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
{
// std::cout << "Hello Fuzzy...n";
FuzzMe(data, size);
return 0;
}

最小完整示例:https://github.com/thomthom/vscode-cmake-libfuzzer

在Windows上,我通过快照安装了clang: https://llvm.org/builds/

在macOS上,我通过brew install llvm安装它(因为AppleClang不包含libFuzzer)

我已经在两台Windows机器上测试了这个,现在它们都可以正常运行fuzzer,现在它们不能了。但我不知道是什么导致了退化。我知道我没有在两个系统上更新Clang。有一次我也试着通过Visual Studio安装Clang,我也试着从VSCode中选择这个安装,看看它是否有任何不同,但无济于事。

我能想到的唯一一件事是,在vcode - tools扩展更新了Windows的默认生成器后,我的VSCode CMake项目需要调整。我不记得它以前用什么了。我仍然觉得奇怪,如果这应该影响libFuzzer。

原来是由于我的CMake配置省略了Windows构建的这些行:

target_link_libraries(clang_fuzzer INTERFACE
-fsanitize=fuzzer,address
)

我认为一些缓存在这里起了作用,导致我在最初的工作中没有检测到这个

在上面的例子中提交修复:

https://github.com/thomthom/vscode-cmake-libfuzzer/commit/d7553fe01f88c71c19ff8f833b4235b8a3d17f99

希望它能对一些人有用,我把我的经验与这个错误。

在我的例子中,我得到这个错误仅仅是因为我改变了语料库文件夹的权限(见下面的命令)。我这样做的原因是因为libfuzzer没有向语料库文件夹添加新的输入。

chmod 644 /corpus(此命令导致错误)

为了避免这个错误,我尝试了另一种方法来添加新的输入到文件夹;将语料库文件夹的所有者更改为fuzzer进程的用户(在我的情况下,即守护进程)。

mkdir /corpus;chown daemon:daemon /corpus(此命令有帮助)

相关内容

  • 没有找到相关文章

最新更新