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

Function write_ihex_bytes

icicle-cortexm/src/lib.rs:404–436  ·  view source on GitHub ↗
(
    vm: &mut icicle_vm::Vm,
    region: &config::Memory,
    data: &[u8],
)

Source from the content-addressed store, hash-verified

402}
403
404fn write_ihex_bytes(
405 vm: &mut icicle_vm::Vm,
406 region: &config::Memory,
407 data: &[u8],
408) -> anyhow::Result<()> {
409 let input =
410 std::str::from_utf8(&data).map_err(|e| anyhow::format_err!("invalid ihex file: {e}"))?;
411
412 let reader = ihex::Reader::new(input);
413 let mut base_addr = region.base_addr;
414 for entry in reader {
415 match entry.map_err(|e| anyhow::format_err!("invalid ihex file: {e}"))? {
416 ihex::Record::Data { offset, value } => {
417 let addr = base_addr + offset as u64;
418 vm.cpu.mem.write_bytes(addr, &value, perm::NONE).map_err(|e| {
419 anyhow::format_err!("failed to write to memory at {addr:#0x}: {e}")
420 })?;
421 let perm = region.permissions.0;
422 vm.cpu.mem.update_perm(addr, value.len() as u64, perm).map_err(|e| {
423 anyhow::format_err!("failed to update permissions at {addr:#0x}: {e}")
424 })?;
425 }
426 ihex::Record::StartLinearAddress(addr) => base_addr = addr as u64,
427 ihex::Record::ExtendedLinearAddress(upper_addr) => {
428 base_addr = (base_addr & 0xffff) | ((upper_addr as u64) << 16);
429 }
430 ihex::Record::EndOfFile => break,
431 other => anyhow::bail!("Unsupported ihex record: {other:x?}"),
432 }
433 }
434
435 Ok(())
436}
437
438impl<T> icicle_fuzzing::Runnable for CortexmTarget<T> {
439 fn set_input(&mut self, _vm: &mut icicle_vm::Vm, _input: &[u8]) -> anyhow::Result<()> {

Callers 1

fuzzware_initMethod · 0.85

Calls 1

lenMethod · 0.45

Tested by

no test coverage detected