Interface ITypeManager

All Superinterfaces:
INativeItemListenable

@Ser public interface ITypeManager extends INativeItemListenable
A type manager, for primitive types as well as complex types.
  • Method Details

    • addListener

      void addListener(INativeItemListener listener)
      Register a listener relaying events generated by this type manager's type items.
      Specified by:
      addListener in interface INativeItemListenable
      Parameters:
      listener - listener to register
    • removeListener

      void removeListener(INativeItemListener listener)
      Unregister a listener.
      Specified by:
      removeListener in interface INativeItemListenable
      Parameters:
      listener - listener to unregister
    • getProcessorType

      ProcessorType getProcessorType()
      Retrieve the processor type associated with this type manager.
      Returns:
      processor type
    • getSubsystemType

      SubsystemType getSubsystemType()
      Retrieve the subsystem type associated with this type manager.
      Returns:
      subsystem type, or null
    • getCompilerType

      CompilerType getCompilerType()
      Retrieve the compiler type associated with this type manager.
      Returns:
      compiler type, or null
    • getPrimitives

      IPrimitiveTypeManager getPrimitives()
      Retrieve the primitive types manager.
      Returns:
      the primitive types manager
    • getCallingConventionManager

      ICallingConventionManager getCallingConventionManager()
      Retrieve the calling convention manager.
      Returns:
      the calling convention manager
    • getPointerSize

      int getPointerSize()
      Get a pointer size in bytes.
      Returns:
      pointer size in bytes
    • getSlotSize

      int getSlotSize()
      Get the size of a stack slot in bytes. Typically, this would be the size of a general-purpose register.
      Returns:
      stack slot size in bytes
    • getTypeLibraryService

      TypeLibraryService getTypeLibraryService()
      Retrieve the optional type library service (TLS) connected to this manager. The TLS is a source of external types of prototypes. If a TLS is present, its types can be transparently imported and retrieved via getType(String).
      Returns:
      the optional TLS
    • getParser

      TypeStringParser getParser()
      Retrieve a type string parser that can parse type and prototype strings to type and prototype items and register them with this type manager.
      Returns:
      type string parser
    • getTypes

      Collection<INativeType> getTypes()
      Retrieve the types currently managed by this manager. The following types are not returned:
      - reference types (pointers)
      - array types
      - primitives (they are managed by the primitive type manager)
      - prototypes (see getPrototypes()
      Returns:
      managed type collection
    • getTypes

      Retrieve the types currently managed by this manager. The following types are not returned:
      - reference types (pointers)
      - array types
      - primitives (they are managed by the primitive type manager)
      - prototypes (see getPrototypes()
      Parameters:
      filter - optional type filter
      Returns:
      managed type collection
    • getPrototypes

      Collection<IPrototypeItem> getPrototypes()
      Retrieve the prototypes managed by this manager.
      Returns:
      managed prototype collection
    • getType

      INativeType getType(String signature)
      Retrieve a type by effective signature. The type returned can be one managed by this type manager, a primitive returned by the primitive type manager, or a type imported from the optional TLS, if one is present.
      Parameters:
      signature - fully-qualified name (original or effective)
      Returns:
      the type or null if not found
    • getType

      INativeType getType(String signature, boolean allowImportingFromTypelibs)
      Retrieve a type by effective signature. The type returned can be one managed by this type manager, a primitive returned by the primitive type manager, or a type imported from the optional TLS, if one is present.
      Parameters:
      signature - fully-qualified name (original or effective)
      allowImportingFromTypelibs - true to allow importing types
      Returns:
      the type or null if not found
    • getType

      INativeType getType(String signature, boolean allowImportingFromTypelibs, boolean mayBeRenamed)
      Retrieve a type by effective signature. The type returned can be one managed by this type manager, a primitive returned by the primitive type manager, or a type imported from the optional TLS, if one is present.
      Parameters:
      signature - fully-qualified name (original or effective)
      allowImportingFromTypelibs - true to allow importing types
      mayBeRenamed - if false, only original names will be checked
      Returns:
      the type or null if not found
    • getInteger

      INativeType getInteger(int minsize, boolean signed)
      Find an integer or equivalent type of at least the provided size. The returned type may be a primitive or an alias to a primitive.
      Parameters:
      minsize - minimal size in bytes
      signed - signedness
      Returns:
      integer type, or null if none is available
    • getExactInteger

      INativeType getExactInteger(int size, boolean signed)
      Find an integer or equivalent type of the exact provided size. The returned type may be a primitive or an alias to a primitive.
      Parameters:
      size - exact size in bytes
      signed - signedness
      Returns:
      integer type, or null if none is available
    • getExactFloat

      INativeType getExactFloat(int size)
      Find a floating-point or equivalent type of the exact provided size. The returned type may be a primitive or an alias to a primitive.
      Parameters:
      size - exact size in bytes
      Returns:
      floating-point type, or null if none is available
    • deleteType

      boolean deleteType(INativeType type)
      Delete a type.
      Parameters:
      type - type to delete
      Returns:
      success indicator
    • createEnumeration

      IEnumerationType createEnumeration(String signature)
      Create a new enumeration type. Enumerated constants can be added after the type is created.
      Parameters:
      signature - enumeration signature
      Returns:
      created enumeration type
    • createStructureOrUnion

      IStructureType createStructureOrUnion(String signature, int padding, int alignment)
      Create a new structure or union type. Fields can be added after the type is created.
      Parameters:
      signature - structure or union signature
      padding - padding in bytes between fields; 0 means that type is a union
      alignment - alignment in bytes; the structure/union will have at least that size
      Returns:
      created structure or union type
    • createStructure

      IStructureType createStructure(String signature)
      Convenience method. Create a structure with a padding of 1 byte and no alignment.
      Parameters:
      signature - structure signature
      Returns:
      created structure type
    • createStructure

      IStructureType createStructure(String signature, String... nameAndTypes)
      Convenience method. Create a structure with a padding of 1 byte and no alignment. Add a series of fields as specified by the nameAndTypes parameter.
      Parameters:
      signature - structure signature
      nameAndTypes - sequence of (fieldName, fieldTypeName, ...) for fields
      Returns:
      created structure type
    • addStructureField

      IStructureTypeField addStructureField(IStructureType type, String fieldName, String fieldTypeName)
      Convenience method. Append a field to a structure type item.
      Parameters:
      type - structure type
      fieldName - field name
      fieldTypeName - field type
      Returns:
      created field, or null
    • addStructureField

      IStructureTypeField addStructureField(IStructureType type, String fieldName, INativeType fieldType)
      Append a field to a structure type item.
      Parameters:
      type - structure type
      fieldName - field name
      fieldType - field type
      Returns:
      created field, or null
    • addStructureField

      IStructureTypeField addStructureField(IStructureType type, String fieldName, INativeType fieldType, int offset, int bitsize, int alignment, int flags)
      Add or append a field or bit field to a structure type item.
      Parameters:
      type - structure type
      fieldName - field name
      fieldType - field type
      offset - -1 to append, else, a structure offset
      bitsize - optional, used to indicate a bitfield
      alignment - optional, in bytes
      flags - optional, a combination of FLAG_xxx constants
      Returns:
      created field, or null
    • removeStructureField

      boolean removeStructureField(IStructureType type, IStructureTypeField field)
      Remove a field from a structure type item.
      Parameters:
      type - structure type
      field - field to remove
      Returns:
      true if the field was removed
    • renameStructureField

      boolean renameStructureField(IStructureType type, String fieldName, String newFieldName)
      Rename a structure field.
      Parameters:
      type - structure type
      fieldName - current field name
      newFieldName - new field name
      Returns:
      true if the field was renamed
    • renameStructureField

      boolean renameStructureField(IStructureType type, IStructureTypeField field, String newFieldName)
      Rename a structure field.
      Parameters:
      type - structure type
      field - field to rename
      newFieldName - new field name
      Returns:
      true if the field was renamed
    • createUnion

      IStructureType createUnion(String signature)
      Convenience method. Create a union with no alignment.
      Parameters:
      signature - union signature
      Returns:
      created union type
    • createClassType

      IClassType createClassType(String signature)
      Create a new class type.
      Parameters:
      signature - class type signature
      Returns:
      created class type
    • createClassType

      IClassType createClassType(String signature, int padding, int alignment)
      Create a new class type.
      Parameters:
      signature - class type signature
      padding - padding in bytes between fields
      alignment - alignment in bytes
      Returns:
      created class type
    • createVirtualTableDefinition

      Couple<IVirtualTableDefinition,IMethodTable> createVirtualTableDefinition(String vtableStructSig, Long address, Collection<INativeMethodItem> methods)
      Create a virtual table definition.
      Parameters:
      vtableStructSig - signature of the to-be-created structure that will hold the virtual methods
      address - optional memory address of the virtual table, if concrete
      methods - list of methods in the virtual table
      Returns:
      a couple holding the virtual table definition and backing method table
    • setClassVirtualTable

      void setClassVirtualTable(IClassType c, IVirtualTableDefinition vtable)
      Set up the (single) virtual table of a class that has no super class. If used, setClassSuperTypes(IClassType, Collection, Collection) cannot be used.
      Parameters:
      c - class type to update
      vtable - mandatory virtual table
    • setClassSuperTypes

      void setClassSuperTypes(IClassType c, Collection<IClassType> supertypes, Collection<IVirtualTableDefinition> vtables)
      Set up the list of super types and associated virtual tables of a class. If used, setClassVirtualTable(IClassType, IVirtualTableDefinition) cannot be used.
      Parameters:
      c - class type
      supertypes - a list of super types
      vtables - optional list of virtual tables (may be null)
    • completeClassTypeInitialization

      void completeClassTypeInitialization(IClassType type)
      Complete initialization of a class type.
      Parameters:
      type - class type
    • createAlias

      IAliasType createAlias(String signature, INativeType aliasedType)
      Create a new alias (typedef) type.
      Parameters:
      signature - alias signature
      aliasedType - aliased type
      Returns:
      created alias type
    • createAlias

      IAliasType createAlias(String signature, String aliasedTypeSignature)
      Convenience method to create a new alias type.
      Parameters:
      signature - alias signature
      aliasedTypeSignature - aliased type signature
      Returns:
      created alias type
    • getVoid

      INativeType getVoid()
      Get the void pseudo-type.
      Returns:
      void pseudo-type
    • getVoidReference

      IReferenceType getVoidReference()
      Retrieve a pointer to the void pseudo-type.
      Returns:
      void pointer type
    • createReference

      IReferenceType createReference(INativeType baseType, int refCount)
      Create a new reference (pointer) type.
      Parameters:
      baseType - referenced type
      refCount - pointer depth
      Returns:
      created reference type
    • createReference

      IReferenceType createReference(INativeType baseType)
      Create a new simple pointer type.
      Parameters:
      baseType - referenced type
      Returns:
      created reference type
    • createArray

      IArrayType createArray(String baseTypeName, int arraySize)
      Create a new array type.
      Parameters:
      baseTypeName - element type signature
      arraySize - number of elements
      Returns:
      created array type
    • createArray

      IArrayType createArray(INativeType baseType, int arraySize)
      Create a new array type.
      Parameters:
      baseType - type of array elements
      arraySize - number of elements
      Returns:
      created array type
    • createArray

      IArrayType createArray(INativeType baseType, int arraySize, boolean metadata)
      Create a new array type.
      Parameters:
      baseType - type of array elements
      arraySize - number of elements in this array (must be >= 0)
      metadata - Indicate that data contains meaningless elements. Internally, the IArrayType will have the flag ICodeItem.FLAG_TRANSIENT and won't be cached (so it can be modified safely).
      Returns:
      created array type
    • createPrototype

      IPrototypeItem createPrototype(INativeType returnType, List<INativeType> parameterTypes)
      Create a new prototype item with the default calling convention for this manager and no special prototype attribute.
      Parameters:
      returnType - optional; null means void return
      parameterTypes - optional; null means no parameter
      Returns:
      a new native prototype object
    • createPrototype

      IPrototypeItem createPrototype(ICallingConvention callingConvention, INativeType returnType, List<INativeType> parameterTypes, Collection<PrototypeAttribute> attributes)
      Create a new prototype item.
      Parameters:
      callingConvention - optional; null means standard calling convention (per this type manager)
      returnType - optional; null means void return
      parameterTypes - optional; null means no parameter
      attributes - optional
      Returns:
      a new native prototype object
    • createPrototypeEx

      IPrototypeItem createPrototypeEx(ICallingConvention callingConvention, List<INativeType> returnTypes, List<INativeType> parameterTypes, Collection<PrototypeAttribute> attributes)
      Create a new prototype item. Multiple return value types may be specified.
      Parameters:
      callingConvention - optional calling convention
      returnTypes - optional return types
      parameterTypes - optional parameter types
      attributes - optional prototype attributes
      Returns:
      created native prototype object
    • createPrototypeEx

      IPrototypeItem createPrototypeEx(String callingConvention, List<String> returnTypes, List<String> parameterTypes, Collection<PrototypeAttribute> attributes)
      Create a new prototype item.
      Parameters:
      callingConvention - optional calling convention name
      returnTypes - optional return type signatures
      parameterTypes - optional parameter type signatures
      attributes - optional prototype attributes
      Returns:
      created native prototype object
    • verify

      void verify(INativeType type)
      Verify that the provided type belongs to this type manager; raise if it's not the case.
      Parameters:
      type - non-null type
      Throws:
      JebRuntimeException - if the verification failed