MCPcopy Create free account
hub / github.com/Slowerzs/PPLSystem / read_virtual_memory

Method read_virtual_memory

src/kdmp/parser.rs:395–427  ·  view source on GitHub ↗
(
        &self,
        pml4: PhysicalAddress,
        virt_addr: VirtualAddress,
        len: usize,
    )

Source from the content-addressed store, hash-verified

393 }
394
395 fn read_virtual_memory(
396 &self,
397 pml4: PhysicalAddress,
398 virt_addr: VirtualAddress,
399 len: usize,
400 ) -> Result<Vec<u8>, PageError> {
401 let offset_to_page = PAGE_SIZE - (virt_addr.addr as usize % PAGE_SIZE);
402 let beginning_len = cmp::min(len, offset_to_page);
403
404 let mut beginning_data = self.read_virtual_memory_page(pml4, virt_addr)?.to_vec();
405 beginning_data = beginning_data[(virt_addr.addr as usize % PAGE_SIZE)
406 ..((virt_addr.addr as usize % PAGE_SIZE) + beginning_len)]
407 .to_vec();
408
409 let complete_pages = (len - beginning_len) / PAGE_SIZE;
410
411 for i in 0..complete_pages {
412 let mut page_addr = virt_addr + offset_to_page as u64;
413 page_addr = page_addr + (i * PAGE_SIZE) as u64;
414
415 beginning_data.extend_from_slice(self.read_virtual_memory_page(pml4, page_addr)?);
416 }
417
418 let ending_len = len - (beginning_len + (complete_pages * PAGE_SIZE));
419 let ending_addr = VirtualAddress::from(
420 virt_addr.addr + beginning_len as u64 + (complete_pages * PAGE_SIZE) as u64,
421 );
422 let ending_page = self.read_virtual_memory_page(pml4, ending_addr)?;
423 let ending_page = &ending_page[..ending_len];
424
425 beginning_data.extend_from_slice(ending_page);
426 Ok(beginning_data)
427 }
428
429 fn get_ipid_table(&self, process_directory_base: PhysicalAddress) -> Option<u64> {
430 let com_data_info = get_com_data_section_info()?;

Callers 2

mainFunction · 0.80
get_ipid_tableMethod · 0.80

Calls 1

Tested by

no test coverage detected