decompiler
1.0.0
|
A global namespace Scope. More...
#include <database_ghidra.hh>
Public Member Functions | |
ScopeGhidraNamespace (const string &nm, Architecture *g) | |
Constructor. | |
Public Member Functions inherited from ScopeInternal | |
ScopeInternal (const string &nm, Architecture *g) | |
Construct the Scope. More... | |
virtual void | clear (void) |
Clear all symbols from this scope. | |
virtual void | categorySanity (void) |
Make sure Symbol categories are sane. More... | |
virtual void | clearCategory (int4 cat) |
Clear all symbols of the given category from this scope. | |
virtual void | clearUnlocked (void) |
Clear all unlocked symbols from this scope. | |
virtual void | clearUnlockedCategory (int4 cat) |
Clear unlocked symbols of the given category from this scope. | |
virtual MapIterator | begin (void) const |
Beginning iterator to mapped SymbolEntrys. | |
virtual MapIterator | end (void) const |
Ending iterator to mapped SymbolEntrys. | |
virtual list< SymbolEntry >::const_iterator | beginDynamic (void) const |
Beginning iterator to dynamic SymbolEntrys. | |
virtual list< SymbolEntry >::const_iterator | endDynamic (void) const |
Ending iterator to dynamic SymbolEntrys. | |
virtual list< SymbolEntry >::iterator | beginDynamic (void) |
Beginning iterator to dynamic SymbolEntrys. | |
virtual list< SymbolEntry >::iterator | endDynamic (void) |
Ending iterator to dynamic SymbolEntrys. | |
virtual void | removeSymbol (Symbol *symbol) |
Remove the given Symbol from this Scope. | |
virtual void | renameSymbol (Symbol *sym, const string &newname) |
Rename a Symbol within this Scope. | |
virtual void | retypeSymbol (Symbol *sym, Datatype *ct) |
Change the data-type of a Symbol within this Scope. More... | |
virtual void | setAttribute (Symbol *sym, uint4 attr) |
Set boolean Varnode properties on a Symbol. | |
virtual void | clearAttribute (Symbol *sym, uint4 attr) |
Clear boolean Varnode properties on a Symbol. | |
virtual void | setDisplayFormat (Symbol *sym, uint4 attr) |
Set the display format for a Symbol. | |
virtual SymbolEntry * | findAddr (const Address &addr, const Address &usepoint) const |
Find a Symbol at a given address and usepoint. More... | |
virtual SymbolEntry * | findContainer (const Address &addr, int4 size, const Address &usepoint) const |
Find the smallest Symbol containing the given memory range. More... | |
virtual SymbolEntry * | findClosestFit (const Address &addr, int4 size, const Address &usepoint) const |
Find Symbol which is the closest fit to the given memory range. More... | |
virtual Funcdata * | findFunction (const Address &addr) const |
Find the function starting at the given address. More... | |
virtual ExternRefSymbol * | findExternalRef (const Address &addr) const |
Find an external reference at the given address. More... | |
virtual LabSymbol * | findCodeLabel (const Address &addr) const |
Find a label Symbol at the given address. More... | |
virtual SymbolEntry * | findOverlap (const Address &addr, int4 size) const |
Find first Symbol overlapping the given memory range. More... | |
virtual SymbolEntry * | findBefore (const Address &addr) const |
Find first Symbol before (but not containing) a given address. More... | |
virtual SymbolEntry * | findAfter (const Address &addr) const |
Find first Symbol after (but not containing) a given address. More... | |
virtual void | findByName (const string &name, vector< Symbol * > &res) const |
Find a Symbol by name within this Scope. More... | |
virtual Funcdata * | resolveExternalRefFunction (ExternRefSymbol *sym) const |
Convert an external reference to the referenced function. More... | |
virtual string | buildVariableName (const Address &addr, const Address &pc, Datatype *ct, int4 &index, uint4 flags) const |
Given an address and data-type, build a suitable generic symbol name. More... | |
virtual string | buildUndefinedName (void) const |
Build a formal undefined name, used internally when a Symbol is not given a name. More... | |
virtual string | makeNameUnique (const string &nm) const |
Produce a version of the given symbol name that won't collide with other names in this Scope. More... | |
virtual void | saveXml (ostream &s) const |
Write out this as a <scope> XML tag. | |
virtual void | restoreXml (const Element *el) |
Restore this Scope from a <scope> XML tag. | |
virtual void | printEntries (ostream &s) const |
Dump a description of all SymbolEntry objects to a stream. | |
virtual int4 | getCategorySize (int4 cat) const |
Get the number of Symbols in the given category. More... | |
virtual Symbol * | getCategorySymbol (int4 cat, int4 ind) const |
Retrieve a Symbol by index within a specific category. More... | |
virtual void | setCategory (Symbol *sym, int4 cat, int4 ind) |
Set the category and index for the given Symbol. More... | |
Public Member Functions inherited from Scope | |
Scope (const string &nm, Architecture *g) | |
Construct an empty scope, given a name and Architecture. | |
virtual | ~Scope (void) |
Destructor. | |
virtual bool | inScope (const Address &addr, int4 size, const Address &usepoint) const |
Query if the given range is owned by this Scope. More... | |
virtual SymbolEntry * | addSymbol (const string &name, Datatype *ct, const Address &addr, const Address &usepoint) |
Add a new Symbol to this Scope, given a name, data-type, and a single mapping. More... | |
const string & | getName (void) const |
Get the name of the Scope. | |
bool | isGlobal (void) const |
Return true if this scope is global. | |
void | queryByName (const string &name, vector< Symbol * > &res) const |
Look-up symbols by name. More... | |
Funcdata * | queryFunction (const string &name) const |
Look-up a function by name. More... | |
SymbolEntry * | queryByAddr (const Address &addr, const Address &usepoint) const |
Get Symbol with matching address. More... | |
SymbolEntry * | queryContainer (const Address &addr, int4 size, const Address &usepoint) const |
Find the smallest containing Symbol. More... | |
SymbolEntry * | queryProperties (const Address &addr, int4 size, const Address &usepoint, uint4 &flags) const |
Find a Symbol or properties at the given address. More... | |
Funcdata * | queryFunction (const Address &addr) const |
Look-up a function by address. More... | |
Funcdata * | queryExternalRefFunction (const Address &addr) const |
Look-up a function thru an external reference. More... | |
LabSymbol * | queryCodeLabel (const Address &addr) const |
Look-up a code label by address. More... | |
Scope * | resolveScope (const string &name) const |
Find a child Scope of this. More... | |
Scope * | discoverScope (const Address &addr, int4 sz, const Address &usepoint) |
Find the owning Scope of a given memory range. More... | |
ScopeMap::const_iterator | childrenBegin () const |
Beginning iterator of child scopes. | |
ScopeMap::const_iterator | childrenEnd () const |
Ending iterator of child scopes. | |
void | saveXmlRecursive (ostream &s, bool onlyGlobal) const |
Save all contained scopes as an XML stream. More... | |
void | overrideSizeLockType (Symbol *sym, Datatype *ct) |
Change the data-type of a Symbol that is sizelocked. More... | |
void | resetSizeLockType (Symbol *sym) |
Clear a Symbol's size-locked data-type. More... | |
bool | isSubScope (const Scope *scp) const |
Is this a sub-scope of the given Scope. More... | |
string | getFullName (void) const |
Get the full name of this Scope. | |
void | getNameSegments (vector< string > &vec) const |
Get the fullname of this in segments. More... | |
Architecture * | getArch (void) const |
Get the Architecture associated with this. | |
Scope * | getParent (void) const |
Get the parent Scope (or NULL if this is the global Scope) | |
Symbol * | addSymbol (const string &name, Datatype *ct) |
Add a new Symbol without mapping it to an address. More... | |
SymbolEntry * | addMapPoint (Symbol *sym, const Address &addr, const Address &usepoint) |
Map a Symbol to a specific address. More... | |
Symbol * | addMapSym (const Element *el) |
Add a mapped Symbol from a <mapsym> XML tag. More... | |
FunctionSymbol * | addFunction (const Address &addr, const string &nm) |
Create a function Symbol at the given address in this Scope. More... | |
ExternRefSymbol * | addExternalRef (const Address &addr, const Address &refaddr, const string &nm) |
LabSymbol * | addCodeLabel (const Address &addr, const string &nm) |
Create a code label at the given address in this Scope. More... | |
Symbol * | addDynamicSymbol (const string &nm, Datatype *ct, const Address &caddr, uint8 hash) |
Create a dynamically mapped Symbol attached to a specific data-flow. More... | |
bool | isReadOnly (const Address &addr, int4 size, const Address &usepoint) const |
Is the given memory range marked as read-only. More... | |
void | printBounds (ostream &s) const |
Print a description of this Scope's owned memory ranges. | |
Private Member Functions | |
virtual SymbolEntry * | addMapInternal (Symbol *sym, uint4 exfl, const Address &addr, int4 off, int4 sz, const RangeList &uselim) |
Create a new SymbolEntry for a Symbol given a memory range. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from ScopeInternal | |
static void | savePathXml (ostream &s, const vector< string > &vec) |
Save a path with <val> tags. More... | |
static void | restorePathXml (vector< string > &vec, const Element *el) |
Restore path from <val> tags. More... | |
Protected Member Functions inherited from ScopeInternal | |
virtual void | addSymbolInternal (Symbol *sym) |
Put a Symbol into the name map. More... | |
virtual SymbolEntry * | addDynamicMapInternal (Symbol *sym, uint4 exfl, uint8 hash, int4 off, int4 sz, const RangeList &uselim) |
Create a new SymbolEntry for a Symbol given a dynamic hash. More... | |
Protected Member Functions inherited from Scope | |
const RangeList & | getRangeTree (void) const |
Access the address ranges owned by this Scope. | |
virtual void | restrictScope (Funcdata *f) |
Convert this to a local Scope. More... | |
virtual void | addRange (AddrSpace *spc, uintb first, uintb last) |
Add a memory range to the ownership of this Scope. More... | |
virtual void | removeRange (AddrSpace *spc, uintb first, uintb last) |
Remove a memory range from the ownership of this Scope. More... | |
SymbolEntry * | addMap (const SymbolEntry &entry) |
Integrate a SymbolEntry into the range maps. More... | |
Static Protected Member Functions inherited from Scope | |
static const Scope * | stackAddr (const Scope *scope1, const Scope *scope2, const Address &addr, const Address &usepoint, SymbolEntry **addrmatch) |
Query for Symbols starting at a given address, which match a given usepoint. More... | |
static const Scope * | stackContainer (const Scope *scope1, const Scope *scope2, const Address &addr, int4 size, const Address &usepoint, SymbolEntry **addrmatch) |
static const Scope * | stackClosestFit (const Scope *scope1, const Scope *scope2, const Address &addr, int4 size, const Address &usepoint, SymbolEntry **addrmatch) |
static const Scope * | stackFunction (const Scope *scope1, const Scope *scope2, const Address &addr, Funcdata **addrmatch) |
static const Scope * | stackExternalRef (const Scope *scope1, const Scope *scope2, const Address &addr, ExternRefSymbol **addrmatch) |
static const Scope * | stackCodeLabel (const Scope *scope1, const Scope *scope2, const Address &addr, LabSymbol **addrmatch) |
Protected Attributes inherited from ScopeInternal | |
SymbolNameTree | nametree |
The set of Symbol objects, sorted by name. | |
vector< EntryMap * > | maptable |
Rangemaps of SymbolEntry, one map for each address space. | |
vector< vector< Symbol * > > | category |
References to Symbol objects organized by category. | |
list< SymbolEntry > | dynamicentry |
Dynamic symbol entries. | |
Protected Attributes inherited from Scope | |
Architecture * | glb |
Architecture of this scope. | |
string | name |
Name of this scope. | |
Funcdata * | fd |
(If non-null) the function which this is the local Scope for | |
uint4 | dedupId |
Id to dedup scopes with same name (when allowed) | |
A global namespace Scope.
The only difference between this and a ScopeInternal is that this scope builds up its ownership range with the symbols that are placed in it. This allows Database::mapScope() to recover the namespace Scope for symbols that have been placed in it. Queries for namespace symbols that haven't been cached yet percolate up to the global scope, which must be a ScopeGhidra. This will query the Ghidra client on behalf of the namespace and register any new symbols with this Scope.
|
privatevirtual |
Create a new SymbolEntry for a Symbol given a memory range.
The SymbolEntry is specified in terms of a memory range and usepoint
sym | is the given Symbol being mapped |
exfl | are any boolean Varnode properties specific to the memory range |
addr | is the starting address of the given memory range |
off | is the byte offset of the new SymbolEntry (relative to the whole Symbol) |
sz | is the number of bytes in the range |
uselim | is the given usepoint (which may be invalid) |
Reimplemented from ScopeInternal.
References ScopeInternal::addMapInternal(), Database::addRange(), SymbolEntry::getAddr(), SymbolEntry::getFirst(), SymbolEntry::getLast(), Address::getSpace(), Scope::glb, and Architecture::symboltab.