decompiler
1.0.0
|
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. More... | |
Public Member Functions inherited from ghidra::ScopeInternal | |
ScopeInternal (uint8 id, const string &nm, Architecture *g) | |
Construct the Scope. More... | |
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. 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 void | adjustCaches (void) |
Let scopes internally adjust any caches. More... | |
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. 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 void | findByName (const string &nm, 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 | 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. 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... | |
void | assignDefaultNames (int4 &base) |
Assign a default name (via buildVariableName) to any unnamed symbol. More... | |
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. More... | |
virtual void | decodeWrappingAttributes (Decoder &decoder) |
Restore attributes for this Scope from wrapping element. | |
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. More... | |
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. More... | |
Funcdata * | queryFunction (const string &nm) 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 &nm, bool strategy) 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 | encodeRecursive (Encoder &encoder, bool onlyGlobal) const |
Encode all contained scopes to a 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... | |
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. More... | |
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. More... | |
const Scope * | findDistinguishingScope (const Scope *op2) const |
Find first ancestor of this not shared by given scope. 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 &nm, 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 (Decoder &decoder) |
Parse a mapped Symbol from a <mapsym> element. 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... | |
Symbol * | addEquateSymbol (const string &nm, uint4 format, uintb value, const Address &addr, uint8 hash) |
Create a symbol that forces display conversion on a constant. More... | |
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. More... | |
string | buildDefaultName (Symbol *sym, int4 &base, Varnode *vn) const |
Create a default name for the given Symbol. 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. | |
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. More... | |
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. 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 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. 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 (SymbolEntry &entry) |
Integrate a SymbolEntry into the range maps. More... | |
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. 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 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::ArchitectureGhidra::isDynamicSymbolName(), and ghidra::Scope::uniqueId.