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 -
    • removeListener

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

      ProcessorType getProcessorType()
      Returns:
    • getSubsystemType

      SubsystemType getSubsystemType()
      Returns:
      may be null
    • getCompilerType

      CompilerType getCompilerType()
      Returns:
      may be 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:
    • getSlotSize

      int getSlotSize()
      Get the size of a stack slot in bytes. Typically, this would be the size of a general-purpose register.
      Returns:
    • 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:
    • 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:
    • 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
      Returns:
    • getPrototypes

      Collection<IPrototypeItem> getPrototypes()
      Retrieve the prototypes managed by this manager.
      Returns:
    • 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:
    • 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:
    • 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:
    • deleteType

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

      IEnumerationType createEnumeration(String signature)
      Creation a new enumeration type. Enumerated contants can be added after the type is created.
      Parameters:
      signature -
      Returns:
    • 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 -
      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:
    • createStructure

      IStructureType createStructure(String signature)
      Convenience method. Create a structure with a padding of 1 byte and no alignment.
      Parameters:
      signature -
      Returns:
    • 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 -
      nameAndTypes - sequence of (fieldName, fieldTypeName, ...) for fields
      Returns:
    • 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:
    • 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:
    • 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:
    • removeStructureField

      boolean removeStructureField(IStructureType type, IStructureTypeField field)
      Remove a field from a structure type item.
      Parameters:
      type -
      field -
      Returns:
    • renameStructureField

      boolean renameStructureField(IStructureType type, String fieldName, String newFieldName)
      Parameters:
      type -
      fieldName -
      newFieldName -
      Returns:
    • renameStructureField

      boolean renameStructureField(IStructureType type, IStructureTypeField field, String newFieldName)
      Parameters:
      type -
      field -
      newFieldName -
      Returns:
    • createUnion

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

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

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

      Couple<IVirtualTableDefinition,IMethodTable> createVirtualTableDefinition(String vtableStructSig, Long address, Collection<INativeMethodItem> methods)
      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
    • 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 -
      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 -
      supertypes - a list of super types
      vtables - optional list of virtual tables (may be null)
    • completeClassTypeInitialization

      void completeClassTypeInitialization(IClassType type)
      Parameters:
      type -
    • createAlias

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

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

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

      IReferenceType getVoidReference()
      Returns:
    • createReference

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

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

      IArrayType createArray(String baseTypeName, int arraySize)
      Parameters:
      baseTypeName -
      arraySize -
      Returns:
    • createArray

      IArrayType createArray(INativeType baseType, int arraySize)
      Create a new array type.
      Parameters:
      baseType -
      arraySize -
      Returns:
    • 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:
    • 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 -
      returnTypes -
      parameterTypes -
      attributes -
      Returns:
    • createPrototypeEx

      IPrototypeItem createPrototypeEx(String callingConvention, List<String> returnTypes, List<String> parameterTypes, Collection<PrototypeAttribute> attributes)
      Create a new prototype item.
      Parameters:
      callingConvention -
      returnTypes -
      parameterTypes -
      attributes -
      Returns:
    • 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