decompiler  1.0.0
Public Member Functions | Private Member Functions | Private Attributes | List of all members
FunctionSymbol Class Reference

A Symbol representing an executable function. More...

#include <database.hh>

Inheritance diagram for FunctionSymbol:
Symbol

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.
 
FuncdatagetFunction (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...
 
const string & getName (void) const
 Get the local name of the symbol.
 
DatatypegetType (void) const
 Get the data-type.
 
uint8 getId (void) const
 Get a unique id for the symbol.
 
uint4 getFlags (void) const
 Get the boolean properties of the Symbol.
 
uint4 getDisplayFormat (void) const
 Get the format to display the Symbol in.
 
int2 getCategory (void) const
 Get the Symbol category.
 
uint2 getCategoryIndex (void) const
 Get the position of the Symbol within its category.
 
bool isTypeLocked (void) const
 Is the Symbol type-locked.
 
bool isNameLocked (void) const
 Is the Symbol name-locked.
 
bool isSizeTypeLocked (void) const
 Is the Symbol size type-locked.
 
bool isThisPointer (void) const
 Is this the "this" pointer.
 
bool isIndirectStorage (void) const
 Is storage really a pointer to the true Symbol.
 
bool isHiddenReturn (void) const
 Is this a reference to the function return value.
 
bool isNameUndefined (void) const
 Does this have an undefined name. More...
 
bool isMultiEntry (void) const
 Does this have more than one entire mapping.
 
bool hasMergeProblems (void) const
 Were some SymbolEntrys not merged.
 
void setMergeProblems (void)
 Mark that some SymbolEntrys could not be merged.
 
bool isIsolated (void) const
 Return true if this is isolated from speculative merging.
 
void setIsolated (bool val)
 Set whether this Symbol should be speculatively merged. More...
 
ScopegetScope (void) const
 Get the scope owning this Symbol.
 
SymbolEntrygetFirstWholeMap (void) const
 Get the first entire mapping of the symbol. More...
 
SymbolEntrygetMapEntry (const Address &addr) const
 Get first mapping of the symbol that contains the given Address. More...
 
int4 numEntries (void) const
 Return the number of SymbolEntrys.
 
SymbolEntrygetMapEntry (int4 i) const
 Return the i-th SymbolEntry for this Symbol.
 
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...
 

Private Member Functions

void buildType (void)
 Build the data-type associated with this Symbol.
 

Private Attributes

Funcdatafd
 The underlying meta-data object for the function.
 
int4 consumeSize
 Minimum number of bytes to consume with the start address.
 

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
virtual ~Symbol (void)
 Destructor.
 
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
Scopescope
 The scope that owns this symbol.
 
string name
 The local name of the symbol.
 
Datatypetype
 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 ScopedepthScope
 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.
 

Detailed Description

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.

Constructor & Destructor Documentation

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

Parameters
scis the Scope that will contain the new Symbol
nmis the name of the new Symbol
sizeis the number of bytes a SymbolEntry should consume

References buildType(), consumeSize, fd, and Symbol::name.

Member Function Documentation

virtual int4 FunctionSymbol::getBytesConsumed ( void  ) const
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.

Returns
the number of bytes in a default SymbolEntry

Reimplemented from Symbol.

void FunctionSymbol::restoreXml ( const Element el)
virtual
void FunctionSymbol::saveXml ( ostream &  s) const
virtual

Save this Symbol to an XML stream.

Parameters
sis the output stream

Reimplemented from Symbol.

References a_v(), a_v_u(), fd, Symbol::name, Funcdata::saveXml(), and Symbol::symbolId.


The documentation for this class was generated from the following files: