Package ghidra.app.util.bin.format.elf
Class ElfDynamicTable
- java.lang.Object
-
- ghidra.app.util.bin.format.elf.ElfDynamicTable
-
- All Implemented Interfaces:
ElfFileSection
,StructConverter
public class ElfDynamicTable extends java.lang.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 Summary
Constructors Constructor Description ElfDynamicTable()
DO NOT USE THIS CONSTRUCTOR, USE create*(GenericFactory ...) FACTORY METHODS INSTEAD.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addDynamic(ElfDynamic dyn, int index)
Adds the new dynamic at the specified index.boolean
containsDynamicValue(long type)
Returns true if the specified dynamic type has a value.boolean
containsDynamicValue(ElfDynamicType type)
Returns true if the specified dynamic (enum) type has a value.static ElfDynamicTable
createDynamicTable(FactoryBundledWithBinaryReader reader, ElfHeader header, long fileOffset, long addrOffset)
long
getAddressOffset()
Preferred memory address offset where data should be loaded.ElfDynamic[]
getDynamics()
Returns an array of the dynamics defined this dynamic header.ElfDynamic[]
getDynamics(long type)
Returns an array of the dynamics defined this dynamic header with the specified type.ElfDynamic[]
getDynamics(ElfDynamicType type)
Returns an array of the dynamics defined this dynamic header with the specified (enum) type.long
getDynamicValue(long type)
Returns the value of the specified dynamic type.long
getDynamicValue(ElfDynamicType type)
Returns the value of the specified dynamic (enum) type.int
getEntrySize()
Size of each structured entry in byteslong
getFileOffset()
Offset within file where section bytes are specifiedlong
getLength()
Length of file section in bytesvoid
setDynamicValue(long type, long value)
Sets the dynamic with the specified type to the specified value.void
setDynamicValue(ElfDynamicType type, long value)
Sets the dynamic with the specified (enum) type to the specified value.byte[]
toBytes(DataConverter dc)
Get this dynamic table data as a byte arrayDataType
toDataType()
Returns a structure datatype representing the contents of the implementor of this interface.
-
-
-
Method Detail
-
createDynamicTable
public static ElfDynamicTable createDynamicTable(FactoryBundledWithBinaryReader reader, ElfHeader header, long fileOffset, long addrOffset) throws java.io.IOException
- Throws:
java.io.IOException
-
addDynamic
public void addDynamic(ElfDynamic dyn, int index)
Adds the new dynamic at the specified index.- Parameters:
dyn
- the new dynamicindex
- 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 typevalue
- 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) typevalue
- 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 interfaceElfFileSection
- 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 interfaceElfFileSection
- Returns:
- default memory address offset where data should be loaded
-
toDataType
public DataType toDataType() throws DuplicateNameException, java.io.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 interfaceStructConverter
- Returns:
- returns a structure datatype representing the implementor of this interface
- Throws:
DuplicateNameException
- when a datatype of the same name already existsjava.io.IOException
- See Also:
StructureDataType
-
getLength
public long getLength()
Description copied from interface:ElfFileSection
Length of file section in bytes- Specified by:
getLength
in interfaceElfFileSection
- 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 interfaceElfFileSection
- Returns:
- entry size or -1 if variable
-
toBytes
public byte[] toBytes(DataConverter dc) throws java.lang.ArrayIndexOutOfBoundsException
Get this dynamic table data as a byte array- Parameters:
dc
- data converter- Returns:
- data array
- Throws:
java.lang.ArrayIndexOutOfBoundsException
-
-