Struct ProtectedFixedSizeStack

Source
pub struct ProtectedFixedSizeStack(/* private fields */);
Expand description

A more secure, but slightly slower version of FixedSizeStack.

Allocates stack space using virtual memory, whose pages will only be mapped to physical memory if they are used.

The additional guard page is made protected and inaccessible. Now if a stack overflow occurs it should (hopefully) hit this guard page and cause a segmentation fault instead letting the memory being overwritten silently.

As a general rule it is recommended to use this struct to create stack memory.

Implementations§

Source§

impl ProtectedFixedSizeStack

Source

pub fn new(size: usize) -> Result<ProtectedFixedSizeStack, StackError>

Allocates a new stack of at least size bytes + one additional guard page.

size is rounded up to a multiple of the size of a memory page and does not include the size of the guard page itself.

Methods from Deref<Target = Stack>§

Source

pub fn top(&self) -> *mut c_void

Returns the top of the stack from which on it grows downwards towards bottom().

Source

pub fn bottom(&self) -> *mut c_void

Returns the bottom of the stack and thus it’s end.

Source

pub fn len(&self) -> usize

Returns the size of the stack between top() and bottom().

Trait Implementations§

Source§

impl Debug for ProtectedFixedSizeStack

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for ProtectedFixedSizeStack

Source§

fn default() -> ProtectedFixedSizeStack

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

impl Deref for ProtectedFixedSizeStack

Source§

type Target = Stack

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Stack

Dereferences the value.
Source§

impl Drop for ProtectedFixedSizeStack

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

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.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

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

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.