MCPcopy Create free account
hub / github.com/MultiFuzz/MultiFuzz / save_block_coverage

Function save_block_coverage

hail-fuzz/src/debugging/replay.rs:40–91  ·  view source on GitHub ↗
(mut config: Config, mode: SaveMode)

Source from the content-addressed store, hash-verified

38}
39
40pub fn save_block_coverage(mut config: Config, mode: SaveMode) -> anyhow::Result<()> {
41 let mut testcases: Vec<InputMetadata> = load_json(&config.workdir.join("testcases.json"))?;
42 testcases.sort_by_key(|x| x.found_at);
43
44 let features = config::EnabledFeatures::from_env()?;
45 let (mut target, mut vm) = setup_vm(&mut config, &features)?;
46 target.initialize_vm(&config.fuzzer, &mut vm)?;
47
48 let mut coverage =
49 crate::coverage::BlockCoverage::init(&mut vm, crate::coverage::BucketStrategy::Any, true);
50
51 let snapshot = vm.snapshot();
52
53 let mut all_blocks = vec![];
54 let mut block_map = HashMap::new();
55 let mut output = vec![];
56 for case in testcases {
57 vm.restore(&snapshot);
58 coverage.reset(&mut vm);
59
60 let input = MultiStream::from_path(&config.workdir.join(format!("queue/{}.bin", case.id)))?;
61 target.get_mmio_handler(&mut vm).unwrap().clone_from(&input);
62
63 target.run(&mut vm)?;
64
65 let blocks = coverage.get_blocks(&mut vm);
66 let hits = blocks
67 .into_iter()
68 .map(|addr| {
69 *block_map.entry(addr).or_insert_with(|| {
70 let id = all_blocks.len();
71 all_blocks.push((addr, case.found_at, case.id));
72 id
73 })
74 })
75 .collect::<Vec<_>>();
76
77 output.push(serde_json::json!({
78 "id": case.id,
79 "time_ms": case.found_at,
80 "hits": hits,
81 }));
82 }
83
84 let out = match mode {
85 SaveMode::Full => serde_json::json!({ "blocks": all_blocks, "inputs": output }),
86 SaveMode::BlocksOnly => serde_json::json!(all_blocks),
87 };
88 write!(std::io::stdout(), "{out}")?;
89
90 Ok(())
91}
92
93pub fn replay(mut config: Config, path: &str) -> anyhow::Result<()> {
94 let features = config::EnabledFeatures::from_env()?;

Callers 1

runFunction · 0.85

Calls 12

load_jsonFunction · 0.85
setup_vmFunction · 0.85
initialize_vmMethod · 0.80
clone_fromMethod · 0.80
get_mmio_handlerMethod · 0.80
get_blocksMethod · 0.80
initFunction · 0.70
snapshotMethod · 0.45
restoreMethod · 0.45
resetMethod · 0.45
runMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected