Struct pdb::FrameTable
source · [−]pub struct FrameTable<'s> { /* private fields */ }
Expand description
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::iter_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);
}
Implementations
sourceimpl<'s> FrameTable<'s>
impl<'s> FrameTable<'s>
sourcepub fn iter(&self) -> FrameDataIter<'_>
pub fn iter(&self) -> FrameDataIter<'_>
Returns an iterator over all frame data in this table, ordered by code_rva
.
sourcepub fn iter_at_rva(&self, rva: PdbInternalRva) -> FrameDataIter<'_>
pub fn iter_at_rva(&self, rva: PdbInternalRva) -> FrameDataIter<'_>
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 PdbInternalSectionOffset::to_internal_rva
or
Rva::to_internal_rva
.
Auto Trait Implementations
impl<'s> !RefUnwindSafe for FrameTable<'s>
impl<'s> !Send for FrameTable<'s>
impl<'s> !Sync for FrameTable<'s>
impl<'s> Unpin for FrameTable<'s>
impl<'s> !UnwindSafe for FrameTable<'s>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more