Package ghidra.app.plugin.exceptionhandlers.gcc.structures.gccexcepttable

# Class LSDAHeader

java.lang.Object
ghidra.app.plugin.exceptionhandlers.gcc.GccAnalysisClass
ghidra.app.plugin.exceptionhandlers.gcc.structures.gccexcepttable.LSDAHeader

public class LSDAHeader extends GccAnalysisClass
Defines the bounds of exception unwinding support, within a function, and unwind procedures. * lpStartAddr is the program address where support begins. This value is encoded according to lpStartEncoding. * ttypeAddr is the location-relative program address, encoded per ttypeEncoding, of the associated C++ types table (types of thrown values).

- ## Field Summary

  ### Fields inherited from class ghidra.app.plugin.exceptionhandlers.gcc.GccAnalysisClass

  `dwordDT, monitor, NEWLINE, program, ptrDT, ptrSize`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `LSDAHeader(TaskMonitor monitor, Program program, RegionDescriptor region)`
  Constructor for the LSDA header which indicates encoding for the LSDA tables.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `create(Address addr)`
  Create a LSDA Header from the bytes at `addr`.
  `AddressRange`
  `getBody()`
  Gets the address range containing the LSDA header.
  `int`
  `getCallSiteTableEncoding()`
  Gets the dwarf encoding used for the call site table.
  `int`
  `getCallSiteTableHeaderSize()`
  Get the size of the header in the call site table.
  `int`
  `getCallSiteTableLength()`
  Gets the length of the call site table.
  `long`
  `getHeaderSize()`
  Gets the size of this LSDA header.
  `Address`
  `getLPStartAddress()`
  Gets the landing pad start address.
  `int`
  `getLPStartEncoding()`
  Gets the indicator of the encoding used for the landing pad start.
  `Address`
  `getNextAddress()`
  Gets the next address indicating the address after this LSDA header.
  `Address`
  `getTTypeBaseAddress()`
  Gets the base address of the type table.
  `int`
  `getTTypeEncoding()`
  Gets the encoding used for the type table.
  `int`
  `getTTypeOffset()`
  The offset from the type offset field to get to the base address of the type table.
  `boolean`
  `hasTypeTable()`
  Determines if this LSDA has a type table.

  ### Methods inherited from class ghidra.app.plugin.exceptionhandlers.gcc.GccAnalysisClass

  `createAndCommentData, createData, init`

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

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

- ## Constructor Details

  - ### LSDAHeader

    public LSDAHeader(TaskMonitor monitor, Program program, RegionDescriptor region)
    Constructor for the LSDA header which indicates encoding for the LSDA tables.
    Note: The `create(Address)` method must be called after constructing an LSDAHeader to associate it with an address before any of its "get..." methods are called.
    Parameters:
      `monitor` - task monitor to see if the user has cancelled analysis.
      `program` - the program containing this header.
      `region` - the region of the program associated with this header.

- ## Method Details

  - ### create

    public void create(Address addr) throws MemoryAccessException
    Create a LSDA Header from the bytes at `addr`.
    Note: This method must get called before any of the "get..." methods.
    Parameters:
      `addr` - the start (minimum address) of this LSDA header.
    Throws:
      `MemoryAccessException` - if memory for the header couldn't be read.

  - ### getNextAddress

    public Address getNextAddress()
    Gets the next address indicating the address after this LSDA header.
    Returns:
      the next address after this LSDA header or null if this LSDA header hasn't been created at any address yet.

  - ### getBody

    public AddressRange getBody()
    Gets the address range containing the LSDA header.
    Returns:
      the address range of the header

  - ### getHeaderSize

    public long getHeaderSize()
    Gets the size of this LSDA header.
    Returns:
      the header size

  - ### getLPStartEncoding

    public int getLPStartEncoding()
    Gets the indicator of the encoding used for the landing pad start.
    Returns:
      the LP start encoding

  - ### getLPStartAddress

    public Address getLPStartAddress()
    Gets the landing pad start address.
    Returns:
      the LP start address

  - ### hasTypeTable

    public boolean hasTypeTable()
    Determines if this LSDA has a type table.
    Returns:
      true if there is a type table

  - ### getTTypeEncoding

    public int getTTypeEncoding()
    Gets the encoding used for the type table.
    Returns:
      the value indicating the type table's encoding

  - ### getTTypeOffset

    public int getTTypeOffset()
    The offset from the type offset field to get to the base address of the type table.
    Returns:
      the type table offset

  - ### getTTypeBaseAddress

    public Address getTTypeBaseAddress()
    Gets the base address of the type table. The base address is the last byte (maximum address) of the type table. The type table is ordered in reverse.
    Returns:
      the type table's base address or `Address.NO_ADDRESS`

  - ### getCallSiteTableEncoding

    public int getCallSiteTableEncoding()
    Gets the dwarf encoding used for the call site table.
    Returns:
      the encoding value

  - ### getCallSiteTableLength

    public int getCallSiteTableLength()
    Gets the length of the call site table.
    Returns:
      the table length

  - ### getCallSiteTableHeaderSize

    public int getCallSiteTableHeaderSize()
    Get the size of the header in the call site table.
    Returns:
      the header size