[][src]Struct pdb::FrameTable

pub struct FrameTable<'s> { /* fields omitted */ }

Describes stack frame layout of functions.

The table contains FrameData entries ordered by PdbInternalRva. Each entry describes a range of instructions starting at code_rva for code_size bytes.

A procedure/function might be described by multiple entries, with the first one declaring is_function_start. To retrieve frame information for a specific function, use [FrameTable::at_rva].

Not every function in the image file must have frame data defined for it. Those functions that do not have frame data are assumed to have normal stack frames.

Example

let mut pdb = PDB::open(source)?;

// Read the frame table once and reuse it
let frame_table = pdb.frame_table()?;
let mut frames = frame_table.iter();

// Iterate frame data in RVA order
while let Some(frame) = frames.next()? {
    println!("{:#?}", frame);
}

Methods

impl<'s> FrameTable<'s>[src]

pub fn iter(&self) -> FrameDataIter[src]

Returns an iterator over all frame data in this table, ordered by code_rva.

pub fn iter_at_rva(&self, rva: PdbInternalRva) -> FrameDataIter[src]

Returns an iterator over frame data starting at the given PdbInternalRva.

The first item returned by this iterator covers the given RVA. If the address is not a direct start of a function or block, this is the closest element preceding the block. If no frame data covers the given RVA, the iterator starts at the first item after the RVA. Therefore, check for the desired RVA range when iterating frame data.

To obtain a PdbInternalRva, use the to_internal_rva methods on PdbInternalSectionOffset or Rva.

pub fn is_empty(&self) -> bool[src]

Indicates whether any frame data is available.

Auto Trait Implementations

impl<'s> !Send for FrameTable<'s>

impl<'s> !Sync for FrameTable<'s>

Blanket Implementations

impl<T> From for T[src]

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

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

type Error = Infallible

The type returned in the event of a conversion error.

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

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

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

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

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

The type returned in the event of a conversion error.