pub trait UnwindSection<R: Reader>: Clone + Debug + _UnwindSectionPrivate<R> {
    type Offset: UnwindOffset<R::Offset>;
    fn entries<'bases>(
        &self,
        bases: &'bases BaseAddresses
    ) -> CfiEntriesIter<'bases, Self, R> { ... }
fn cie_from_offset(
        &self,
        bases: &BaseAddresses,
        offset: Self::Offset
    ) -> Result<CommonInformationEntry<R>> { ... }
fn partial_fde_from_offset<'bases>(
        &self,
        bases: &'bases BaseAddresses,
        offset: Self::Offset
    ) -> Result<PartialFrameDescriptionEntry<'bases, Self, R>> { ... }
fn fde_from_offset<F>(
        &self,
        bases: &BaseAddresses,
        offset: Self::Offset,
        get_cie: F
    ) -> Result<FrameDescriptionEntry<R>>
    where
        F: FnMut(&Self, &BaseAddresses, Self::Offset) -> Result<CommonInformationEntry<R>>
, { ... }
fn fde_for_address<F>(
        &self,
        bases: &BaseAddresses,
        address: u64,
        get_cie: F
    ) -> Result<FrameDescriptionEntry<R>>
    where
        F: FnMut(&Self, &BaseAddresses, Self::Offset) -> Result<CommonInformationEntry<R>>
, { ... }
fn unwind_info_for_address<'ctx, F>(
        &self,
        bases: &BaseAddresses,
        ctx: &'ctx mut UninitializedUnwindContext<R>,
        address: u64,
        get_cie: F
    ) -> Result<&'ctx UnwindTableRow<R>>
    where
        F: FnMut(&Self, &BaseAddresses, Self::Offset) -> Result<CommonInformationEntry<R>>
, { ... } }
Expand description

A section holding unwind information: either .debug_frame or .eh_frame. See DebugFrame and EhFrame respectively.

Associated Types

The offset type associated with this CFI section. Either DebugFrameOffset or EhFrameOffset.

Provided methods

Iterate over the CommonInformationEntrys and FrameDescriptionEntrys in this .debug_frame section.

Can be used with FallibleIterator.

Parse the CommonInformationEntry at the given offset.

Parse the PartialFrameDescriptionEntry at the given offset.

Parse the FrameDescriptionEntry at the given offset.

Find the FrameDescriptionEntry for the given address.

If found, the FDE is returned. If not found, Err(gimli::Error::NoUnwindInfoForAddress) is returned. If parsing fails, the error is returned.

You must provide a function to get its associated CIE. See PartialFrameDescriptionEntry::parse for more information.

Note: this iterates over all FDEs. If available, it is possible to do a binary search with EhFrameHdr::fde_for_address instead.

Find the frame unwind information for the given address.

If found, the unwind information is returned. If not found, Err(gimli::Error::NoUnwindInfoForAddress) is returned. If parsing or CFI evaluation fails, the error is returned.

use gimli::{BaseAddresses, EhFrame, EndianSlice, NativeEndian, UninitializedUnwindContext,
            UnwindSection};

// Get the `.eh_frame` section from the object file. Alternatively,
// use `EhFrame` with the `.eh_frame` section of the object file.
let eh_frame = EhFrame::new(read_eh_frame_section(), NativeEndian);

// Get the address of the PC for a frame you'd like to unwind.
let address = get_frame_pc();

// This context is reusable, which cuts down on heap allocations.
let ctx = UninitializedUnwindContext::new();

// Optionally provide base addresses for any relative pointers. If a
// base address isn't provided and a pointer is found that is relative to
// it, we will return an `Err`.
let bases = BaseAddresses::default()
    .set_text(address_of_text_section_in_memory)
    .set_got(address_of_got_section_in_memory);

let unwind_info = eh_frame.unwind_info_for_address(
    &bases,
    &mut ctx,
    address,
    EhFrame::cie_from_offset,
)?;

do_stuff_with(unwind_info);

Implementors