Skip to content

ReadMem improvements#75

Merged
nbaksalyar merged 8 commits into
headcrab-rs:masterfrom
nbaksalyar:read-mem-improvements
Aug 7, 2020
Merged

ReadMem improvements#75
nbaksalyar merged 8 commits into
headcrab-rs:masterfrom
nbaksalyar:read-mem-improvements

Conversation

@nbaksalyar

Copy link
Copy Markdown
Member

This PR cherry-picks some improvements from #41 (to leave it write-specific and more manageable to review).

It also introduces new methods, ReadMem::read_slice and ReadMem::read_ptr, which can be used for reading vectors and arrays from debuggee's memory.

We can't use proc_vm_write and proc_vm_read on protected memory pages,
so we should split memory operations into the ones that can be applied to protected pages (using ptrace)
and the ones which can use more efficient operations (proc_vm_*). This commit changes read-specific function
to a generic function that can be used for writes too.
These functions can be used for reading vectors and arrays from debuggee's memory.
This commit also refactors the readmem tests: `PAGE_SIZE` value is taken from
lazily-initialized static instead of a constant, and the pointer arithmetic code is
changed to use functions from `std::ptr` for more clarity.
Comment thread src/target/linux/memory.rs Outdated
Comment thread src/target/linux/memory.rs Outdated
Comment thread src/target/linux/readmem.rs
Comment thread src/target/linux/readmem.rs Outdated
Comment thread src/target/linux/readmem.rs Outdated
nbaksalyar and others added 3 commits August 7, 2020 17:05
Co-authored-by: bjorn3 <bjorn3@users.noreply.github.com>
Emphasise its usage for both read and write operations and document
the `maps` argument.
- Add a new method to read a u8 slice from debuggee's memory.
- `ReadOp::split_on_page_boundary` takes the output var as a mutable reference
  instead of allocating a new vector.
@nbaksalyar
nbaksalyar requested a review from bjorn3 August 7, 2020 16:20
Comment thread src/target/linux/memory.rs Outdated
Comment thread src/target/linux/memory.rs Outdated
Comment thread src/target/linux/readmem.rs Outdated
- Get rid of unnecessary cloning (iter.cloned() -> into_iter())
- Rename function parameter for clarity (maps -> protected_maps)
- Make ReadMem::read_process_vm and ReadMem::read_ptrace associated functions
@nbaksalyar
nbaksalyar merged commit 719fb78 into headcrab-rs:master Aug 7, 2020
@nbaksalyar
nbaksalyar deleted the read-mem-improvements branch August 7, 2020 17:01
@nbaksalyar

Copy link
Copy Markdown
Member Author

Thanks for the review!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants