Package ghidra.app.util.bin.format.elf

# Class ElfRelocationTable

java.lang.Object
ghidra.app.util.bin.format.elf.ElfRelocationTable

All Implemented Interfaces:
  `ElfFileSection`, `StructConverter`

public class ElfRelocationTable extends Object implements ElfFileSection
A container class to hold ELF relocations.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static enum`
  `ElfRelocationTable.TableFormat`

- ## Field Summary

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

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

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ElfRelocationTable(BinaryReader reader, ElfHeader header, ElfSectionHeader relocTableSection, long fileOffset, long addrOffset, long length, long entrySize, boolean addendTypeReloc, ElfSymbolTable symbolTable, ElfSectionHeader sectionToBeRelocated, ElfRelocationTable.TableFormat format)`
  Construct an Elf Relocation Table

- ## Method Summary

  Modifier and Type
  Method
  Description
  `long`
  `getAddressOffset()`
  Preferred memory address offset where data should be loaded.
  `ElfSymbolTable`
  `getAssociatedSymbolTable()`
  Returns the associated symbol table.
  `int`
  `getEntrySize()`
  Size of each structured entry in bytes
  `long`
  `getFileOffset()`
  Offset within file where section bytes are specified
  `long`
  `getLength()`
  Length of file section in bytes
  `int`
  `getRelocationCount()`
  Get number of relocation entries contained within this table
  `ElfRelocation[]`
  `getRelocations()`
  Returns the relocations defined in this table.
  `ElfSectionHeader`
  `getSectionToBeRelocated()`
  Returns the section where the relocations will be applied.
  `ElfSectionHeader`
  `getTableSectionHeader()`
  Get section header which corresponds to this table, or null if only associated with a dynamic table entry
  `boolean`
  `hasAddendRelocations()`
  `boolean`
  `isMissingRequiredSymbolTable()`
  Determine if required symbol table is missing.
  `boolean`
  `isRelrTable()`
  `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`

- ## Constructor Details

  - ### ElfRelocationTable

    public ElfRelocationTable(BinaryReader reader, ElfHeader header, ElfSectionHeader relocTableSection, long fileOffset, long addrOffset, long length, long entrySize, boolean addendTypeReloc, ElfSymbolTable symbolTable, ElfSectionHeader sectionToBeRelocated, ElfRelocationTable.TableFormat format) throws IOException
    Construct an Elf Relocation Table
    Parameters:
      `reader` - byte provider reader (reader is not retained and position is unaffected)
      `header` - elf header
      `relocTableSection` - relocation table section header or null if associated with a dynamic table entry
      `fileOffset` - relocation table file offset
      `addrOffset` - memory address of relocation table (should already be adjusted for prelink)
      `length` - length of relocation table in bytes
      `entrySize` - size of each relocation entry in bytes
      `addendTypeReloc` - true if addend type relocation table
      `symbolTable` - associated symbol table (may be null if not applicable)
      `sectionToBeRelocated` - or null for dynamic relocation table
      `format` - table format
    Throws:
      `IOException` - if an IO or parse error occurs

- ## Method Details

  - ### isMissingRequiredSymbolTable

    public boolean isMissingRequiredSymbolTable()
    Determine if required symbol table is missing. If so, relocations may not be processed.
    Returns:
      true if required symbol table is missing, else false

  - ### hasAddendRelocations

    public boolean hasAddendRelocations()
    Returns:
      true if has addend relocations, otherwise addend extraction from relocation target may be required

  - ### getSectionToBeRelocated

    public ElfSectionHeader getSectionToBeRelocated()
    Returns the section where the relocations will be applied. For example, this method will return ".plt" for ".rel.plt"
    Returns:
      the section where the relocations will be applied or null for dynamic relocation table not associated with a section.

  - ### getRelocations

    public ElfRelocation[] getRelocations()
    Returns the relocations defined in this table.
    Returns:
      the relocations defined in this table

  - ### getRelocationCount

    public int getRelocationCount()
    Get number of relocation entries contained within this table
    Returns:
      relocation entry count

  - ### getAssociatedSymbolTable

    public ElfSymbolTable getAssociatedSymbolTable()
    Returns the associated symbol table. A relocation object contains a symbol index. This index is into this symbol table.
    Returns:
      the associated symbol table or null if not applicable to this reloc table

  - ### getLength

    public long getLength()
    Description copied from interface: `ElfFileSection`
    Length of file section in bytes
    Specified by:
      `getLength` in interface `ElfFileSection`
    Returns:
      length of file section in bytes

  - ### getAddressOffset

    public long getAddressOffset()
    Description copied from interface: `ElfFileSection`
    Preferred memory address offset where data should be loaded. The returned offset will already have the prelink adjustment applied, although will not reflect any change in the image base.
    Specified by:
      `getAddressOffset` in interface `ElfFileSection`
    Returns:
      default memory address offset where data should be loaded

  - ### getTableSectionHeader

    public ElfSectionHeader getTableSectionHeader()
    Get section header which corresponds to this table, or null if only associated with a dynamic table entry
    Returns:
      relocation table section header or null

  - ### isRelrTable

    public boolean isRelrTable()

  - ### getFileOffset

    public long getFileOffset()
    Description copied from interface: `ElfFileSection`
    Offset within file where section bytes are specified
    Specified by:
      `getFileOffset` in interface `ElfFileSection`
    Returns:
      offset within file where section bytes are specified

  - ### getEntrySize

    public int getEntrySize()
    Description copied from interface: `ElfFileSection`
    Size of each structured entry in bytes
    Specified by:
      `getEntrySize` in interface `ElfFileSection`
    Returns:
      entry size or -1 if variable

  - ### toDataType

    public DataType toDataType() throws 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:
      `IOException` - if an IO-related error occurs
    See Also:
      - `StructureDataType`