Class ElfRelocationContext

java.lang.Object
ghidra.app.util.bin.format.elf.relocation.ElfRelocationContext

public class ElfRelocationContext extends Object
ElfRelocationContext provides a relocation handler context related to the processing of entries contained within a specific relocation table.
  • Field Details

  • Constructor Details

    • ElfRelocationContext

      protected ElfRelocationContext(ElfRelocationHandler handler, ElfLoadHelper loadHelper, ElfRelocationTable relocationTable, Map<ElfSymbol,Address> symbolMap)
      Relocation context for a specific Elf image and relocation table
      Parameters:
      handler - relocation handler or null if not available
      loadHelper - the elf load helper
      relocationTable - Elf relocation table
      symbolMap - Elf symbol placement map
  • Method Details

    • processRelocation

      public final void processRelocation(ElfRelocation relocation, Address relocationAddress)
      Process a relocation from the relocation table which corresponds to this context. All relocation entries must be processed in the order they appear within the table.
      Parameters:
      relocation - relocation to be processed
      relocationAddress - relocation address where it should be applied
    • getRelrRelocationType

      public long getRelrRelocationType()
      Get the RELR relocation type associated with the underlying relocation handler.
      Returns:
      RELR relocation type or 0 if not supported
    • getRelocationContext

      public static ElfRelocationContext getRelocationContext(ElfLoadHelper loadHelper, ElfRelocationTable relocationTable, Map<ElfSymbol,Address> symbolMap)
      Get a relocation context for a specfic Elf image and relocation table
      Parameters:
      loadHelper - Elf load helper
      relocationTable - Elf relocation table
      symbolMap - Elf symbol placement map
      Returns:
      relocation context or null
    • hasRelocationHandler

      public final boolean hasRelocationHandler()
      Returns:
      true if a relocation handler was found
    • getImageBaseWordAdjustmentOffset

      public long getImageBaseWordAdjustmentOffset()
      Get image base addressable word adjustment value to be applied to any pre-linked address values such as those contained with the dynamic table. (Applies to default address space only)
      Returns:
      image base adjustment value
    • extractAddend

      public boolean extractAddend()
      Determine if addend data must be extracted
      Returns:
      true if relocation does not provide addend data and it must be extracted from relocation target if appropriate
    • getProgram

      public final Program getProgram()
    • isBigEndian

      public final boolean isBigEndian()
    • getElfHeader

      public final ElfHeader getElfHeader()
    • getLoadHelper

      public final ElfLoadHelper getLoadHelper()
    • getLoadAdapter

      public final ElfLoadAdapter getLoadAdapter()
    • getLog

      public final MessageLog getLog()
    • getSymbol

      public final ElfSymbol getSymbol(int symbolIndex)
      Get the Elf symbol which corresponds to the specified index. Each relocation table may correspond to a specific symbol table to which the specified symbolIndex will be applied. In the absense of a corresponding symbol table index 0 will return a special null symbol.
      Parameters:
      symbolIndex - symbol index
      Returns:
      Elf symbol which corresponds to symbol index or null if out of range
    • getSymbolName

      public final String getSymbolName(int symbolIndex)
      Get the ELF symbol name which corresponds to the specified index.
      Parameters:
      symbolIndex - symbol index
      Returns:
      symbol name which corresponds to symbol index or null if out of range
    • getSymbolAddress

      public Address getSymbolAddress(ElfSymbol symbol)
      Get the program address at which the specified Elf symbol was placed.
      Parameters:
      symbol - Elf symbol
      Returns:
      program address
    • getSymbolValue

      public long getSymbolValue(ElfSymbol symbol)
      Get the adjusted symbol value based upon its placement within the program. This value may differ from symbol.getValue() and will reflect the addressable unit/word offset of it program address.
      Parameters:
      symbol - Elf symbol
      Returns:
      adjusted Elf symbol value or 0 if symbol mapping not found
    • getGOTValue

      public long getGOTValue() throws NotFoundException
      Returns the appropriate .got section using the DT_PLTGOT value defined in the .dynamic section. If no such dynamic value defined, the symbol offset for _GLOBAL_OFFSET_TABLE_ will be used, otherwise a NotFoundException will be thrown.
      Returns:
      the .got section address offset
      Throws:
      NotFoundException - if the dynamic DT_PLTGOT not defined and _GLOBAL_OFFSET_TABLE_ symbol not defined
    • dispose

      public void dispose()
      Dispose relocation context when processing of corresponding relocation table is complete. Instance should be disposed to allow all program changes to be flushed prior to processing a subsequent relocation table.
    • getRelocationAddress

      public Address getRelocationAddress(Address baseAddress, long relocOffset)
      Get relocation address
      Parameters:
      baseAddress - base address
      relocOffset - relocation offset relative to baseAddress
      Returns:
      relocation address