Package ghidra.program.model.data
Class IndexedDynamicDataType
java.lang.Object
ghidra.program.model.data.AbstractDataType
ghidra.program.model.data.DataTypeImpl
ghidra.program.model.data.BuiltIn
ghidra.program.model.data.DynamicDataType
ghidra.program.model.data.IndexedDynamicDataType
- All Implemented Interfaces:
BuiltInDataType
,DataType
,Dynamic
,ExtensionPoint
Indexed Dynamic Data Type template. Used to create instances of the data type at
a given location in memory based on the data found there.
This data struture is used when there is a structure with key field in a header.
The key field, which is a number, sets which of a number of structures follows the header.
Header
field a
field b
keyfield (value 1 means struct1 follows
value 2 means struct2 follows
.....
value n means structN follows
Struct1 | Struct2 | ..... | StructN
-
Field Summary
Modifier and TypeFieldDescriptionprotected String
protected DataType
protected long
protected int
protected long[]
protected long
static final String
Structures which do not have a bodyprotected DataType[]
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
ConstructorDescriptionIndexedDynamicDataType
(String name, String description, DataType header, long[] keys, DataType[] structs, long indexOffset, int indexSize, long mask, DataTypeManager dtm) Construct and the Index dynamic data type template.IndexedDynamicDataType
(String name, String description, DataType header, long singleKey, DataType[] structs, long indexOffset, int indexSize, long mask, DataTypeManager dtm) Construct the Indexed dynamic data type template. -
Method Summary
Modifier and TypeMethodDescriptionprotected DataTypeComponent[]
Get all dynamic components associated with the specified MemBufferGet a String briefly describing this DataType.getMnemonic
(Settings settings) Get the mnemonic for this DataType.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
.Methods inherited from class ghidra.program.model.data.DynamicDataType
canSpecifyLength, getComponent, getComponentAt, getComponents, getComps, getLength, getLength, getNumComponents, getReplacementBaseType, invalidateCache
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, 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, clone, copy, dataTypeAlignmentChanged, dataTypeDeleted, dataTypeNameChanged, dataTypeReplaced, dataTypeSizeChanged, dependsOn, encodeRepresentation, encodeValue, getAlignedLength, getAlignment, getCategoryPath, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultLabelPrefix, getDefaultLabelPrefix, getDefaultOffcutLabelPrefix, getDefaultSettings, getDisplayName, getDocs, getLastChangeTime, getLastChangeTimeInSourceArchive, getName, getParents, getPathName, getSettingsDefinitions, getSourceArchive, getTypeDefSettingsDefinitions, getUniversalID, getValueClass, hasLanguageDependantLength, isDeleted, isEncodable, isEquivalent, isNotYetDefined, isZeroLength, removeParent, replaceWith, setCategoryPath, setDescription, setLastChangeTime, setLastChangeTimeInSourceArchive, setName, setNameAndCategory, setSourceArchive
-
Field Details
-
NULL_BODY_DESCRIPTION
Structures which do not have a body- See Also:
-
description
-
header
-
keys
protected long[] keys -
structs
-
indexOffset
protected long indexOffset -
indexSize
protected int indexSize -
mask
protected long mask
-
-
Constructor Details
-
IndexedDynamicDataType
public IndexedDynamicDataType(String name, String description, DataType header, long[] keys, DataType[] structs, long indexOffset, int indexSize, long mask, DataTypeManager dtm) Construct and the Index dynamic data type template.- Parameters:
name
- name of the data typedescription
- description of the data typeheader
- the header data type that holds the keys to the location of other data typeskeys
- key value array, one to one mapping to structs arraystructs
- structure[n] to use if the key value equals keys[n]indexOffset
- index into the header structure that holds the key valueindexSize
- size of the key value in bytesmask
- mask used on the key value to get the final key
-
IndexedDynamicDataType
public IndexedDynamicDataType(String name, String description, DataType header, long singleKey, DataType[] structs, long indexOffset, int indexSize, long mask, DataTypeManager dtm) Construct the Indexed dynamic data type template. Used when there is one of two structures following and a single value tells which one. If the key value in the header structure matches the singleKey, then the first structure is used. If the key value does not match the singleKey, then the second structure is used.- Parameters:
name
- name of the data typedescription
- description of the data typeheader
- the header data type that holds the keys to the location of other data typessingleKey
- A single key value selects whether the structure appears If the key value equals the singleKey then the first structure is used If the key value doesn't, the second structure is usedstructs
- structure[n] to use if the key value equals keys[n]indexOffset
- index into the header structure that holds the key valueindexSize
- size of the key value in bytesmask
- mask used on the key value to get the final key
-
-
Method Details
-
getAllComponents
Description copied from class:DynamicDataType
Get all dynamic components associated with the specified MemBuffer- Specified by:
getAllComponents
in classDynamicDataType
- Parameters:
buf
- memory buffer positioned at start of data type instance- Returns:
- all components or null if memory data is not valid for this data type.
- See Also:
-
getDescription
Description copied from interface:DataType
Get a String briefly describing this DataType.- Returns:
- a one-liner describing this DataType.
- 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.- 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.- 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:
-
getMnemonic
Description copied from interface:DataType
Get the mnemonic for this DataType.- Specified by:
getMnemonic
in interfaceDataType
- Overrides:
getMnemonic
in classAbstractDataType
- Parameters:
settings
- settings which may influence the result or null- Returns:
- the mnemonic for this DataType.
-