Package ghidra.program.model.pcode
Class HighSymbol
java.lang.Object
ghidra.program.model.pcode.HighSymbol
- Direct Known Subclasses:
EquateSymbol
,HighCodeSymbol
,HighExternalSymbol
,HighFunctionShellSymbol
,HighFunctionSymbol
,HighLabelSymbol
,UnionFacetSymbol
A symbol within the decompiler's model of a particular function. The symbol has a name and a data-type
along with other properties. The symbol is mapped to one or more storage locations by attaching a
SymbolEntry for each mapping.
-
Field Summary
Modifier and TypeFieldDescriptionprotected int
protected int
protected PcodeDataTypeManager
protected SymbolEntry[]
protected HighFunction
static final long
protected String
protected DataType
-
Constructor Summary
ModifierConstructorDescriptionprotected
HighSymbol
(long uniqueId, String nm, DataType tp, boolean tlock, boolean nlock, PcodeDataTypeManager manage) Construct a symbol that is not attached to a function model.protected
HighSymbol
(long uniqueId, String nm, DataType tp, HighFunction func) Construct a base symbol, given a name and data-type.protected
HighSymbol
(HighFunction func) Constructor for use with restoreXML -
Method Summary
Modifier and TypeMethodDescriptionprotected void
addMapEntry
(SymbolEntry entry) void
Decode this symbol object and its associated mappings from the stream.protected void
decodeHeader
(Decoder decoder) static HighSymbol
decodeMapSym
(Decoder decoder, boolean isGlobal, HighFunction high) Restore a full HighSymbol from the next <mapsym> element in the stream.void
Encode the symbol description as an element to the stream.protected void
encodeHeader
(Encoder encoder) Encode attributes for the base symbol elementstatic void
encodeMapSym
(Encoder encoder, HighSymbol sym) Encode the given symbol with all its mapping as a <mapsym> element to the stream.int
For parameters (category=0), this method returns the position of the parameter within the function prototype.protected int
Get the first code Address (expressed as a different in bytes from the starting address of the function) where this symbol's storage actually holds the value of the symbol.Get the function model of which this symbol is a part.Get the HighVariable associate with this symbol if any.long
getId()
Get id associated with this symbol.int
Return one of - MutabilitySettingsDefinition.NORMAL - MutabilitySettingsDefinition.VOLATILE - MutabilitySettingsDefinition.CONSTANTgetName()
Get the base name of this symbolFetch the namespace owning this symbol, if it exists.Get the first code Address, within the function, where this symbol's storage actually holds the value of the symbol.Get the Program object containing the function being modeled.int
getSize()
Fetch the corresponding database Symbol if it exists.boolean
isGlobal()
Is this symbol in the global scope or some other global namespaceboolean
boolean
If this returns true, the decompiler will not speculatively merge this with other variables.boolean
If this returns true, this symbol's name is "locked".boolean
Is this symbol a parameter for a functionboolean
boolean
If this returns true, this symbol's data-type is "locked", meaning it is considered unchangeable during decompilation.protected void
setCategory
(int cat, int index) Set the category and associated index for this symbol.void
setNameLock
(boolean namelock) Set whether this symbol's name is considered "locked".void
setTypeLock
(boolean typelock) Set whether this symbol's data-type is considered "locked".
-
Field Details
-
ID_BASE
public static final long ID_BASE- See Also:
-
name
-
type
-
function
-
category
protected int category -
categoryIndex
protected int categoryIndex -
entryList
-
dtmanage
-
-
Constructor Details
-
HighSymbol
Constructor for use with restoreXML- Parameters:
func
- is the HighFunction using the symbol
-
HighSymbol
Construct a base symbol, given a name and data-type. Mappings must be attached separately.- Parameters:
uniqueId
- is the id to associate with the new symbolnm
- is the given nametp
- is the given data-typefunc
- is the function model owning the new symbol
-
HighSymbol
protected HighSymbol(long uniqueId, String nm, DataType tp, boolean tlock, boolean nlock, PcodeDataTypeManager manage) Construct a symbol that is not attached to a function model. The symbol is given a name, data-type, and other basic attributes. Mappings must be attached separately.- Parameters:
uniqueId
- is the id to associate with the new symbolnm
- is the given nametp
- is the given data-typetlock
- is true if the symbol is type lockednlock
- is true if the symbol is name lockedmanage
- is a PcodeDataTypeManager to facilitate XML marshaling
-
-
Method Details
-
addMapEntry
-
getId
public long getId()Get id associated with this symbol.- Returns:
- the id
-
getSymbol
Fetch the corresponding database Symbol if it exists.- Returns:
- the matching Symbol object or null
-
getNamespace
Fetch the namespace owning this symbol, if it exists.- Returns:
- the Namespace object or null
-
getHighVariable
Get the HighVariable associate with this symbol if any. The symbol may have multiple partial HighVariables associated with it. This method returns the biggest one, which may not be the same size as the symbol itself.- Returns:
- the associated HighVariable or null
-
getName
Get the base name of this symbol- Returns:
- the name
-
getProgram
Get the Program object containing the function being modeled.- Returns:
- the Program
-
getDataType
- Returns:
- the data-type associate with this symbol
-
getSize
public int getSize()- Returns:
- the number of bytes consumed by the storage for this symbol
-
getPCAddress
Get the first code Address, within the function, where this symbol's storage actually holds the value of the symbol. If there is more than one mapping for the symbol, this returns the code Address for the first mapping. A null value indicates that the storage is valid over the whole function (at least). If the value is non-null, the symbol storage may be used for other purposes at prior locations.- Returns:
- the first use code Address or null
-
getFirstUseOffset
protected int getFirstUseOffset()Get the first code Address (expressed as a different in bytes from the starting address of the function) where this symbol's storage actually holds the value of the symbol. A value of 0 indicates that the storage is valid across the entire function. A negative value indicates the storage is an input to the function.- Returns:
- the first-use offset of this symbol's storage
-
getHighFunction
Get the function model of which this symbol is a part.- Returns:
- the HighFunction owning this symbol
-
setCategory
protected void setCategory(int cat, int index) Set the category and associated index for this symbol. The category indicates a specific sub-class of symbols. Currently -1=none, 0=parameter, 1=equate- Parameters:
cat
- is the categoryindex
- is the category index ("slot" for parameters)
-
setTypeLock
public void setTypeLock(boolean typelock) Set whether this symbol's data-type is considered "locked". If it is "locked", this symbol's data-type is considered unchangeable during decompilation. The data-type will be forced into the decompiler's model of the function to the extent possible.- Parameters:
typelock
- is true if the data-type should be considered "locked".
-
setNameLock
public void setNameLock(boolean namelock) Set whether this symbol's name is considered "locked". If it is "locked", the decompiler will use the name when labeling the storage described by this symbol.- Parameters:
namelock
- is true if the name should be considered "locked".
-
isTypeLocked
public boolean isTypeLocked()If this returns true, this symbol's data-type is "locked", meaning it is considered unchangeable during decompilation. The data-type will be forced into the decompiler's model of the function to the extent possible.- Returns:
- true if the data-type is considered "locked".
-
isNameLocked
public boolean isNameLocked()If this returns true, this symbol's name is "locked". meaning the decompiler is forced to use the name when labeling the storage described by this symbol.- Returns:
- true if the name is considered "locked".
-
isIsolated
public boolean isIsolated()If this returns true, the decompiler will not speculatively merge this with other variables. Currently, being isolated is equivalent to being typelocked.- Returns:
- true if this will not be merged with other variables
-
getMutability
public int getMutability()Return one of - MutabilitySettingsDefinition.NORMAL - MutabilitySettingsDefinition.VOLATILE - MutabilitySettingsDefinition.CONSTANT- Returns:
- the mutability setting
-
isParameter
public boolean isParameter()Is this symbol a parameter for a function- Returns:
- true if this is a parameter
-
getCategoryIndex
public int getCategoryIndex()For parameters (category=0), this method returns the position of the parameter within the function prototype.- Returns:
- the category index for this symbol
-
isGlobal
public boolean isGlobal()Is this symbol in the global scope or some other global namespace- Returns:
- true if this is global
-
isThisPointer
public boolean isThisPointer()- Returns:
- true if symbol is a "this" pointer for a class method
-
isHiddenReturn
public boolean isHiddenReturn()- Returns:
- true is symbol holds a pointer to where a function's return value should be stored
-
getFirstWholeMap
- Returns:
- the first mapping object attached to this symbol
-
getStorage
- Returns:
- the storage associated with this symbol (associated with the first mapping)
-
encodeHeader
Encode attributes for the base symbol element- Parameters:
encoder
- is the stream encoder- Throws:
IOException
- for errors in the underlying stream
-
encode
Encode the symbol description as an element to the stream. This does NOT save the mappings.- Parameters:
encoder
- is the stream encoder- Throws:
IOException
- for errors in the underlying stream
-
decodeHeader
- Throws:
DecoderException
-
decode
Decode this symbol object and its associated mappings from the stream.- Parameters:
decoder
- is the stream decoder- Throws:
DecoderException
- for invalid encodings
-
decodeMapSym
public static HighSymbol decodeMapSym(Decoder decoder, boolean isGlobal, HighFunction high) throws DecoderException Restore a full HighSymbol from the next <mapsym> element in the stream. This method acts as a HighSymbol factory, instantiating the correct class based on the particular elements.- Parameters:
decoder
- is the stream decoderisGlobal
- is true if this symbol is being read into a global scopehigh
- is the function model that will own the new symbol- Returns:
- the new symbol
- Throws:
DecoderException
- for invalid encodings
-
encodeMapSym
Encode the given symbol with all its mapping as a <mapsym> element to the stream.- Parameters:
encoder
- is the stream encodersym
- is the given symbol- Throws:
IOException
- for errors in the underlying stream
-