x86_64::registers::model_specific

Struct Star

Source
pub struct Star;
Expand description

Syscall Register: STAR

Implementations§

Source§

impl Star

Source

pub fn read_raw() -> (u16, u16)

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.
Source

pub fn read() -> (SegmentSelector, SegmentSelector, SegmentSelector, SegmentSelector)

Read the Ring 0 and Ring 3 segment bases. Returns

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

pub unsafe fn write_raw(sysret: u16, syscall: u16)

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.

Source

pub fn write( cs_sysret: SegmentSelector, ss_sysret: SegmentSelector, cs_syscall: SegmentSelector, ss_syscall: SegmentSelector, ) -> Result<(), InvalidStarSegmentSelectors>

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.

Source§

impl Star

Source

pub const MSR: Msr = _

The underlying model specific register.

Trait Implementations§

Source§

impl Debug for Star

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Star

§

impl RefUnwindSafe for Star

§

impl Send for Star

§

impl Sync for Star

§

impl Unpin for Star

§

impl UnwindSafe for Star

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<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.