Package ghidra.program.model.data
Class FactoryStructureDataType
java.lang.Object
ghidra.program.model.data.AbstractDataType
ghidra.program.model.data.DataTypeImpl
ghidra.program.model.data.BuiltIn
ghidra.program.model.data.FactoryStructureDataType
- All Implemented Interfaces:
BuiltInDataType
,DataType
,FactoryDataType
,ExtensionPoint
- Direct Known Subclasses:
ElfDataType
,PeDataType
Abstract class used to create specialized data structures that act like
a Structure and create a new Dynamic structure each time they are used.
-
Field Summary
Fields inherited from class ghidra.program.model.data.DataTypeImpl
defaultSettings
Fields inherited from class ghidra.program.model.data.AbstractDataType
categoryPath, dataMgr, name
Fields inherited from interface ghidra.program.model.data.DataType
CONFLICT_SUFFIX, DEFAULT, NO_LAST_CHANGE_TIME, NO_SOURCE_SYNC_TIME, TYPEDEF_ATTRIBUTE_PREFIX, TYPEDEF_ATTRIBUTE_SUFFIX, VOID
-
Constructor Summary
ModifierConstructorDescriptionprotected
FactoryStructureDataType
(String name, DataTypeManager dtm) Constructs a new DynamicStructureDataType with the given name -
Method Summary
Modifier and TypeMethodDescriptionprotected DataTypeComponent
addComponent
(Structure es, DataType dt, int length, String componentName) protected DataTypeComponent
addComponent
(Structure es, DataType dt, String componentName) abstract DataType
clone
(DataTypeManager dtm) Returns an instance of this DataType using the specifiedDataTypeManager
to allow its use of the correspondingDataOrganization
while retaining its unique identity (seeDataType.getUniversalID()
and archive association (seeDataType.getSourceArchive()
) if applicable.getDataType
(MemBuffer buf) Returns the appropriate DataType which corresponds to the specified memory location.Get a String briefly describing this DataType.final int
All implementations must return a length of -1.getRepresentation
(MemBuffer buf, Settings settings, int length) Get bytes from memory in a printable format for this type.Returns the interpreted data value as an instance of theadvertised value class
.protected abstract void
populateDynamicStructure
(MemBuffer buf, Structure es) protected Structure
setCategoryPath
(Structure struct, MemBuffer buf) Set the category of this data type.Methods inherited from class ghidra.program.model.data.BuiltIn
addParent, copy, dataTypeDeleted, dataTypeNameChanged, dataTypeReplaced, dataTypeSizeChanged, dependsOn, getBuiltInSettingsDefinitions, getCTypeDeclaration, getCTypeDeclaration, getCTypeDeclaration, getCTypeDeclaration, getDecompilerDisplayName, getLastChangeTime, getSettingsDefinitions, getUniversalID, isEquivalent, removeParent, setCategoryPath, setDefaultSettings, setName, setNameAndCategory
Methods inherited from class ghidra.program.model.data.DataTypeImpl
equals, getAlignedLength, getAlignment, getDefaultSettings, getLastChangeTimeInSourceArchive, getParents, getPathName, getSourceArchive, getValueClass, hashCode, notifyAlignmentChanged, notifyDeleted, notifyNameChanged, notifyParents, notifyReplaced, notifySizeChanged, replaceWith, setDescription, setLastChangeTime, setLastChangeTimeInSourceArchive, setSourceArchive
Methods inherited from class ghidra.program.model.data.AbstractDataType
dataTypeAlignmentChanged, encodeRepresentation, encodeValue, getCategoryPath, getDataOrganization, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultLabelPrefix, getDefaultLabelPrefix, getDefaultOffcutLabelPrefix, getDisplayName, getDocs, getMnemonic, getName, getTypeDefSettingsDefinitions, hasLanguageDependantLength, isDeleted, isEncodable, isNotYetDefined, isZeroLength, toString
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface ghidra.program.model.data.BuiltInDataType
getCTypeDeclaration, setDefaultSettings
Methods inherited from interface ghidra.program.model.data.DataType
addParent, copy, dataTypeAlignmentChanged, dataTypeDeleted, dataTypeNameChanged, dataTypeReplaced, dataTypeSizeChanged, dependsOn, encodeRepresentation, encodeValue, getAlignedLength, getAlignment, getCategoryPath, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultLabelPrefix, getDefaultLabelPrefix, getDefaultOffcutLabelPrefix, getDefaultSettings, getDisplayName, getDocs, getLastChangeTime, getLastChangeTimeInSourceArchive, getMnemonic, getName, getParents, getPathName, getSettingsDefinitions, getSourceArchive, getTypeDefSettingsDefinitions, getUniversalID, getValueClass, hasLanguageDependantLength, isDeleted, isEncodable, isEquivalent, isNotYetDefined, isZeroLength, removeParent, replaceWith, setCategoryPath, setDescription, setLastChangeTime, setLastChangeTimeInSourceArchive, setName, setNameAndCategory, setSourceArchive
-
Constructor Details
-
FactoryStructureDataType
Constructs a new DynamicStructureDataType with the given name- Parameters:
name
- the name of this dataType
-
-
Method Details
-
clone
Description copied from interface:DataType
Returns an instance of this DataType using the specifiedDataTypeManager
to allow its use of the correspondingDataOrganization
while retaining its unique identity (seeDataType.getUniversalID()
and archive association (seeDataType.getSourceArchive()
) if applicable.This instance will be returned if this datatype's DataTypeManager matches the specified dtm. The recursion depth of a clone will stop on any datatype whose
DataTypeManager
matches the specified dtm and simply use the existing datatype instance.NOTE: In general, this method should not be used to obtain an instance to be modified. In most cases changes may be made directly to this instance if supported or to a
DataType.copy(DataTypeManager)
of this type. -
getLength
public final int getLength()Description copied from interface:FactoryDataType
All implementations must return a length of -1.- Specified by:
getLength
in interfaceDataType
- Specified by:
getLength
in interfaceFactoryDataType
- Returns:
- length of -1
- See Also:
-
getValue
Description copied from interface:DataType
Returns the interpreted data value as an instance of theadvertised value class
.For instance,
Pointer
data types should return an Address object (or null), or integer data types should return aScalar
object.- Specified by:
getValue
in interfaceDataType
- Parameters:
buf
- the data buffersettings
- the settings to use.length
- indicates the maximum number of bytes that may be consumed by aDynamic
datatype, otherwise this value is ignored. A value of -1 may be specified to allow a Dynamic datatype to determine the length based upon the actual data bytes- Returns:
- the data object, or null if data is invalid
- See Also:
-
getRepresentation
Description copied from interface:DataType
Get bytes from memory in a printable format for this type.- Specified by:
getRepresentation
in interfaceDataType
- Parameters:
buf
- the data.settings
- the settings to use for the representation.length
- the number of bytes to represent.- Returns:
- the representation of the data in this format, never null.
- See Also:
-
getDescription
Description copied from interface:DataType
Get a String briefly describing this DataType.- Specified by:
getDescription
in interfaceDataType
- Returns:
- a one-liner describing this DataType.
- See Also:
-
getDataType
Description copied from interface:FactoryDataType
Returns the appropriate DataType which corresponds to the specified memory location.- Specified by:
getDataType
in interfaceFactoryDataType
- Parameters:
buf
- memory location- Returns:
- fabricated datatype based upon memory data
-
setCategoryPath
Set the category of this data type.- Parameters:
struct
-buf
-- Returns:
- Returns a new structure with the correct category.
-
addComponent
-
addComponent
protected DataTypeComponent addComponent(Structure es, DataType dt, int length, String componentName) -
populateDynamicStructure
-