微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么 Windows 上的 libFuzzer 会产生错误:“找不到有趣的输入”?

大约半年前,我使用 VSCode 设置了一个 CMake 项目,其中包含一个在 Windows 和 macOS 上运行的 libFuzzer 目标。我使用 C++ 扩展以及来自 Microsoft 的 CMaketools 扩展。

当我现在再次恢复项目时,在模糊器运行结束时出现错误

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 中选择该安装,看看它是否有任何区别,但无济于事。

我唯一能想到的是,在 VSCode-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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?