pub struct XSTATE_CONFIG_FEATURE_MSC_INFO {
    pub size_of_info: u32,
    pub context_size: u32,
    pub enabled_features: u64,
    pub features: [XSTATE_FEATURE; 64],
}
Expand description

A descriptor of the XSAVE context, which extends a normal x86/x64 context.

The sections of this context are dumps of some of the CPUs registers (e.g. one section might contain the contents of the SSE registers).

Intel documents its XSAVE entries in Volume 1, Chapter 13 of the “Intel 64 and IA-32 Architectures Software Developer’s Manual”.

§The XSTATE Format in Minidumps

This format is slightly messed up in the context of minidumps because it’s grafted onto Microsoft’s own formats. Here’s what’s important to know:

  • The “Cpu Context” and the “XSAVE context” are in fact the same regions of memory.

  • Whether XSTATE is present or not, the classic layouts of CONTEXT_X86 and CONTEXT_AMD64 both apply – xstate will only add stuff after or refine your understanding of memory in the existing layout. So you can safely ignore the existence of XSTATE, but you might be missing new info.

  • AMD64 doesn’t have a standard way to save general purpose registers, so the first 256 bytes of CONTEXT_AMD64 are just however microsoft decided to save the registers, and will not be referred to by the XSTATE.

!!! THIS PART IS IMPORTANT !!!

Fields§

§size_of_info: u32

The size of this struct.

§context_size: u32

The size of the XSAVE context.

§enabled_features: u64

The bit enabled_features[i] indicates that features[i] contains valid data.

§features: [XSTATE_FEATURE; 64]

The offset and size of each XSAVE entry inside the XSAVE context.

Implementations§

source§

impl XSTATE_CONFIG_FEATURE_MSC_INFO

source

pub fn iter(&self) -> XstateFeatureIter<'_>

Gets an iterator of all the enabled features.

Trait Implementations§

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<T> ToOwned for T
where 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 T
where U: Into<T>,

§

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

§

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.