You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于LibFuzzer中cov字段代表块覆盖还是分支/边覆盖的技术咨询

LibFuzzer中cov:字段代表块覆盖还是分支/边覆盖?

我来帮你理清这个困惑——很多人都会在LibFuzzer的cov:字段定义上犯迷糊,毕竟不同资料说法不一,很容易搞混。

先看你贴出的LibFuzzer运行日志:

#1      INITED cov: 18 ft: 15 corp: 1/1b exec/s: 0 rss: 27Mb
#15     NEW    cov: 23 ft: 16 corp: 2/5b exec/s: 0 rss: 27Mb L: 4 MS: 4 InsertByte-...
#262144 pulse  cov: 23 ft: 16 corp: 2/5b exec/s: 131072 rss: 45Mb
#524288 pulse  cov: 23 ft: 16 corp: 2/5b exec/s: 131072 rss: 62Mb
#1048576        pulse  cov: 23 ft: 16 corp: 2/5b exec/s: 116508 rss: 97Mb
#2097152        pulse  cov: 23 ft: 16 corp: 2/5b exec/s: 110376 rss: 167Mb
#4194304        pulse  cov: 23 ft: 16 corp: 2/5b exec/s: 107546 rss: 306Mb
#8388608        pulse  cov: 23 ft: 16 corp: 2/5b exec/s: 106184 rss: 584Mb

关于cov:的定义,LibFuzzer官方文档的描述是最权威的,它明确说:

Total number of code blocks or edges covered by executing the current corpus.

这里的核心点你一定要注意:cov:到底统计的是块还是边,完全取决于你编译目标程序时用的Sanitizer插桩配置:

  • 如果你用的是最常见的默认组合-fsanitize=address,fuzzer(ASan+LibFuzzer),那么cov:统计的是基本块(basic block)覆盖的数量;
  • 但如果你在编译时额外添加了-fsanitize-coverage=edge参数(或者直接用-fsanitize=coverage,fuzzer这类配置),此时cov:就会切换为统计边(edge,也就是分支对应的跳转边)覆盖的数量。

这就是为什么你查资料会得到不同答案的原因——很多分享者没把编译配置这个前提说清楚,导致信息不对等。

顺便提一句日志里的ft:字段,它代表的是LibFuzzer追踪的“features”(覆盖特征),这是LibFuzzer用来引导模糊测试的核心数据,和cov:是两个不同的统计维度,不用和它混淆。

备注:内容来源于stack exchange,提问作者oxyuranus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:29:28