Package ghidra.program.database.function
Class VariableDB
java.lang.Object
ghidra.program.database.function.VariableDB
- All Implemented Interfaces:
Variable,Comparable<Variable>
- Direct Known Subclasses:
LocalVariableDB,ReturnParameterDB
Database implementation of a Variable.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected FunctionDBprotected FunctionManagerDBprotected VariableStorageprotected VariableSymbolDB -
Method Summary
Modifier and TypeMethodDescriptionintbooleanGet the Comment for this variableGet the Data Type of this variableGet the first storage varnode for this variableReturns the function that contains this Variable.Get the last storage varnode for this variableintGet the length of this variablegetName()Get the Name of this variable or null if not assigned or not-applicableReturns the program that contains this variable or is the intended targetGet the source of this variableintGet the variable storage associated with this variable.booleaninthashCode()booleanbooleanbooleanisEquivalent(Variable otherVar) Determine is another variable is equivalent to this variable.booleanbooleanbooleanbooleanfinal booleanisValid()Verify that the variable is valid (i.e., storage is valid and size matches variable data type size)protected booleanvoidsetComment(String comment) Set the comment for this variablevoidsetDataType(DataType type, boolean alignStack, boolean force, SourceType source) Set the Data Type of this variable.voidsetDataType(DataType type, VariableStorage newStorage, boolean force, SourceType source) Set the Data Type of this variable and the associated storage whose size matches the data type length.voidsetDataType(DataType type, SourceType source) Set the Data Type of this variable using the default alignment behavior (implementation specific).voidsetName(String name, SourceType source) Set the name of this variable.toString()Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface ghidra.program.model.listing.Variable
getFirstUseOffset
-
Field Details
-
symbol
-
storage
-
function
-
functionMgr
-
-
Method Details
-
isVoidAllowed
protected boolean isVoidAllowed() -
isValid
public final boolean isValid()Description copied from interface:VariableVerify that the variable is valid (i.e., storage is valid and size matches variable data type size) -
getProgram
Description copied from interface:VariableReturns the program that contains this variable or is the intended target- Specified by:
getProgramin interfaceVariable- Returns:
- the program.
-
getDataType
Description copied from interface:VariableGet the Data Type of this variable- Specified by:
getDataTypein interfaceVariable- Returns:
- the data type of the variable
-
setDataType
public void setDataType(DataType type, VariableStorage newStorage, boolean force, SourceType source) throws InvalidInputException, VariableSizeException Description copied from interface:VariableSet 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:
setDataTypein interfaceVariable- Parameters:
type- the data typenewStorage- properly sized storage for the new data typeforce- overwrite conflicting variablessource- 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 void setDataType(DataType type, boolean alignStack, boolean force, SourceType source) throws InvalidInputException Description copied from interface:VariableSet the Data Type of this variable. The given dataType must have a fixed length.- Specified by:
setDataTypein interfaceVariable- Parameters:
type- the data typealignStack- maintain proper stack alignment/justification if supported by implementation. If false and this is a stack variable, the current stack address/offset will not change. If true, the affect is implementation dependent since alignment can not be performed without access to a compiler specification.force- overwrite conflicting variablessource- signature source- Throws:
InvalidInputException- if data type is not a fixed length or violates storage constraints.
-
setDataType
Description copied from interface:VariableSet 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:
setDataTypein interfaceVariable- Parameters:
type- the data typesource- signature source- Throws:
InvalidInputException- if data type is not a fixed length or violates storage constraints.- See Also:
-
getName
Description copied from interface:VariableGet the Name of this variable or null if not assigned or not-applicable -
getLength
public int getLength()Description copied from interface:VariableGet the length of this variable -
setName
public void setName(String name, SourceType source) throws DuplicateNameException, InvalidInputException Description copied from interface:VariableSet the name of this variable.- Specified by:
setNamein interfaceVariable- Parameters:
name- the namesource- the source of this variable name- Throws:
DuplicateNameException- if the name collides with the name of another variable.InvalidInputException- if name contains blank characters, is zero length, or is null
-
getComment
Description copied from interface:VariableGet the Comment for this variable- Specified by:
getCommentin interfaceVariable- Returns:
- the comment
-
setComment
Description copied from interface:VariableSet the comment for this variable- Specified by:
setCommentin interfaceVariable- Parameters:
comment- the comment
-
getFunction
Description copied from interface:VariableReturns the function that contains this Variable. May be null if the variable is not in a function.- Specified by:
getFunctionin interfaceVariable- Returns:
- containing function or null
-
getSymbol
-
toString
-
getSource
Description copied from interface:VariableGet the source of this variable -
hasAssignedStorage
public boolean hasAssignedStorage()- Specified by:
hasAssignedStoragein interfaceVariable- Returns:
- true if this variable has been assigned storage. This is equivalent to
Variable.getVariableStorage()!= null
-
getVariableStorage
Description copied from interface:VariableGet the variable storage associated with this variable.- Specified by:
getVariableStoragein interfaceVariable- Returns:
- the variable storage for this variable
-
getFirstStorageVarnode
Description copied from interface:VariableGet the first storage varnode for this variable- Specified by:
getFirstStorageVarnodein interfaceVariable- Returns:
- the first storage varnode associated with this variable
- See Also:
-
getLastStorageVarnode
Description copied from interface:VariableGet the last storage varnode for this variable- Specified by:
getLastStorageVarnodein interfaceVariable- Returns:
- the last storage varnode associated with this variable
- See Also:
-
isStackVariable
public boolean isStackVariable()- Specified by:
isStackVariablein interfaceVariable- Returns:
- true if this is a simple variable consisting of a single stack varnode
which will be returned by either the
Variable.getFirstStorageVarnode()orVariable.getLastStorageVarnode()methods. The stack offset can be obtained using:getFirstStorageVarnode().getOffset()
-
hasStackStorage
public boolean hasStackStorage()- Specified by:
hasStackStoragein interfaceVariable- 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:
-
isRegisterVariable
public boolean isRegisterVariable()- Specified by:
isRegisterVariablein interfaceVariable- Returns:
- true if this is a simple variable consisting of a single register varnode
which will be returned by either the
Variable.getFirstStorageVarnode()orVariable.getLastStorageVarnode()methods. The register can be obtained using theVariable.getRegister()method.
-
getRegister
- Specified by:
getRegisterin interfaceVariable- 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:
-
getRegisters
- Specified by:
getRegistersin interfaceVariable- 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:
-
getMinAddress
- Specified by:
getMinAddressin interfaceVariable- Returns:
- the minimum address corresponding to the first varnode of this storage
or null if this is a special empty storage:
VariableStorage.BAD_STORAGE,VariableStorage.UNASSIGNED_STORAGE,VariableStorage.VOID_STORAGE
-
getStackOffset
public int getStackOffset()- Specified by:
getStackOffsetin interfaceVariable- Returns:
- the stack offset associated with simple stack variable (i.e.,
Variable.isStackVariable()returns true).
-
isMemoryVariable
public boolean isMemoryVariable()- Specified by:
isMemoryVariablein interfaceVariable- Returns:
- true if this is a simple variable consisting of a single storage memory element
which will be returned by either the
Variable.getFirstStorageVarnode()orVariable.getVariableStorage()methods.
-
isUniqueVariable
public boolean isUniqueVariable()- Specified by:
isUniqueVariablein interfaceVariable- 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()orVariable.getVariableStorage()methods. The unique hash can be obtained from the storage address offset corresponding to the single storage element.
-
isCompoundVariable
public boolean isCompoundVariable()- Specified by:
isCompoundVariablein interfaceVariable- Returns:
- true if this variable uses compound storage consisting of two or more storage elements
which will be returned by the
Variable.getVariableStorage()method. Compound variables will always use a register(s) optionally followed by other storage (i.e., stack).
-
hashCode
public int hashCode() -
equals
-
compareTo
- Specified by:
compareToin interfaceComparable<Variable>
-
isEquivalent
Description copied from interface:VariableDetermine is another variable is equivalent to this variable.- Specified by:
isEquivalentin interfaceVariable- Parameters:
otherVar- other variable- Returns:
- true if the specified variable is equivalent to this variable
-