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
FieldsModifier and TypeFieldDescriptionprotected Stringprotected DataTypeprotected longprotected intprotected long[]protected longstatic final StringStructures which do not have a bodyprotected DataType[]Fields inherited from class ghidra.program.model.data.DataTypeImpl
defaultSettingsFields inherited from class ghidra.program.model.data.AbstractDataType
categoryPath, dataMgr, nameFields 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
ConstructorsConstructorDescriptionIndexedDynamicDataType(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, invalidateCacheMethods 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, setNameAndCategoryMethods 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, setSourceArchiveMethods inherited from class ghidra.program.model.data.AbstractDataType
dataTypeAlignmentChanged, encodeRepresentation, encodeValue, getCategoryPath, getDataOrganization, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultLabelPrefix, getDefaultLabelPrefix, getDefaultOffcutLabelPrefix, getDisplayName, getName, getTypeDefSettingsDefinitions, hasLanguageDependantLength, isDeleted, isEncodable, isNotYetDefined, isZeroLength, toStringMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface ghidra.program.model.data.BuiltInDataType
getCTypeDeclaration, setDefaultSettingsMethods 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, 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:DynamicDataTypeGet all dynamic components associated with the specified MemBuffer- Specified by:
getAllComponentsin 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:DataTypeGet a String briefly describing this DataType.- Returns:
- a one-liner describing this DataType.
- See Also:
-
getValue
Description copied from interface:DataTypeReturns the interpreted data value as an instance of theadvertised value class.For instance,
Pointerdata types should return an Address object (or null), or integer data types should return aScalarobject.- Parameters:
buf- the data buffersettings- the settings to use.length- indicates the maximum number of bytes that may be consumed by aDynamicdatatype, 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:DataTypeGet 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:DataTypeGet the mnemonic for this DataType.- Specified by:
getMnemonicin interfaceDataType- Overrides:
getMnemonicin classAbstractDataType- Parameters:
settings- settings which may influence the result or null- Returns:
- the mnemonic for this DataType.
-