MCPcopy Index your code
hub / github.com/MagnetForensics/dumpit-linux / write_kcore_dumpit

Method write_kcore_dumpit

src/main.rs:700–737  ·  view source on GitHub ↗
(
        &self,
        dst: &mut dyn Write
    )

Source from the content-addressed store, hash-verified

698 }
699
700 fn write_kcore_dumpit(
701 &self,
702 dst: &mut dyn Write
703 ) -> Result<()> {
704 let out_data = self.out_header.as_ref().ok_or(
705 Error::IoError("Object not initialized. Did you call init()?".to_string()))?;
706 dst.write_all(&out_data[..])?;
707
708 // Writing each of the memory range that is not virtual.
709 let mut buf = vec![0u8; BLOCK_SIZE];
710 let mut rdr = BufReader::new(&self.kcore);
711
712 for range in &self.mem_ranges {
713 let mut off = 0;
714 if range.is_virtual {
715 continue;
716 }
717
718 info!("Writing 0x{:x}-0x{:x} physical block...",
719 range.start_phys_addr, range.end_phys_addr);
720
721 let bar = ProgressBar::new(range.memsz);
722 rdr.seek(SeekFrom::Start(range.kcore_file_off))?;
723
724 while off < range.memsz {
725 let bytes_left = (range.memsz - off) as usize;
726 let bytes_to_read = cmp::min(bytes_left, BLOCK_SIZE);
727
728 rdr.read_exact(&mut buf[0..bytes_to_read])?;
729 dst.write_all(&buf[0..bytes_to_read])?;
730
731 off += bytes_to_read as u64;
732 bar.inc(bytes_to_read as u64);
733 }
734 }
735
736 Ok(())
737 }
738
739 fn write_to_archive(
740 &self,

Callers 2

write_to_archiveMethod · 0.80
mainFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected