Class DebugFrameSection

java.lang.Object
ghidra.app.plugin.exceptionhandlers.gcc.sections.DebugFrameSection
All Implemented Interfaces:
CieSource

public class DebugFrameSection extends Object
Parses the exception handling structures within a '.debug_frame' memory section, which contains call frame debugging information.
  • Field Details

  • Constructor Details

    • DebugFrameSection

      public DebugFrameSection(TaskMonitor monitor, Program program)
      Constructor for a debug frame section.
      Parameters:
      monitor - a status monitor for indicating progress or allowing a task to be cancelled.
      program - the program containing this debug 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

      Analyzes and annotates the debug frame section.
      Returns:
      the region descriptors that compose the debug frame section.
      Throws:
      MemoryAccessException - if memory couldn't be read/written while processing the section.
      AddressOutOfBoundsException - if one or more expected addresses weren't in the program.
      ExceptionHandlerFrameException - if the FDE table can't be decoded.
      CancelledException
    • 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