Package ghidra.app.plugin.exceptionhandlers.gcc.sections

# Class EhFrameSection

java.lang.Object
ghidra.app.plugin.exceptionhandlers.gcc.sections.EhFrameSection

All Implemented Interfaces:
  `CieSource`

public class EhFrameSection extends Object
Parses the call frame information exception handling structures within an '.eh_frame' memory section.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `EH_FRAME_BLOCK_NAME`
  `protected TaskMonitor`
  `monitor`
  `protected Program`
  `program`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `EhFrameSection(TaskMonitor monitor, Program program)`
  Constructor for an eh frame section.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `List<RegionDescriptor>`
  `analyze(int fdeTableCount)`
  Analyzes and annotates the eh frame section.
  `protected void`
  `createAugmentationData(List<RegionDescriptor> regions, Cie cie)`
  Creates data structures for the specified Common Information Entry (CIE) and its Frame Description Entries (FDEs) as indicated by the regions.
  `protected Cie`
  `createCie(Address curAddress, boolean isInDebugFrame)`
  Creates the data for a common information entry (CIE) at the address and puts a label and comment on it.
  `protected void`
  `createCieComment(Address curAddress)`
  Creates a comment indicating there is an CIE at the address.
  `protected void`
  `createCieLabel(Address curAddress)`
  Creates a label indicating there is an CIE at the address.
  `protected void`
  `createFdeComment(Address curAddress)`
  Creates a comment indicating there is an FDE at the address.
  `Cie`
  `getCie(Address currAddress)`
  For the provided address, return a Common Information Entry (CIE)
  `protected Cie`
  `getCieOrCreateIfMissing(Address curAddress, boolean isInDebugFrame)`
  This class maintains a lookup of common information entry (CIE) objects; this retrieves an existing object (by address), and creates a new CIE if not found.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### EH_FRAME_BLOCK_NAME

    public static final String EH_FRAME_BLOCK_NAME
    See Also:
      - Constant Field Values

  - ### monitor

    protected TaskMonitor monitor

  - ### program

    protected Program program

- ## Constructor Details

  - ### EhFrameSection

    public EhFrameSection(TaskMonitor monitor, Program program)
    Constructor for an eh frame section.
    Parameters:
      `monitor` - a status monitor for indicating progress or allowing a task to be cancelled.
      `program` - the program containing this eh frame section.

- ## Method Details

  - ### getCie

    public Cie getCie(Address currAddress) throws MemoryAccessException, ExceptionHandlerFrameException
    Description copied from interface: `CieSource`
    For the provided address, return a Common Information Entry (CIE)
    Parameters:
      `currAddress` - the address with the CIE
    Returns:
      the Cie at `currAddress`
    Throws:
      `MemoryAccessException` - if memory for the CIE couldn't be read
      `ExceptionHandlerFrameException` - if a problem was encountered

  - ### analyze

    public List<RegionDescriptor> analyze(int fdeTableCount) throws MemoryAccessException, AddressOutOfBoundsException, ExceptionHandlerFrameException
    Analyzes and annotates the eh frame section.
    Parameters:
      `fdeTableCount` - the number of exception handler FDEs.
    Returns:
      the region descriptors for the eh frame section.
    Throws:
      `MemoryAccessException` - if memory couldn't be read/written while processing the eh frame.
      `AddressOutOfBoundsException` - if one or more expected addresses weren't in the program.
      `ExceptionHandlerFrameException` - if a problem was encountered determining eh frame data.

  - ### createAugmentationData

    protected void createAugmentationData(List<RegionDescriptor> regions, Cie cie)
    Creates data structures for the specified Common Information Entry (CIE) and its Frame Description Entries (FDEs) as indicated by the regions.
    Parameters:
      `regions` - the region descriptors for the FDEs.
      `cie` - the CIE for the FDEs.

  - ### createCie

    protected Cie createCie(Address curAddress, boolean isInDebugFrame) throws MemoryAccessException, ExceptionHandlerFrameException
    Creates the data for a common information entry (CIE) at the address and puts a label and comment on it.
    Parameters:
      `curAddress` - the address with the CIE
      `isInDebugFrame` - true indicates the frame containing this CIE is a debug frame.
    Returns:
      the `Cie` that was created
    Throws:
      `MemoryAccessException` - if memory for the CIE couldn't be read
      `ExceptionHandlerFrameException` - if a problem was encountered

  - ### getCieOrCreateIfMissing

    protected Cie getCieOrCreateIfMissing(Address curAddress, boolean isInDebugFrame) throws MemoryAccessException, ExceptionHandlerFrameException
    This class maintains a lookup of common information entry (CIE) objects; this retrieves an existing object (by address), and creates a new CIE if not found.
    Parameters:
      `curAddress` - the address with the CIE
      `isInDebugFrame` - true indicates the frame containing this CIE is a debug frame.
    Returns:
      the `Cie` that was either previously created, or a newly minted object.
    Throws:
      `MemoryAccessException` - if memory for the CIE couldn't be read
      `ExceptionHandlerFrameException` - if a problem was encountered

  - ### createCieLabel

    protected void createCieLabel(Address curAddress)
    Creates a label indicating there is an CIE at the address.
    Parameters:
      `curAddress` - the address with the CIE

  - ### createCieComment

    protected void createCieComment(Address curAddress)
    Creates a comment indicating there is an CIE at the address.
    Parameters:
      `curAddress` - the address with the CIE

  - ### createFdeComment

    protected void createFdeComment(Address curAddress)
    Creates a comment indicating there is an FDE at the address.
    Parameters:
      `curAddress` - the address with the FDE