pub struct LocalMember<T> { /* private fields */ }
Expand description

This struct provides functions for modifying the memory of a program from within the address space of that program. This may be helpful for debug functions, or for an injected DLL.

Examples:

// We have a variable with some value
let x = 4u32;

// We make a `LocalMember` that has an offset referring to its location in memory
let member = LocalMember::new_offset(vec![&x as *const _ as usize]);
// The memory refered to is now the same
assert_eq!(&x as *const _ as usize, member.get_offset().unwrap());
// The value of the member is the same as the variable
assert_eq!(x, unsafe { member.read().unwrap() });
// We can write to and modify the value of the variable using the member
member.write(&6u32).unwrap();
assert_eq!(x, 6u32);

Safety

These functions are technically not safe. Do not attempt to read or write to any local memory that you do not know is correct. If you’re trying to explore your entire address space or are testing to see if a pointer is allocated to you, use DataMember with your own PID.

Unfortunately it’s not possible to implement some traits safely (e.g. Memory on DataMember but implement it on other structures unsafely in Rust.

The implemented functions try to stop you from shooting yourself in the foot by checking none of the pointers end up at the null pointer, but this does not guarantee that you won’t be able to mess something up really badly in your program.

Implementations§

§

impl<T> LocalMember<T>where T: Copy,

pub fn new() -> LocalMember<T>

Creates a new LocalMember with no offsets. Any calls to Memory::read will attempt to read from a null pointer reference.

To set offsets, use Memory::set_offsetoffset), or create the LocalMember using new_offset.

pub fn new_offset(offsets: Vec<usize, Global>) -> LocalMember<T>

Create a new LocalMember with a given set of offsets.

Trait Implementations§

§

impl<T> Clone for LocalMember<T>where T: Clone,

§

fn clone(&self) -> LocalMember<T>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl<T> Debug for LocalMember<T>where T: Debug,

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<T> Default for LocalMember<T>where T: Default,

§

fn default() -> LocalMember<T>

Returns the “default value” for a type. Read more
§

impl<T> Memory<T> for LocalMember<T>where T: Copy,

§

unsafe fn read(&self) -> Result<T, Error>

This will only return a error if one of the offsets gives a null pointer. or give a non-aligned read

§

fn write(&self, value: &T) -> Result<(), Error>

This will only return a error if one of the offsets gives a null pointer.

§

fn set_offset(&mut self, new_offsets: Vec<usize, Global>)

Set the offsets to the location in memory. This is used for things such as multi-level pointers, such as a Vec<Vec<T>> or a Vec<String>. Read more
§

fn get_offset(&self) -> Result<usize, Error>

Gets the actual total offset from the offsets given by Memory::set_offset. Read more

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for LocalMember<T>where T: RefUnwindSafe,

§

impl<T> !Send for LocalMember<T>

§

impl<T> !Sync for LocalMember<T>

§

impl<T> Unpin for LocalMember<T>

§

impl<T> UnwindSafe for LocalMember<T>where T: RefUnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> RoundFrom<T> for T

§

fn round_from(x: T) -> T

Performs the conversion.
§

impl<T, U> RoundInto<U> for Twhere U: RoundFrom<T>,

§

fn round_into(self) -> U

Performs the conversion.
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more