首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Windows上的libFuzzer会出现错误:“找不到有趣的输入”?

为什么Windows上的libFuzzer会出现错误:“找不到有趣的输入”?
EN

Stack Overflow用户
提问于 2021-03-07 22:04:33
回答 1查看 281关注 0票数 1

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

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

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

完整输出:

代码语言:javascript
复制
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相比:

代码语言:javascript
复制
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中,因为必须使其链接。)

代码语言:javascript
复制
  # 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
  )

测试模糊:

代码语言:javascript
复制
#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中选择该安装,看看是否有什么不同,但都没有用。

我唯一能想到的是,在VSCode-Tools扩展更新了VSCode的默认生成器之后,我的Windows项目需要进行调整。我不记得它以前用过什么了。如果这会影响libFuzzer,我仍然觉得很奇怪。

EN

回答 1

Stack Overflow用户

发布于 2021-03-10 00:03:55

事实证明,这是由于我的CMake配置在构建Windows时省略了以下几行:

代码语言:javascript
复制
  target_link_libraries(clang_fuzzer INTERFACE
    -fsanitize=fuzzer,address
  )

我认为一些缓存在这里起到了作用,导致我在进行最初的工作时没有检测到这一点。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66517363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档