Package ghidra.app.util.bin.format.pef

# Class LoaderInfoHeader

java.lang.Object
ghidra.app.util.bin.format.pef.LoaderInfoHeader

All Implemented Interfaces:
  `StructConverter`

public class LoaderInfoHeader extends Object implements StructConverter
See Apple's -- PEFBinaryFormat.h

     struct PEFLoaderInfoHeader {
         SInt32  mainSection;              // Section containing the main symbol, -1 => none.
         UInt32  mainOffset;               // Offset of main symbol.
         SInt32  initSection;              // Section containing the init routine's TVector, -1 => none.
         UInt32  initOffset;               // Offset of the init routine's TVector.
         SInt32  termSection;              // Section containing the term routine's TVector, -1 => none.
         UInt32  termOffset;               // Offset of the term routine's TVector.
         UInt32  importedLibraryCount;     // Number of imported libraries.  ('l')
         UInt32  totalImportedSymbolCount; // Total number of imported symbols.  ('i')
         UInt32  relocSectionCount;        // Number of sections with relocations.  ('r')
         UInt32  relocInstrOffset;         // Offset of the relocation instructions.
         UInt32  loaderStringsOffset;      // Offset of the loader string table.
         UInt32  exportHashOffset;         // Offset of the export hash table.
         UInt32  exportHashTablePower;     // Export hash table size as log 2.  (Log2('h'))
         UInt32  exportedSymbolCount;      // Number of exported symbols.  ('e')
     };

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final int`
  `SIZEOF`

  ### Fields inherited from interface ghidra.app.util.bin.StructConverter

  `ASCII, BYTE, DWORD, IBO32, IBO64, POINTER, QWORD, SLEB128, STRING, ULEB128, UTF16, UTF8, VOID, WORD`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `ImportedLibrary`
  `findLibrary(int symbolIndex)`
  Finds the PEF library that contains the specified imported symbol index.
  `List<ExportedSymbolHashSlot>`
  `getExportedHashSlots()`
  `int`
  `getExportedSymbolCount()`
  The exportedSymbolCount field (4 bytes) indicates the number of symbols exported from this container.
  `List<ExportedSymbolKey>`
  `getExportedSymbolKeys()`
  `List<ExportedSymbol>`
  `getExportedSymbols()`
  `int`
  `getExportHashOffset()`
  The exportHashOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the loader section to the start of the export hash table.
  `int`
  `getExportHashTablePower()`
  The exportHashTablePower field (4 bytes) indicates the number of hash index values (that is, the number of entries in the hash table).
  `List<ImportedLibrary>`
  `getImportedLibraries()`
  `int`
  `getImportedLibraryCount()`
  The importedLibraryCount field (4 bytes) indicates the number of imported libraries.
  `List<ImportedSymbol>`
  `getImportedSymbols()`
  `int`
  `getInitOffset()`
  The initOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the section to the initialization function's transition vector.
  `int`
  `getInitSection()`
  The initSection field (4 bytes) contains the number of the section containing the initialization function's transition vector.
  `int`
  `getLoaderStringsOffset()`
  The loaderStringsOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the loader section to the start of the loader string table.
  `int`
  `getMainOffset()`
  The mainOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the section to the main symbol.
  `int`
  `getMainSection()`
  The mainSection field (4 bytes) specifies the number of the section in this container that contains the main symbol.
  `List<LoaderRelocationHeader>`
  `getRelocations()`
  `int`
  `getRelocInstrOffset()`
  The relocInstrOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the loader section to the start of the relocations area.
  `int`
  `getRelocSectionCount()`
  The relocSectionCount field (4 bytes) indicates the number of sections containing load-time relocations.
  `SectionHeader`
  `getSection()`
  Returns the section corresponding to this loader.
  `int`
  `getTermOffset()`
  The termOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the section to the termination routine's transition vector.
  `int`
  `getTermSection()`
  The termSection field (4 bytes) contains the number of the section containing the termination routine's transition vector.
  `int`
  `getTotalImportedSymbolCount()`
  The totalImportedSymbolCount field (4 bytes) indicates the total number of imported symbols.
  `DataType`
  `toDataType()`
  Returns a structure datatype representing the contents of the implementor of this interface.

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

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

- ## Field Details

  - ### SIZEOF

    public static final int SIZEOF
    See Also:
      - Constant Field Values

- ## Method Details

  - ### getMainSection

    public int getMainSection()
    The mainSection field (4 bytes) specifies the number of the section in this container that contains the main symbol. If the fragment does not have a main symbol, this field is set to -1.
    Returns:
      number of section containing main symbol

  - ### getMainOffset

    public int getMainOffset()
    The mainOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the section to the main symbol.
    Returns:
      offset to the main symbol

  - ### getInitSection

    public int getInitSection()
    The initSection field (4 bytes) contains the number of the section containing the initialization function's transition vector. If no initialization function exists, this field is set to -1.
    Returns:
      number of the section containing the initialization function's transition vector

  - ### getInitOffset

    public int getInitOffset()
    The initOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the section to the initialization function's transition vector.
    Returns:
      offset to initialization function's transition vector

  - ### getTermSection

    public int getTermSection()
    The termSection field (4 bytes) contains the number of the section containing the termination routine's transition vector. If no termination routine exists, this field is set to -1.
    Returns:
      number of the section containing the termination routine's transition vector

  - ### getTermOffset

    public int getTermOffset()
    The termOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the section to the termination routine's transition vector.
    Returns:
      offset to termination routine's transition vector

  - ### getImportedLibraryCount

    public int getImportedLibraryCount()
    The importedLibraryCount field (4 bytes) indicates the number of imported libraries.
    Returns:
      number of imported libraries

  - ### getTotalImportedSymbolCount

    public int getTotalImportedSymbolCount()
    The totalImportedSymbolCount field (4 bytes) indicates the total number of imported symbols.
    Returns:
      number of imported symbols

  - ### getRelocSectionCount

    public int getRelocSectionCount()
    The relocSectionCount field (4 bytes) indicates the number of sections containing load-time relocations.
    Returns:
      number of sections containing load-time relocations

  - ### getRelocInstrOffset

    public int getRelocInstrOffset()
    The relocInstrOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the loader section to the start of the relocations area.
    Returns:
      offset to the relocations

  - ### getLoaderStringsOffset

    public int getLoaderStringsOffset()
    The loaderStringsOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the loader section to the start of the loader string table.
    Returns:
      offset to the loader string table

  - ### getExportHashOffset

    public int getExportHashOffset()
    The exportHashOffset field (4 bytes) indicates the offset (in bytes) from the beginning of the loader section to the start of the export hash table. The hash table should be 4-byte aligned with padding added if necessary.
    Returns:
      offset to the export hash table

  - ### getExportHashTablePower

    public int getExportHashTablePower()
    The exportHashTablePower field (4 bytes) indicates the number of hash index values (that is, the number of entries in the hash table). The number of entries is specified as a power of two. For example, a value of 0 indicates one entry, while a value of 2 indicates four entries. If no exports exist, the hash table still contains one entry, and the value of this field is 0.
    Returns:
      number of hash index values

  - ### getExportedSymbolCount

    public int getExportedSymbolCount()
    The exportedSymbolCount field (4 bytes) indicates the number of symbols exported from this container.
    Returns:
      number of symbols exported from this container

  - ### getSection

    public SectionHeader getSection()
    Returns the section corresponding to this loader.
    Returns:
      the section corresponding to this loader

  - ### findLibrary

    public ImportedLibrary findLibrary(int symbolIndex)
    Finds the PEF library that contains the specified imported symbol index.
    Parameters:
      `symbolIndex` - the imported symbol index
    Returns:
      PEF library that contains the specified imported symbol index

  - ### getImportedLibraries

    public List<ImportedLibrary> getImportedLibraries()

  - ### getImportedSymbols

    public List<ImportedSymbol> getImportedSymbols()

  - ### getRelocations

    public List<LoaderRelocationHeader> getRelocations()

  - ### getExportedHashSlots

    public List<ExportedSymbolHashSlot> getExportedHashSlots()

  - ### getExportedSymbolKeys

    public List<ExportedSymbolKey> getExportedSymbolKeys()

  - ### getExportedSymbols

    public List<ExportedSymbol> getExportedSymbols()

  - ### toDataType

    public DataType toDataType() throws DuplicateNameException, IOException
    Description copied from interface: `StructConverter`
    Returns a structure datatype representing the contents of the implementor of this interface.

    For example, given:

         class A {
             int foo;
             double bar;
         }

    The return value should be a structure data type with two data type components; an INT and a DOUBLE. The structure should contain field names and, if possible, field comments.

    Specified by:
      `toDataType` in interface `StructConverter`
    Returns:
      returns a structure datatype representing the implementor of this interface
    Throws:
      `DuplicateNameException` - when a datatype of the same name already exists
      `IOException`
    See Also:
      - `StructureDataType`