Package ghidra.app.util.datatype.microsoft

# Class RTTI4DataType

java.lang.Object
ghidra.program.model.data.AbstractDataType
ghidra.program.model.data.DataTypeImpl
ghidra.program.model.data.BuiltIn
ghidra.program.model.data.DynamicDataType
ghidra.app.util.datatype.microsoft.RTTIDataType
ghidra.app.util.datatype.microsoft.RTTI4DataType

All Implemented Interfaces:
  `BuiltInDataType`, `DataType`, `Dynamic`, `ExtensionPoint`

@Deprecated public class RTTI4DataType extends RTTIDataType
Deprecated.
Use of this dynamic data type class is no longer recommended. Instead a CompleteObjectLocator structure data type can be obtained using the Rtti4Model.
The RTTI4 data type represents a CompleteObjectLocator structure.

Fields for this RunTimeTypeInformation structure can be found on http://www.openrce.org

     struct CompleteObjectLocator {
         dword signature;
         dword offset;             // offset of vbtable within class
         dword cdOffset;           // constructor displacement offset
         4byte_ptr_or_disp pRtti0; // ref to TypeDescriptor (RTTI 0) for class
         4byte_ptr_or_disp pRtti3; // ref to ClassHierarchyDescriptor (RTTI 3)
     }

RTTI_Complete_Object_Locator is the label for the RTTI4 data structure.

- ## 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

  Constructors
  Constructor
  Description
  `RTTI4DataType()`
  Deprecated.
  Creates a dynamic Complete Object Locator data type.
  `RTTI4DataType(DataTypeManager dtm)`
  Deprecated.
  Creates a dynamic Complete Object Locator data type.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `DataType`
  `clone(DataTypeManager dtm)`
  Deprecated.
  Returns an instance of this DataType using the specified `DataTypeManager` to allow its use of the corresponding `DataOrganization` while retaining its unique identity (see `DataType.getUniversalID()` and archive association (see `DataType.getSourceArchive()`) if applicable.
  `protected DataTypeComponent[]`
  `getAllComponents(MemBuffer buf)`
  Deprecated.
  Get all dynamic components associated with the specified MemBuffer
  `String`
  `getDefaultLabelPrefix()`
  Deprecated.
  Returns the appropriate string to use as the default label prefix in the absence of any data.
  `String`
  `getDescription()`
  Deprecated.
  Get a String briefly describing this DataType.
  `int`
  `getLength()`
  Deprecated.
  Get the length of this DataType as a number of 8-bit bytes.
  `int`
  `getLength(Memory memory, Address address, byte[] bytes)`
  Deprecated.
  Gets the total length of the data created when this data type is placed at the indicated address in memory.
  `String`
  `getMnemonic(Settings settings)`
  Deprecated.
  Get the mnemonic for this DataType.
  `String`
  `getRepresentation(MemBuffer buf, Settings settings, int length)`
  Deprecated.
  Get bytes from memory in a printable format for this type.
  `Address`
  `getRtti0Address(Memory memory, Address rtti4Address)`
  Deprecated.
  Gets the address of the RTTI0 that is referred to from an RTTI4 structure that is placed at the indicated address.
  `Address`
  `getRtti3Address(Memory memory, Address rtti4Address)`
  Deprecated.
  Gets the address of the RTTI3 that is referred to from an RTTI4 structure that is placed at the indicated address.
  `Object`
  `getValue(MemBuffer buf, Settings settings, int length)`
  Deprecated.
  Returns the interpreted data value as an instance of the `advertised value class`.
  `boolean`
  `isValid(Program program, Address startAddress, DataValidationOptions validationOptions)`
  Deprecated.
  Determines if the data type is valid for placing at the indicated address in the program.

  ### Methods inherited from class ghidra.app.util.datatype.microsoft.RTTIDataType

  `convertValidationOptions, isValid`

  ### Methods inherited from class ghidra.program.model.data.DynamicDataType

  `canSpecifyLength, getComponent, getComponentAt, getComponents, getComps, 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, 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, copy, dataTypeAlignmentChanged, dataTypeDeleted, dataTypeNameChanged, dataTypeReplaced, dataTypeSizeChanged, dependsOn, encodeRepresentation, encodeValue, getAlignedLength, getAlignment, getCategoryPath, getDataOrganization, getDataTypeManager, getDataTypePath, getDefaultAbbreviatedLabelPrefix, 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`

- ## Constructor Details

  - ### RTTI4DataType

    public RTTI4DataType()
    Deprecated.
    Creates a dynamic Complete Object Locator data type.

  - ### RTTI4DataType

    public RTTI4DataType(DataTypeManager dtm)
    Deprecated.
    Creates a dynamic Complete Object Locator data type.
    Parameters:
      `dtm` - the data type manager for this data type.

- ## Method Details

  - ### clone

    public DataType clone(DataTypeManager dtm)
    Deprecated.
    Description copied from interface: `DataType`
    Returns an instance of this DataType using the specified `DataTypeManager` to allow its use of the corresponding `DataOrganization` while retaining its unique identity (see `DataType.getUniversalID()` and archive association (see `DataType.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.

    Parameters:
      `dtm` - the data-type manager instance whose data-organization should apply.
    Returns:
      cloned instance which may be the same as this instance

  - ### getDescription

    public String getDescription()
    Deprecated.
    Description copied from interface: `DataType`
    Get a String briefly describing this DataType.
    Returns:
      a one-liner describing this DataType.

  - ### getMnemonic

    public String getMnemonic(Settings settings)
    Deprecated.
    Description copied from interface: `DataType`
    Get the mnemonic for this DataType.
    Specified by:
      `getMnemonic` in interface `DataType`
    Overrides:
      `getMnemonic` in class `AbstractDataType`
    Parameters:
      `settings` - settings which may influence the result or null
    Returns:
      the mnemonic for this DataType.

  - ### getLength

    public int getLength()
    Deprecated.
    Description copied from interface: `DataType`
    Get the length of this DataType as a number of 8-bit bytes.

    For primitive datatypes this reflects the smallest varnode which can be used to contain its value (i.e., raw data length).

    Example: For x86 32-bit gcc an 80-bit `long double` `raw data length` of 10-bytes will fit within a floating point register while its `aligned-length` of 12-bytes is used by the gcc compiler for data/array/component allocations to maintain alignment (i.e., `sizeof(long double)` ).

    NOTE: Other than the `VoidDataType`, no datatype should ever return 0, even if `DataType.isZeroLength()`, and only `Dynamic`/`FactoryDataType` datatypes should return -1. If `DataType.isZeroLength()` is true a length of 1 should be returned. Where a zero-length datatype can be handled (e.g., `Composite`) the `DataType.isZeroLength()` method should be used.

    Specified by:
      `getLength` in interface `DataType`
    Overrides:
      `getLength` in class `DynamicDataType`
    Returns:
      the length of this DataType

  - ### getRepresentation

    public String getRepresentation(MemBuffer buf, Settings settings, int length)
    Deprecated.
    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.

  - ### getValue

    public Object getValue(MemBuffer buf, Settings settings, int length)
    Deprecated.
    Description copied from interface: `DataType`
    Returns the interpreted data value as an instance of the `advertised value class`.

    For instance, `Pointer` data types should return an Address object (or null), or integer data types should return a `Scalar` object.

    Parameters:
      `buf` - the data buffer
      `settings` - the settings to use.
      `length` - indicates the maximum number of bytes that may be consumed by a `Dynamic` 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

  - ### getAllComponents

    protected DataTypeComponent[] getAllComponents(MemBuffer buf)
    Deprecated.
    Description copied from class: `DynamicDataType`
    Get all dynamic components associated with the specified MemBuffer
    Specified by:
      `getAllComponents` in class `DynamicDataType`
    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.

  - ### getLength

    public int getLength(Memory memory, Address address, byte[] bytes)
    Deprecated.
    Gets the total length of the data created when this data type is placed at the indicated address in memory.
    Parameters:
      `memory` - the program memory for this data.
      `address` - the start address of the data.
      `bytes` - the bytes for this data.
    Returns:
      the length of the data. zero is returned if valid data can't be created at the indicated address using this data type.

  - ### getRtti0Address

    public Address getRtti0Address(Memory memory, Address rtti4Address)
    Deprecated.
    Gets the address of the RTTI0 that is referred to from an RTTI4 structure that is placed at the indicated address.
    Parameters:
      `memory` - the memory with the data for the RTTI structures.
      `rtti4Address` - address of an RTTI4 structure
    Returns:
      the address of the RTTI0 structure or null.

  - ### getRtti3Address

    public Address getRtti3Address(Memory memory, Address rtti4Address)
    Deprecated.
    Gets the address of the RTTI3 that is referred to from an RTTI4 structure that is placed at the indicated address.
    Parameters:
      `memory` - the memory with the data for the RTTI structures.
      `rtti4Address` - address of an RTTI4 structure
    Returns:
      the address of the RTTI3 structure or null.

  - ### isValid

    public boolean isValid(Program program, Address startAddress, DataValidationOptions validationOptions)
    Deprecated.
    Description copied from class: `RTTIDataType`
    Determines if the data type is valid for placing at the indicated address in the program.
    Specified by:
      `isValid` in class `RTTIDataType`
    Parameters:
      `program` - the program
      `startAddress` - the address where the validated data type will be used to create data
      `validationOptions` - options indicating how to perform the validation
    Returns:
      true if this data type can be laid down at the specified address

  - ### getDefaultLabelPrefix

    public String getDefaultLabelPrefix()
    Deprecated.
    Description copied from interface: `DataType`
    Returns the appropriate string to use as the default label prefix in the absence of any data.
    Specified by:
      `getDefaultLabelPrefix` in interface `DataType`
    Overrides:
      `getDefaultLabelPrefix` in class `AbstractDataType`
    Returns:
      the default label prefix or null if none specified.