|
Ghidra 11.4.2
Ghidra internal decompiler documentation.
|
A global namespace Scope. More...
#include <database_ghidra.hh>
Public Member Functions | |
| ScopeGhidraNamespace (uint8 id, const string &nm, ArchitectureGhidra *g) | |
| Constructor. | |
| virtual bool | isNameUsed (const string &nm, const Scope *op2) const |
| Check if the given name is occurs within the given scope path. | |
Public Member Functions inherited from ghidra::ScopeInternal | |
| ScopeInternal (uint8 id, const string &nm, Architecture *g) | |
| Construct the Scope. | |
| ScopeInternal (uint8 id, const string &nm, Architecture *g, Scope *own) | |
| Construct as a cache. | |
| virtual void | clear (void) |
| Clear all symbols from this scope. | |
| virtual void | categorySanity (void) |
| Make sure Symbol categories are sane. | |
| 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 void | adjustCaches (void) |
| Let scopes internally adjust any caches. | |
| 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 | removeSymbolMappings (Symbol *symbol) |
| Remove all SymbolEntrys from the given Symbol. | |
| 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. | |
| 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. | |
| virtual SymbolEntry * | findContainer (const Address &addr, int4 size, const Address &usepoint) const |
| Find the smallest Symbol containing the given memory range. | |
| virtual SymbolEntry * | findClosestFit (const Address &addr, int4 size, const Address &usepoint) const |
| Find Symbol which is the closest fit to the given memory range. | |
| virtual Funcdata * | findFunction (const Address &addr) const |
| Find the function starting at the given address. | |
| virtual ExternRefSymbol * | findExternalRef (const Address &addr) const |
| Find an external reference at the given address. | |
| virtual LabSymbol * | findCodeLabel (const Address &addr) const |
| Find a label Symbol at the given address. | |
| virtual SymbolEntry * | findOverlap (const Address &addr, int4 size) const |
| Find first Symbol overlapping the given memory range. | |
| virtual void | findByName (const string &nm, vector< Symbol * > &res) const |
| Find a Symbol by name within this Scope. | |
| virtual Funcdata * | resolveExternalRefFunction (ExternRefSymbol *sym) const |
| Convert an external reference to the referenced function. | |
| 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. | |
| virtual string | buildUndefinedName (void) const |
| Build a formal undefined name, used internally when a Symbol is not given a name. | |
| 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. | |
| virtual void | encode (Encoder &encoder) const |
| Encode this as a <scope> element. | |
| virtual void | decode (Decoder &decoder) |
| Decode this Scope from a <scope> element. | |
| 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. | |
| virtual Symbol * | getCategorySymbol (int4 cat, int4 ind) const |
| Retrieve a Symbol by index within a specific category. | |
| virtual void | setCategory (Symbol *sym, int4 cat, int4 ind) |
| Set the category and index for the given Symbol. | |
| void | assignDefaultNames (int4 &base) |
| Assign a default name (via buildVariableName) to any unnamed symbol. | |
| set< Symbol * >::const_iterator | beginMultiEntry (void) const |
| Start of symbols with more than one entry. | |
| set< Symbol * >::const_iterator | endMultiEntry (void) const |
| End of symbols with more than one entry. | |
Public Member Functions inherited from ghidra::Scope | |
| Scope (uint8 id, const string &nm, Architecture *g, Scope *own) | |
| 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. | |
| virtual void | decodeWrappingAttributes (Decoder &decoder) |
| Restore attributes for this from a parent element that is not a Scope. | |
| virtual SymbolEntry * | addSymbol (const string &nm, Datatype *ct, const Address &addr, const Address &usepoint) |
| Add a new Symbol to this Scope, given a name, data-type, and a single mapping. | |
| const string & | getName (void) const |
| Get the name of the Scope. | |
| const string & | getDisplayName (void) const |
| Get name displayed in output. | |
| uint8 | getId (void) const |
| Get the globally unique id. | |
| bool | isGlobal (void) const |
| Return true if this scope is global. | |
| void | queryByName (const string &nm, vector< Symbol * > &res) const |
| Look-up symbols by name. | |
| Funcdata * | queryFunction (const string &nm) const |
| Look-up a function by name. | |
| SymbolEntry * | queryByAddr (const Address &addr, const Address &usepoint) const |
| Get Symbol with matching address. | |
| SymbolEntry * | queryContainer (const Address &addr, int4 size, const Address &usepoint) const |
| Find the smallest containing Symbol. | |
| SymbolEntry * | queryProperties (const Address &addr, int4 size, const Address &usepoint, uint4 &flags) const |
| Find a Symbol or properties at the given address. | |
| Funcdata * | queryFunction (const Address &addr) const |
| Look-up a function by address. | |
| Funcdata * | queryExternalRefFunction (const Address &addr) const |
| Look-up a function thru an external reference. | |
| LabSymbol * | queryCodeLabel (const Address &addr) const |
| Look-up a code label by address. | |
| Scope * | resolveScope (const string &nm, bool strategy) const |
| Find a child Scope of this. | |
| Scope * | discoverScope (const Address &addr, int4 sz, const Address &usepoint) |
| Find the owning Scope of a given memory range. | |
| ScopeMap::const_iterator | childrenBegin () const |
| Beginning iterator of child scopes. | |
| ScopeMap::const_iterator | childrenEnd () const |
| Ending iterator of child scopes. | |
| void | encodeRecursive (Encoder &encoder, bool onlyGlobal) const |
| Encode all contained scopes to a stream. | |
| void | overrideSizeLockType (Symbol *sym, Datatype *ct) |
| Change the data-type of a Symbol that is sizelocked. | |
| void | resetSizeLockType (Symbol *sym) |
| Clear a Symbol's size-locked data-type. | |
| void | setThisPointer (Symbol *sym, bool val) |
| Toggle the given Symbol as the "this" pointer. | |
| bool | isSubScope (const Scope *scp) const |
| Is this a sub-scope of the given Scope. | |
| string | getFullName (void) const |
| Get the full name of this Scope. | |
| void | getScopePath (vector< const Scope * > &vec) const |
| Get the ordered list of scopes up to this. | |
| const Scope * | findDistinguishingScope (const Scope *op2) const |
| Find first ancestor of this not shared by given scope. | |
| 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 &nm, Datatype *ct) |
| Add a new Symbol without mapping it to an address. | |
| SymbolEntry * | addMapPoint (Symbol *sym, const Address &addr, const Address &usepoint) |
| Map a Symbol to a specific address. | |
| Symbol * | addMapSym (Decoder &decoder) |
| Parse a mapped Symbol from a <mapsym> element. | |
| FunctionSymbol * | addFunction (const Address &addr, const string &nm) |
| Create a function Symbol at the given address in this Scope. | |
| 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. | |
| Symbol * | addDynamicSymbol (const string &nm, Datatype *ct, const Address &caddr, uint8 hash) |
| Create a dynamically mapped Symbol attached to a specific data-flow. | |
| Symbol * | addEquateSymbol (const string &nm, uint4 format, uintb value, const Address &addr, uint8 hash) |
| Create a symbol that forces display conversion on a constant. | |
| Symbol * | addUnionFacetSymbol (const string &nm, Datatype *dt, int4 fieldNum, const Address &addr, uint8 hash) |
| Create a symbol forcing a field interpretation for a specific access to a variable with union data-type. | |
| string | buildDefaultName (Symbol *sym, int4 &base, Varnode *vn) const |
| Create a default name for the given Symbol. | |
| bool | isReadOnly (const Address &addr, int4 size, const Address &usepoint) const |
| Is the given memory range marked as read-only. | |
| void | printBounds (ostream &s) const |
| Print a description of this Scope's owned memory ranges. | |
Protected 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. | |
Protected Member Functions inherited from ghidra::ScopeInternal | |
| virtual Scope * | buildSubScope (uint8 id, const string &nm) |
| Build an unattached Scope to be associated as a sub-scope of this. | |
| virtual void | addSymbolInternal (Symbol *sym) |
| Put a Symbol into the name map. | |
| 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. | |
Protected Member Functions inherited from ghidra::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. | |
| virtual void | addRange (AddrSpace *spc, uintb first, uintb last) |
| Add a memory range to the ownership of this Scope. | |
| virtual void | removeRange (AddrSpace *spc, uintb first, uintb last) |
| Remove a memory range from the ownership of this Scope. | |
| SymbolEntry * | addMap (SymbolEntry &entry) |
| Integrate a SymbolEntry into the range maps. | |
| void | setSymbolId (Symbol *sym, uint8 id) const |
| Adjust the id associated with a symbol. | |
| void | setDisplayName (const string &nm) |
| Change name displayed in output. | |
Private Attributes | |
| ArchitectureGhidra * | ghidra |
| Connection to the Ghidra client. | |
Friends | |
| class | ScopeGhidra |
Additional Inherited Members | |
Static Protected Member Functions inherited from ghidra::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. | |
| 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 ghidra::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. | |
| SymbolNameTree | multiEntrySet |
| Set of symbols with multiple entries. | |
| uint8 | nextUniqueId |
| Next available symbol id. | |
Protected Attributes inherited from ghidra::Scope | |
| Architecture * | glb |
| Architecture of this scope. | |
| string | name |
| Name of this scope. | |
| string | displayName |
| Name to display in output. | |
| Funcdata * | fd |
| (If non-null) the function which this is the local Scope for | |
| uint8 | uniqueId |
| Unique id for the scope, for deduping scope names, assigning symbol ids. | |
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.
|
protectedvirtual |
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 ghidra::ScopeInternal.
References ghidra::ScopeInternal::addMapInternal(), ghidra::Database::addRange(), ghidra::SymbolEntry::getAddr(), ghidra::SymbolEntry::getFirst(), ghidra::SymbolEntry::getLast(), ghidra::Address::getSpace(), ghidra::Scope::glb, and ghidra::Architecture::symboltab.
|
virtual |
Check if the given name is occurs within the given scope path.
Test for the presence of a symbol with the given name in either this scope or an ancestor scope up to but not including the given terminating scope. If the name is used true is returned.
| nm | is the given name to test |
| op2 | is the terminating ancestor scope (or null) |
Reimplemented from ghidra::ScopeInternal.
References ghidra::Scope::getId(), ghidra, ghidra::ArchitectureGhidra::isDynamicSymbolName(), ghidra::ArchitectureGhidra::isNameUsed(), and ghidra::Scope::uniqueId.