Class ElfDynamicTable

java.lang.Object
ghidra.app.util.bin.format.elf.ElfDynamicTable
All Implemented Interfaces:
ElfFileSection, StructConverter

public class ElfDynamicTable extends Object implements ElfFileSection
If an object file participates in dynamic linking, its program header table will have an element of type PT_DYNAMIC. This "segment" contains the ".dynamic" section. A special symbol, _DYNAMIC, labels the section, which contains an array of the Elf32_Dyn or Elf64_Dyn structures.

All address entries contained within this table should adjusted for pre-linking using ElfHeader.adjustAddressForPrelink(long). If a pre-link adjustment is not applicable, this adjustment will have no affect.

  • Constructor Details

  • Method Details

    • addDynamic

      public void addDynamic(ElfDynamic dyn, int index)
      Adds the new dynamic at the specified index.
      Parameters:
      dyn - the new dynamic
      index - the new index
    • getDynamics

      public ElfDynamic[] getDynamics()
      Returns an array of the dynamics defined this dynamic header.
      Returns:
      an array of the dynamics defined this dynamic header
    • getDynamics

      public ElfDynamic[] getDynamics(long type)
      Returns an array of the dynamics defined this dynamic header with the specified type.
      Parameters:
      type - the desired dynamic type, e.g., DT_NEEDED
      Returns:
      an array of the dynamics defined this dynamic header
    • getDynamics

      public ElfDynamic[] getDynamics(ElfDynamicType type)
      Returns an array of the dynamics defined this dynamic header with the specified (enum) type.
      Parameters:
      type - the desired dynamic type, e.g., DT_NEEDED
      Returns:
      an array of the dynamics defined this dynamic header
    • setDynamicValue

      public void setDynamicValue(long type, long value)
      Sets the dynamic with the specified type to the specified value.
      Parameters:
      type - the dynamic type
      value - the new value
    • setDynamicValue

      public void setDynamicValue(ElfDynamicType type, long value)
      Sets the dynamic with the specified (enum) type to the specified value.
      Parameters:
      type - the dynamic (enum) type
      value - the new value
    • getDynamicValue

      public long getDynamicValue(long type) throws NotFoundException
      Returns the value of the specified dynamic type.
      Parameters:
      type - the dynamic type
      Returns:
      the dynamic value
      Throws:
      NotFoundException
    • containsDynamicValue

      public boolean containsDynamicValue(ElfDynamicType type)
      Returns true if the specified dynamic (enum) type has a value.
      Parameters:
      type - the dynamic (enum) type
      Returns:
      true if dynamic value exists
    • containsDynamicValue

      public boolean containsDynamicValue(long type)
      Returns true if the specified dynamic type has a value.
      Parameters:
      type - the dynamic type
      Returns:
      true if dynamic value exists
    • getDynamicValue

      public long getDynamicValue(ElfDynamicType type) throws NotFoundException
      Returns the value of the specified dynamic (enum) type.
      Parameters:
      type - the dynamic (enum) type
      Returns:
      the dynamic value
      Throws:
      NotFoundException
    • 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
    • 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
    • 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:
    • 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
    • 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
    • toBytes

      public byte[] toBytes(DataConverter dc) throws ArrayIndexOutOfBoundsException
      Get this dynamic table data as a byte array
      Parameters:
      dc - data converter
      Returns:
      data array
      Throws:
      ArrayIndexOutOfBoundsException