Ghidra Decompiler Analysis Engine
|
A Symbol representing an executable function. More...
#include <database.hh>
Public Member Functions | |
FunctionSymbol (Scope *sc, const string &nm, int4 size) | |
Construct given the name. More... | |
FunctionSymbol (Scope *sc, int4 size) | |
Constructor for use with restoreXml. | |
Funcdata * | getFunction (void) |
Get the underlying Funcdata object. | |
virtual void | saveXml (ostream &s) const |
Save this Symbol to an XML stream. More... | |
virtual void | restoreXml (const Element *el) |
Restore this Symbol from an XML stream. More... | |
virtual int4 | getBytesConsumed (void) const |
Get number of bytes consumed within the address->symbol map. More... | |
Public Member Functions inherited from Symbol | |
Symbol (Scope *sc, const string &nm, Datatype *ct) | |
Construct given a name and data-type. More... | |
Symbol (Scope *sc) | |
Construct for use with restoreXml() More... | |
bool | isNameUndefined (void) const |
Does this have an undefined name. More... | |
void | setIsolated (bool val) |
Set whether this Symbol should be speculatively merged. More... | |
SymbolEntry * | getFirstWholeMap (void) const |
Get the first entire mapping of the symbol. More... | |
SymbolEntry * | getMapEntry (const Address &addr) const |
Get first mapping of the symbol that contains the given Address. More... | |
int4 | getMapEntryPosition (const SymbolEntry *entry) const |
Position of given SymbolEntry within this multi-entry Symbol. More... | |
int4 | getResolutionDepth (const Scope *useScope) const |
Get number of scope names needed to resolve this symbol. More... | |
void | saveXmlHeader (ostream &s) const |
Save basic Symbol properties as XML attributes. More... | |
void | restoreXmlHeader (const Element *el) |
Restore basic Symbol properties from XML. More... | |
void | saveXmlBody (ostream &s) const |
Save details of the Symbol to XML. More... | |
void | restoreXmlBody (List::const_iterator iter) |
Restore details of the Symbol from XML. More... | |
Additional Inherited Members | |
Public Types inherited from Symbol | |
enum | { force_hex = 1, force_dec = 2, force_oct = 3, force_bin = 4, force_char = 5, size_typelock = 8, isolate = 16, merge_problems = 32, is_this_ptr = 64 } |
Possible display (dispflag) properties for a Symbol. More... | |
Static Public Attributes inherited from Symbol | |
static uint8 | ID_BASE = 0x4000000000000000L |
Base of internal ID's. | |
Protected Member Functions inherited from Symbol | |
void | setDisplayFormat (uint4 val) |
Set the display format for this Symbol. More... | |
void | checkSizeTypeLock (void) |
Calculate if size_typelock property is on. More... | |
void | setThisPointer (bool val) |
Toggle whether this is the "this" pointer for a class method. More... | |
Protected Attributes inherited from Symbol | |
Scope * | scope |
The scope that owns this symbol. | |
string | name |
The local name of the symbol. | |
Datatype * | type |
The symbol's data-type. | |
uint4 | nameDedup |
id to distinguish symbols with the same name | |
uint4 | flags |
Varnode-like properties of the symbol. | |
uint4 | dispflags |
Flags affecting the display of this symbol. | |
int2 | category |
Special category (-1==none 0=parameter 1=equate) | |
uint2 | catindex |
Index within category. | |
uint8 | symbolId |
Unique id, 0=unassigned. | |
vector< list< SymbolEntry >::iterator > | mapentry |
List of storage locations labeled with this Symbol. | |
const Scope * | depthScope |
Scope associated with current depth resolution. | |
int4 | depthResolution |
Number of namespace elements required to resolve symbol in current scope. | |
uint4 | wholeCount |
Number of SymbolEntries that map to the whole Symbol. | |
A Symbol representing an executable function.
This Symbol owns the Funcdata object for the function it represents. The formal Symbol is thus associated with all the meta-data about the function.
FunctionSymbol::FunctionSymbol | ( | Scope * | sc, |
const string & | nm, | ||
int4 | size | ||
) |
Construct given the name.
Build a function shell, made up of just the name of the function and a placeholder data-type, without the underlying Funcdata object. A SymbolEntry for a function has a small size starting at the entry address, in order to deal with non-contiguous functions. We need a size (slightly) larger than 1 to accommodate pointer constants that encode extra information in the lower bit(s) of an otherwise aligned pointer. If the encoding is not initially detected, it is interpreted as a straight address that comes up 1 (or more) bytes off of the start of the function In order to detect this, we need to lay down a slightly larger size than 1
sc | is the Scope that will contain the new Symbol |
nm | is the name of the new Symbol |
size | is the number of bytes a SymbolEntry should consume |
|
inlinevirtual |
Get number of bytes consumed within the address->symbol map.
Get the number of bytes consumed by a SymbolEntry representing this Symbol. By default, this is the number of bytes consumed by the Symbol's data-type. This gives the amount of leeway a search has when the address queried does not match the exact address of the Symbol. With functions, the bytes consumed by a SymbolEntry may not match the data-type size.
Reimplemented from Symbol.
|
virtual |
|
virtual |