Struct x86_64::registers::model_specific::Star[][src]

pub struct Star;
Expand description

Syscall Register: STAR

Implementations

impl Star[src]

pub fn read_raw() -> (u16, u16)[src]

Read the Ring 0 and Ring 3 segment bases. The remaining fields are ignored because they are not valid for long mode.

Returns

  • Field 1 (SYSRET): The CS selector is set to this field + 16. SS.Sel is set to this field + 8. Because SYSRET always returns to CPL 3, the RPL bits 1:0 should be initialized to 11b.
  • Field 2 (SYSCALL): This field is copied directly into CS.Sel. SS.Sel is set to this field + 8. Because SYSCALL always switches to CPL 0, the RPL bits 33:32 should be initialized to 00b.

pub fn read(
) -> (SegmentSelector, SegmentSelector, SegmentSelector, SegmentSelector)
[src]

Read the Ring 0 and Ring 3 segment bases. Returns

  • CS Selector SYSRET
  • SS Selector SYSRET
  • CS Selector SYSCALL
  • SS Selector SYSCALL

pub unsafe fn write_raw(sysret: u16, syscall: u16)[src]

Write the Ring 0 and Ring 3 segment bases. The remaining fields are ignored because they are not valid for long mode.

Parameters

  • sysret: The CS selector is set to this field + 16. SS.Sel is set to this field + 8. Because SYSRET always returns to CPL 3, the RPL bits 1:0 should be initialized to 11b.
  • syscall: This field is copied directly into CS.Sel. SS.Sel is set to this field + 8. Because SYSCALL always switches to CPL 0, the RPL bits 33:32 should be initialized to 00b.

Safety

Unsafe because this can cause system instability if passed in the wrong values for the fields.

pub fn write(
    cs_sysret: SegmentSelector,
    ss_sysret: SegmentSelector,
    cs_syscall: SegmentSelector,
    ss_syscall: SegmentSelector
) -> Result<(), &'static str>
[src]

Write the Ring 0 and Ring 3 segment bases. The remaining fields are ignored because they are not valid for long mode. This function will fail if the segment selectors are not in the correct offset of each other or if the segment selectors do not have correct privileges.

impl Star[src]

pub const MSR: Msr[src]

The underlying model specific register.

Trait Implementations

impl Debug for Star[src]

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

Formats the value using the given formatter. Read more

Auto Trait Implementations

impl Send for Star

impl Sync for Star

impl Unpin for Star

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

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

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

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

Performs the conversion.