[−][src]Struct process_vm_io::ProcessVirtualMemoryIO
Input/Output object transferring data to/from the virtual memory contents of a particular process.
For better performance, consider doing buffered I/O based on the standard
BufReader
and BufWriter
.
Implementations
impl ProcessVirtualMemoryIO
[src]
pub unsafe fn new(process_id: u32, initial_address: u64) -> Result<Self, Error>
[src]
Create a new object to perform input/output of data from/to the virtual
memory contents of the process identified by process_id
.
The initial virtual memory address where data transfers initially
happen is specified by initial_address
. Inquiring the system for the
layout of the process address space can help specify this value.
On Linux, the file /proc/[process_id]/maps
can help with this.
Common errors
If the specified process does not exist, or this process does not have the right to send signals to the specified process, then an error is returned.
Safety
Writing to the virtual memory of a process is a potentially unsafe operation because it may introduce memory unsafety in that process, and may lead to unexpected states in that process. This is even more dangerous when the target process is the currently running process.
Running processes
Apart from the process identifier, there is no strong link between the
specified process and this ProcessVirtualMemoryIO
instance.
If the specified process runs and terminates, then further I/O
operations involving this instance may fail.
If the process identifier of the dead process is reused by another
process, then I/O may successfully continue with the new process,
which might not be the desired behavior.
pub fn process_id(&self) -> u32
[src]
Return the process identifier of the target process.
Trait Implementations
impl Debug for ProcessVirtualMemoryIO
[src]
impl Read for ProcessVirtualMemoryIO
[src]
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
[src]
fn read_vectored(&mut self, bufs: &mut [IoSliceMut]) -> Result<usize>
[src]
fn is_read_vectored(&self) -> bool
[src]
unsafe fn initializer(&self) -> Initializer
[src]
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
1.0.0[src]
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
1.0.0[src]
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
1.6.0[src]
fn by_ref(&mut self) -> &mut Self
1.0.0[src]
fn bytes(self) -> Bytes<Self>
1.0.0[src]
fn chain<R>(self, next: R) -> Chain<Self, R> where
R: Read,
1.0.0[src]
R: Read,
fn take(self, limit: u64) -> Take<Self>
1.0.0[src]
impl Seek for ProcessVirtualMemoryIO
[src]
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
[src]
Seek to an address in the virtual memory address space of the associated process.
If the seek operation completed successfully, this method returns the new position from the start of the stream.
The target address need not be readable/writable or even mapped. Seeking beyond the address space size puts the cursor after the end of the address space.
fn stream_len(&mut self) -> Result<u64, Error>
[src]
fn stream_position(&mut self) -> Result<u64, Error>
[src]
impl Write for ProcessVirtualMemoryIO
[src]
fn write(&mut self, buf: &[u8]) -> Result<usize>
[src]
fn write_vectored(&mut self, bufs: &[IoSlice]) -> Result<usize>
[src]
fn flush(&mut self) -> Result<()>
[src]
fn is_write_vectored(&self) -> bool
[src]
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
1.0.0[src]
fn write_all_vectored(&mut self, bufs: &mut [IoSlice]) -> Result<(), Error>
[src]
fn write_fmt(&mut self, fmt: Arguments) -> Result<(), Error>
1.0.0[src]
fn by_ref(&mut self) -> &mut Self
1.0.0[src]
Auto Trait Implementations
impl RefUnwindSafe for ProcessVirtualMemoryIO
impl Send for ProcessVirtualMemoryIO
impl Sync for ProcessVirtualMemoryIO
impl Unpin for ProcessVirtualMemoryIO
impl UnwindSafe for ProcessVirtualMemoryIO
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,