用途:本技能用于运行、优化和调试 OpenVMM 的模糊测试器(fuzzer),帮助发现并复现设备模拟代码中的崩溃。
前提条件:仅支持 Linux,libfuzzer-sys 不支持 Windows。需安装 cargo-fuzz(cargo install cargo-fuzz)与 lldb(sudo apt-get install -y lldb)。在 aarch64 上需设置 RUSTFLAGS="-Ctarget-feature=+lse,+neon",否则会因原子操作报错;x86_64 无需设置。
主要能力:列出所有 fuzz 目标(cargo xtask fuzz list);持续模糊测试(cargo xtask fuzz run fuzz_ide);复现指定崩溃样本(cargo xtask fuzz run fuzz_ide path/to/crash-artifact);仅构建(cargo xtask fuzz build fuzz_ide);最小化崩溃输入(cargo xtask fuzz tmin)与语料库(cargo xtask fuzz cmin);收集代码覆盖率并生成 HTML 报告(cargo xtask fuzz coverage fuzz_ide --with-html-report)。
调试方式:可直接运行二进制以加快迭代,配合 XTASK_FUZZ_REPRO=1 显示设备状态、RUST_BACKTRACE=full 显示回溯。使用 lldb 时建议批处理模式(lldb -b -s <file>),设置 auto-confirm true,在 panic_fmt 上设断点,并去掉 XTASK_FUZZ_REPRO 以避免日志淹没调试输出。可用 rust-lldb 获得 Rust 美化打印。Release 构建变量信息有限,可用 --dev 构建调试版本。
优化原则:提升熵效率(用固定值替代无意义参数、用 Arbitrary 枚举替代 u.ratio()、合并 arbitrary_data() 调用);简化重复函数;覆盖空配置与硬编码参数隐藏的路径;使用更小的后备存储、固定客户机内存、始终协商协议、用 -fork=N 并行。
覆盖率:原始报告含依赖,整体百分比无意义,应聚焦目标 crate 及其直接领域依赖。用 llvm-cov report/export 过滤源码路径,按主范围、次范围、范围外分类。目标为主范围行覆盖率 ≥85%。
限制:仅 Linux;save/restore 与 resolver 代码结构上不可达;InspectMut 等调试实现价值低;部分错误处理路径优先级低。