Class ParameterImpl

    • Field Detail

      • ordinal

        protected int ordinal
    • Constructor Detail

      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             Program program)
                      throws InvalidInputException
        Construct a parameter which has no specific storage specified. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        program - target program
        Throws:
        InvalidInputException - if dataType restrictions are violated
      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             Program program,
                             SourceType sourceType)
                      throws InvalidInputException
        Construct a parameter which has no specific storage specified. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        program - target program
        sourceType - name source type
        Throws:
        InvalidInputException - if dataType restrictions are violated
      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             int stackOffset,
                             Program program)
                      throws InvalidInputException
        Construct a stack parameter at the specified stack offset. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        stackOffset -
        program - target program
        Throws:
        InvalidInputException - if dataType restrictions are violated, an invalid storage address is specified, or unable to resolve storage element for specified datatype
        AddressOutOfBoundsException - if invalid stack offset specified
      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             int stackOffset,
                             Program program,
                             SourceType sourceType)
                      throws InvalidInputException
        Construct a stack parameter at the specified stack offset. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        stackOffset -
        program - target program
        sourceType - name source type
        Throws:
        InvalidInputException - if dataType restrictions are violated, an invalid storage address is specified, or unable to resolve storage element for specified datatype
        AddressOutOfBoundsException - if invalid stack offset specified
      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             Register register,
                             Program program)
                      throws InvalidInputException
        Construct a register parameter using the specified register. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        register -
        program - target program
        Throws:
        InvalidInputException - if dataType restrictions are violated, an invalid storage address is specified, or unable to resolve storage element for specified datatype
      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             Register register,
                             Program program,
                             SourceType sourceType)
                      throws InvalidInputException
        Construct a register parameter using the specified register. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        register -
        program - target program
        sourceType - name source type
        Throws:
        InvalidInputException - if dataType restrictions are violated, an invalid storage address is specified, or unable to resolve storage element for specified datatype
      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             Address storageAddr,
                             Program program)
                      throws InvalidInputException
        Construct a parameter with a single storage element at the specified address. If address is contained within a register it may get realigned to the register based upon the resolved datatype length. Variable storage will be aligned to the least-significant portion of the register. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        storageAddr - storage address or null if no storage has been identified
        program - target program
        Throws:
        InvalidInputException - if dataType restrictions are violated, an invalid storage address is specified, or unable to resolve storage element for specified datatype
      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             Address storageAddr,
                             Program program,
                             SourceType sourceType)
                      throws InvalidInputException
        Construct a parameter with a single storage element at the specified address. If address is contained within a register it may get realigned to the register based upon the resolved datatype length. Variable storage will be aligned to the least-significant portion of the register. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        storageAddr - storage address or null if no storage has been identified
        program - target program
        sourceType - name source type
        Throws:
        InvalidInputException - if dataType restrictions are violated, an invalid storage address is specified, or unable to resolve storage element for specified datatype
      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             VariableStorage storage,
                             Program program)
                      throws InvalidInputException
        Construct a parameter with one or more associated storage elements. Storage elements may get slightly modified to adjust for the resolved datatype size. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        storage - variable storage or null for unassigned storage
        program - target program
        Throws:
        InvalidInputException - if dataType restrictions are violated, an invalid storage element is specified, or error while resolving storage element for specified datatype
      • ParameterImpl

        public ParameterImpl​(java.lang.String name,
                             DataType dataType,
                             VariableStorage storage,
                             Program program,
                             SourceType sourceType)
                      throws InvalidInputException
        Construct a parameter with one or more associated storage elements. Storage elements may get slightly modified to adjust for the resolved datatype size. Ordinal assignment is not established (UNASSIGNED_ORDINAL).
        Parameters:
        name - variable name or null for default name
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        storage - variable storage or null for unassigned storage
        program - target program
        sourceType - name source type
        Throws:
        InvalidInputException - if dataType restrictions are violated, an invalid storage element is specified, or error while resolving storage element for specified datatype
      • ParameterImpl

        protected ParameterImpl​(java.lang.String name,
                                int ordinal,
                                DataType dataType,
                                VariableStorage storage,
                                boolean force,
                                Program program,
                                SourceType sourceType)
                         throws InvalidInputException
        Construct a parameter with one or more associated storage elements. Storage elements may get slightly modified to adjust for the resolved datatype size.
        Parameters:
        name - variable name or null for default name
        ordinal - parameter ordinal (-1 for return ordinal)
        dataType - a fixed-length datatype. (NOTE: Should be cloned to program datatype manager prior to determining storage elements since their length may change)
        storage - variable storage or null for unassigned storage
        force - if true storage will be forced even if incorrect size
        program - target program
        sourceType - name source type
        Throws:
        InvalidInputException - if dataType restrictions are violated, an invalid storage element is specified, or error while resolving storage element for specified datatype
    • Method Detail

      • hasDefaultName

        protected final boolean hasDefaultName()
        Determine if current name is a default name. This is more important for parameters so always returning false for locals is OK.
        Returns:
        true if name is reserved as a default name
      • getOrdinal

        public final int getOrdinal()
        Description copied from interface: Parameter
        Returns the ordinal (index) of this parameter within the function signature.
        Specified by:
        getOrdinal in interface Parameter
      • getFirstUseOffset

        public final int getFirstUseOffset()
        Specified by:
        getFirstUseOffset in interface Variable
        Returns:
        the first use offset relative to the function entry point.
      • getDataType

        public DataType getDataType()
        Description copied from interface: Variable
        Get the Data Type of this variable
        Specified by:
        getDataType in interface Variable
        Returns:
        the data type of the variable
      • getFormalDataType

        public DataType getFormalDataType()
        Description copied from interface: Parameter
        Get the original formal signature data type before a possible forced indirect was possibly imposed by the functions calling convention. The Variable.getDataType() method will always return the effective data type which corresponds to the allocated variable storage.
        Specified by:
        getFormalDataType in interface Parameter
        Returns:
        Formal data type. This type will only differ from the Variable.getDataType() value if this parameter isForcedIndirect.
      • isForcedIndirect

        public boolean isForcedIndirect()
        Description copied from interface: Parameter
        If this parameter which was forced by the associated calling convention to be passed as a pointer instead of its original formal type.
        Specified by:
        isForcedIndirect in interface Parameter
        Returns:
        true if this parameter was forced to be passed as a pointer instead of its original formal type
      • isAutoParameter

        public boolean isAutoParameter()
        Specified by:
        isAutoParameter in interface Parameter
        Returns:
        true if this parameter is automatically generated based upon the associated function calling convention and function signature. An example of such a parameter include the "__return_storage_ptr__" parameter.
      • getAutoParameterType

        public AutoParameterType getAutoParameterType()
        Description copied from interface: Parameter
        If this is an auto-parameter this method will indicate its type.
        Specified by:
        getAutoParameterType in interface Parameter
        Returns:
        auto-parameter type of null if not applicable.
      • isVoidAllowed

        protected boolean isVoidAllowed()
        Returns:
        true if a zero-sized void type is permitted
      • isValid

        public final boolean isValid()
        Description copied from interface: Variable
        Verify that the variable is valid (i.e., storage is valid and size matches variable data type size)
        Specified by:
        isValid in interface Variable
        Returns:
        true if variable is valid
      • getComment

        public final java.lang.String getComment()
        Description copied from interface: Variable
        Get the Comment for this variable
        Specified by:
        getComment in interface Variable
        Returns:
        the comment
      • setDataType

        public void setDataType​(DataType type,
                                VariableStorage storage,
                                boolean force,
                                SourceType source)
                         throws InvalidInputException
        Description copied from interface: Variable
        Set the Data Type of this variable and the associated storage whose size matches the data type length.

        NOTE: The storage and source are ignored if the function does not have custom storage enabled.

        Specified by:
        setDataType in interface Variable
        Parameters:
        type - the data type
        storage - properly sized storage for the new data type
        force - overwrite conflicting variables
        source - variable storage source (used only for function parameters and return)
        Throws:
        InvalidInputException - if data type is not a fixed length or violates storage constraints.
        VariableSizeException - if force is false and data type size causes a conflict with other variables
      • setDataType

        public final void setDataType​(DataType type,
                                      boolean align,
                                      boolean force,
                                      SourceType source)
                               throws InvalidInputException
        Description copied from interface: Variable
        Set the Data Type of this variable. The given dataType must have a fixed length.
        Specified by:
        setDataType in interface Variable
        Parameters:
        type - the data type
        force - overwrite conflicting variables
        source - signature source
        Throws:
        InvalidInputException - if data type is not a fixed length or violates storage constraints.
        VariableSizeException - if force is false and data type size causes a conflict with other variables
      • setDataType

        public void setDataType​(DataType type,
                                SourceType source)
                         throws InvalidInputException
        Description copied from interface: Variable
        Set the Data Type of this variable using the default alignment behavior (implementation specific). The given dataType must have a fixed length. If contained within a stack-frame, data-type size will be constrained by existing variables (e.g., equivalent to force=false) Note: stack offset will be maintained for stack variables.
        Specified by:
        setDataType in interface Variable
        Parameters:
        type - the data type
        source - signature source
        Throws:
        InvalidInputException - if data type is not a fixed length or violates storage constraints.
        VariableSizeException - if data type size causes a conflict with other variables
        See Also:
        #setDataType(DataType, boolean)
      • getFunction

        public Function getFunction()
        Description copied from interface: Variable
        Returns the function that contains this Variable. May be null if the variable is not in a function.
        Specified by:
        getFunction in interface Variable
      • getProgram

        public final Program getProgram()
        Description copied from interface: Variable
        Returns the program that contains this variable or is the intended target
        Specified by:
        getProgram in interface Variable
        Returns:
        the program.
      • getLength

        public final int getLength()
        Description copied from interface: Variable
        Get the length of this variable
        Specified by:
        getLength in interface Variable
        Returns:
        the length of the variable
      • getName

        public final java.lang.String getName()
        Description copied from interface: Variable
        Get the Name of this variable or null if not assigned or not-applicable
        Specified by:
        getName in interface Variable
        Returns:
        the name of the variable
      • getSource

        public final SourceType getSource()
        Description copied from interface: Variable
        Get the source of this variable
        Specified by:
        getSource in interface Variable
        Returns:
        the source of this variable
      • getSymbol

        public final Symbol getSymbol()
        Specified by:
        getSymbol in interface Variable
        Returns:
        the symbol associated with this variable or null if no symbol associated. Certain dynamic variables such as auto-parameters do not have a symbol.
      • setComment

        public void setComment​(java.lang.String comment)
        Description copied from interface: Variable
        Set the comment for this variable
        Specified by:
        setComment in interface Variable
        Parameters:
        comment - the comment
      • setName

        public void setName​(java.lang.String name,
                            SourceType source)
                     throws InvalidInputException
        Description copied from interface: Variable
        Set the name of this variable.
        Specified by:
        setName in interface Variable
        Parameters:
        name - the name
        source - the source of this variable name
        Throws:
        InvalidInputException - if name contains blank characters, is zero length, or is null
      • getVariableStorage

        public final VariableStorage getVariableStorage()
        Description copied from interface: Variable
        Get the variable storage associated with this variable.
        Specified by:
        getVariableStorage in interface Variable
        Returns:
        the variable storage for this variable
      • getFirstStorageVarnode

        public final Varnode getFirstStorageVarnode()
        Description copied from interface: Variable
        Get the first storage varnode for this variable
        Specified by:
        getFirstStorageVarnode in interface Variable
        Returns:
        the first storage varnode associated with this variable
        See Also:
        #getStorageElements()
      • getLastStorageVarnode

        public final Varnode getLastStorageVarnode()
        Description copied from interface: Variable
        Get the last storage varnode for this variable
        Specified by:
        getLastStorageVarnode in interface Variable
        Returns:
        the last storage varnode associated with this variable
        See Also:
        #getStorageElements()
      • hasStackStorage

        public final boolean hasStackStorage()
        Specified by:
        hasStackStorage in interface Variable
        Returns:
        true if this variable uses simple or compound storage which contains a stack element. If true, the last storage varnode will always be the stack element.
        See Also:
        Variable.getLastStorageVarnode()
      • getRegister

        public final Register getRegister()
        Specified by:
        getRegister in interface Variable
        Returns:
        first storage register associated with this variable, else null is returned. A variable with compound storage may have more than one register or other storage in addition to the register returned by this method.
        See Also:
        Variable.isRegisterVariable()
      • getRegisters

        public final java.util.List<Register> getRegisters()
        Specified by:
        getRegisters in interface Variable
        Returns:
        all storage register(s) associated with this variable, else null is returned if no registers are used. A variable with compound storage may have more than one register or other storage in addition to the register(s) returned by this method.
        See Also:
        Variable.isRegisterVariable(), Variable.isCompoundVariable()
      • getMinAddress

        public final Address getMinAddress()
        Specified by:
        getMinAddress in interface Variable
        Returns:
        the minimum address corresponding to the first varnode of this storage or null if this is a special empty storage: #BAD_STORAGE, #UNASSIGNED_STORAGE, #VOID_STORAGE
      • isMemoryVariable

        public final boolean isMemoryVariable()
        Specified by:
        isMemoryVariable in interface Variable
        Returns:
        true if this is a simple variable consisting of a single storage memory element which will be returned by either the Variable.getFirstStorageVarnode() or getStorageElements() methods.
      • isUniqueVariable

        public final boolean isUniqueVariable()
        Specified by:
        isUniqueVariable in interface Variable
        Returns:
        true if this is a simple variable consisting of a single storage unique/hash element which will be returned by either the Variable.getFirstStorageVarnode() or getStorageElements() methods. The unique hash can be obtained from the storage address offset corresponding to the single storage element.
      • isCompoundVariable

        public final boolean isCompoundVariable()
        Specified by:
        isCompoundVariable in interface Variable
        Returns:
        true if this variable uses compound storage consisting of two or more storage elements which will be returned by the getStorageElements() method. Compound variables will always use a register(s) optionally followed by other storage (i.e., stack).
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • equals

        public final boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • compareTo

        public final int compareTo​(Variable otherVar)
        Specified by:
        compareTo in interface java.lang.Comparable<Variable>
      • isEquivalent

        public final boolean isEquivalent​(Variable otherVar)
        Specified by:
        isEquivalent in interface Variable
        Returns:
        true if the specified variable is equivalent to this variable