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

# 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 Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final ElfRelocationHandler`
  `handler`
  `protected final ElfLoadHelper`
  `loadHelper`
  `protected final Program`
  `program`
  `protected ElfRelocationTable`
  `relocationTable`
  `protected final Map<ElfSymbol,Address>`
  `symbolMap`
  `protected ElfSymbolTable`
  `symbolTable`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `ElfRelocationContext(ElfRelocationHandler handler, ElfLoadHelper loadHelper, Map<ElfSymbol,Address> symbolMap)`
  Relocation context for a specific Elf image and relocation table

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `dispose()`
  Dispose relocation context when processing of corresponding relocation table is complete.
  `void`
  `endRelocationTableProcessing()`
  Invoked at end of relocation processing for current relocation table.
  `boolean`
  `extractAddend()`
  Determine if addend data must be extracted
  `final ElfHeader`
  `getElfHeader()`
  `long`
  `getGOTValue()`
  Returns the appropriate .got section using the DT_PLTGOT value defined in the .dynamic section.
  `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.
  `final ElfLoadAdapter`
  `getLoadAdapter()`
  `final ElfLoadHelper`
  `getLoadHelper()`
  `final MessageLog`
  `getLog()`
  `final Program`
  `getProgram()`
  `Address`
  `getRelocationAddress(Address baseAddress, long relocOffset)`
  Get relocation address
  `static ElfRelocationContext`
  `getRelocationContext(ElfLoadHelper loadHelper, Map<ElfSymbol,Address> symbolMap)`
  Get a relocation context for a specfic Elf image and relocation table
  `long`
  `getRelrRelocationType()`
  Get the RELR relocation type associated with the underlying relocation handler.
  `final ElfSymbol`
  `getSymbol(int symbolIndex)`
  Get the Elf symbol which corresponds to the specified index.
  `Address`
  `getSymbolAddress(ElfSymbol symbol)`
  Get the program address at which the specified Elf symbol was placed.
  `final String`
  `getSymbolName(int symbolIndex)`
  Get the ELF symbol name which corresponds to the specified index.
  `long`
  `getSymbolValue(ElfSymbol symbol)`
  Get the adjusted symbol value based upon its placement within the program.
  `final boolean`
  `hasRelocationHandler()`
  `final boolean`
  `isBigEndian()`
  `final RelocationResult`
  `processRelocation(ElfRelocation relocation, Address relocationAddress)`
  Process a relocation from the relocation table which corresponds to this context.
  `void`
  `startRelocationTableProcessing(ElfRelocationTable relocTable)`
  Invoked at start of relocation processing for specified table.

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

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

- ## Field Details

  - ### handler

    protected final ElfRelocationHandler handler

  - ### loadHelper

    protected final ElfLoadHelper loadHelper

  - ### symbolMap

    protected final Map<ElfSymbol,Address> symbolMap

  - ### program

    protected final Program program

  - ### relocationTable

    protected ElfRelocationTable relocationTable

  - ### symbolTable

    protected ElfSymbolTable symbolTable

- ## Constructor Details

  - ### ElfRelocationContext

    protected ElfRelocationContext(ElfRelocationHandler handler, ElfLoadHelper loadHelper, 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
      `symbolMap` - Elf symbol placement map

- ## Method Details

  - ### startRelocationTableProcessing

    public void startRelocationTableProcessing(ElfRelocationTable relocTable)
    Invoked at start of relocation processing for specified table. The method `endRelocationTableProcessing()` will be invoked after last relocation is processed.
    Parameters:
      `relocTable` - relocation table

  - ### endRelocationTableProcessing

    public void endRelocationTableProcessing()
    Invoked at end of relocation processing for current relocation table. See `startRelocationTableProcessing(ElfRelocationTable)`.

  - ### processRelocation

    public final RelocationResult 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
    Returns:
      applied relocation result

  - ### 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, Map<ElfSymbol,Address> symbolMap)
    Get a relocation context for a specfic Elf image and relocation table
    Parameters:
      `loadHelper` - Elf load helper
      `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