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
public abstract class IndexedDynamicDataType extends DynamicDataType
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
Fields Modifier and Type Field Description protected java.lang.String
description
protected DataType
header
protected long
indexOffset
protected int
indexSize
protected long[]
keys
protected long
mask
static java.lang.String
NULL_BODY_DESCRIPTION
Structures which do not have a bodyprotected DataType[]
structs
-
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, VOID
-
-
Constructor Summary
Constructors Constructor Description IndexedDynamicDataType(java.lang.String name, java.lang.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(java.lang.String name, java.lang.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
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected DataTypeComponent[]
getAllComponents(MemBuffer buf)
Get all dynamic components associated with the specified MemBufferjava.lang.String
getDescription()
Get a String briefly describing this DataType.java.lang.String
getMnemonic(Settings settings)
Get the mnemonic for this DataType.java.lang.String
getRepresentation(MemBuffer buf, Settings settings, int length)
Get bytes from memory in a printable format for this type.java.lang.Object
getValue(MemBuffer buf, Settings settings, int length)
Get the data in the form of the appropriate Object for this DataType.-
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, setName, setNameAndCategory
-
Methods inherited from class ghidra.program.model.data.DataTypeImpl
equals, getAlignment, getDefaultSettings, getLastChangeTimeInSourceArchive, getParents, getPathName, getSourceArchive, getValueClass, hashCode, notifyAlignmentChanged, notifyDeleted, notifyNameChanged, notifyParents, notifyReplaced, notifySizeChanged, replaceWith, setDefaultSettings, setDescription, setLastChangeTime, setLastChangeTimeInSourceArchive, setSourceArchive
-
Methods inherited from class ghidra.program.model.data.AbstractDataType
dataTypeAlignmentChanged, encodeRepresentation, encodeValue, getCategoryPath, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultLabelPrefix, getDefaultLabelPrefix, getDefaultOffcutLabelPrefix, getDisplayName, getDocs, getName, 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
-
Methods inherited from interface ghidra.program.model.data.DataType
addParent, clone, copy, dataTypeAlignmentChanged, dataTypeDeleted, dataTypeNameChanged, dataTypeReplaced, dataTypeSizeChanged, dependsOn, encodeRepresentation, encodeValue, getAlignment, getCategoryPath, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, getDefaultLabelPrefix, getDefaultLabelPrefix, getDefaultOffcutLabelPrefix, getDefaultSettings, getDisplayName, getDocs, getLastChangeTime, getLastChangeTimeInSourceArchive, getName, getParents, getPathName, getSettingsDefinitions, getSourceArchive, getUniversalID, getValueClass, hasLanguageDependantLength, isDeleted, isEncodable, isEquivalent, isNotYetDefined, isZeroLength, removeParent, replaceWith, setCategoryPath, setDefaultSettings, setDescription, setLastChangeTime, setLastChangeTimeInSourceArchive, setName, setNameAndCategory, setSourceArchive
-
-
-
-
Field Detail
-
NULL_BODY_DESCRIPTION
public static final java.lang.String NULL_BODY_DESCRIPTION
Structures which do not have a body- See Also:
- Constant Field Values
-
description
protected java.lang.String description
-
header
protected DataType header
-
keys
protected long[] keys
-
structs
protected DataType[] structs
-
indexOffset
protected long indexOffset
-
indexSize
protected int indexSize
-
mask
protected long mask
-
-
Constructor Detail
-
IndexedDynamicDataType
public IndexedDynamicDataType(java.lang.String name, java.lang.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(java.lang.String name, java.lang.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 Detail
-
getAllComponents
protected DataTypeComponent[] getAllComponents(MemBuffer buf)
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:
DynamicDataType.getAllComponents(ghidra.program.model.mem.MemBuffer)
-
getDescription
public java.lang.String getDescription()
Description copied from interface:DataType
Get a String briefly describing this DataType.- Returns:
- a one-liner describing this DataType.
- See Also:
DataType.getDescription()
-
getValue
public java.lang.Object getValue(MemBuffer buf, Settings settings, int length)
Description copied from interface:DataType
Get the data in the form of the appropriate Object for this DataType.For instance if the datatype is an AddressDT, return an Address object. a Byte, return a Scalar* (maybe this should be a Byte) a Float, return a Float
- Parameters:
buf
- the data buffer.settings
- the settings to use.length
- the number of bytes to get the value from.- Returns:
- the data Object.
- See Also:
DataType.getValue(ghidra.program.model.mem.MemBuffer, ghidra.docking.settings.Settings, int)
-
getRepresentation
public java.lang.String getRepresentation(MemBuffer buf, Settings settings, int length)
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:
DataType.getRepresentation(ghidra.program.model.mem.MemBuffer, ghidra.docking.settings.Settings, int)
-
getMnemonic
public java.lang.String getMnemonic(Settings settings)
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.
-
-