Class AbstractLeb128DataType

All Implemented Interfaces:
BuiltInDataType, DataType, Dynamic, ExtensionPoint
Direct Known Subclasses:
SignedLeb128DataType, UnsignedLeb128DataType

public abstract class AbstractLeb128DataType extends BuiltIn implements Dynamic
LEB128 is an integer compression system resulting in variable-length byte sequence. An abstract base class for a little endian base 128 integer data type.
  • Field Details

    • MAX_LEB128_ENCODED_VALUE_LEN

      public static final int MAX_LEB128_ENCODED_VALUE_LEN
      The maximum length in bytes of a leb128 data type.
      See Also:
  • Constructor Details

    • AbstractLeb128DataType

      public AbstractLeb128DataType(String name, boolean signed, DataTypeManager dtm)
      Base constructor for a little endian based 128 data type.
      Parameters:
      name - name of the leb128 data type that extends this class.
      signed - true if it is signed. false if unsigned.
      dtm - the data type manager to associate with this data type.
  • Method Details

    • getBuiltInSettingsDefinitions

      protected SettingsDefinition[] getBuiltInSettingsDefinitions()
      Description copied from class: BuiltIn
      Gets a list of all the settingsDefinitions used by this datatype.
      Overrides:
      getBuiltInSettingsDefinitions in class BuiltIn
      Returns:
      a list of the settingsDefinitions used by this datatype.
    • getDescription

      public String getDescription()
      Description copied from interface: DataType
      Get a String briefly describing this DataType.
      Specified by:
      getDescription in interface DataType
      Returns:
      a one-liner describing this DataType.
    • getLength

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

      NOTE: No datatype should ever return 0, even if DataType.isZeroLength(), and only Dynamic 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
      Returns:
      the length of this DataType
    • getLength

      public int getLength(MemBuffer buf, int maxLength)
      Description copied from interface: Dynamic
      Compute the length for this data-type which corresponds to the specified memory location.
      Specified by:
      getLength in interface Dynamic
      Parameters:
      buf - memory location
      maxLength - maximum number of bytes to consume in computing length, or -1 for unspecified.
      Returns:
      data length or -1 if it could not be determined. Returned length may exceed maxLength if data-type does not supported constrained lengths.
    • getValue

      public Object getValue(MemBuffer buf, Settings settings, int length)
      Description copied from interface: DataType
      Get the interpretted data value in the form of the appropriate Object for this DataType. This method must return a value consistent with DataType.getValueClass(Settings).

      For instance, if this datatype is a Pointer an Address object or null should be returned. A Byte, returns a Scalar object.

      Specified by:
      getValue in interface DataType
      Parameters:
      buf - the data buffer.
      settings - the settings to use.
      length - the number of bytes to get the value from.
      Returns:
      the data Object.
    • getRepresentation

      public String getRepresentation(MemBuffer buf, Settings settings, int length)
      Description copied from interface: DataType
      Get bytes from memory in a printable format for this type.
      Specified by:
      getRepresentation in interface DataType
      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.
    • getReplacementBaseType

      public DataType getReplacementBaseType()
      Description copied from interface: Dynamic
      Returns a suitable replacement base data-type for pointers and arrays when exporting to C code
      Specified by:
      getReplacementBaseType in interface Dynamic
      Returns:
      suitable base data-type for this Dynamic data-type
    • canSpecifyLength

      public boolean canSpecifyLength()
      Description copied from interface: Dynamic
      Determine if the length may be specified for an instanceof this datatype (e.g., Data, Array, DataTypeComponent, etc.).
      Specified by:
      canSpecifyLength in interface Dynamic
      Returns:
      true if a user-specified length can be used, else false