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

An implementation of ConstantPool using a Ghidra client as the backing storage. More...

#include <cpool_ghidra.hh>

Inheritance diagram for ConstantPoolGhidra:
ConstantPool

Public Member Functions

 ConstantPoolGhidra (ArchitectureGhidra *g)
 Constructor.
 
virtual const CPoolRecordgetRecord (const vector< uintb > &refs) const
 Retrieve a constant pool record (CPoolRecord) given a reference to it. More...
 
virtual bool empty (void) const
 Is the container empty of records.
 
virtual void clear (void)
 Release any (local) resources.
 
virtual void saveXml (ostream &s) const
 Save all records in this container to an XML stream. More...
 
virtual void restoreXml (const Element *el, TypeFactory &typegrp)
 Restore constant pool records from an XML stream. More...
 
- Public Member Functions inherited from ConstantPool
virtual ~ConstantPool ()
 Destructor.
 
void putRecord (const vector< uintb > &refs, uint4 tag, const string &tok, Datatype *ct)
 A a new constant pool record to this database. More...
 
const CPoolRecordrestoreXmlRecord (const vector< uintb > &refs, const Element *el, TypeFactory &typegrp)
 Restore a CPoolRecord given a reference and an XML stream. More...
 

Private Member Functions

virtual CPoolRecordcreateRecord (const vector< uintb > &refs)
 Allocate a new CPoolRecord object, given a reference to it. More...
 

Private Attributes

ArchitectureGhidraghidra
 The connection with the Ghidra client.
 
ConstantPoolInternal cache
 The local cache of previouly queried CPoolRecord objects.
 

Detailed Description

An implementation of ConstantPool using a Ghidra client as the backing storage.

The actual CPoolRecord objects are cached locally, but new queries are placed with the Ghidra client hosting the program currently being decompiled. The queries and response records are sent via XML. The saveXml() and restoreXml() methods are disabled. The clear() method only releases the local cache, no records on the Ghidra client are affected.

Member Function Documentation

CPoolRecord * ConstantPoolGhidra::createRecord ( const vector< uintb > &  refs)
privatevirtual

Allocate a new CPoolRecord object, given a reference to it.

The object will still need to be initialized but is already associated with the reference. Any issue with allocation (like a dupicate reference) causes an exception.

Parameters
refsis the reference of 1 or more identifying integers
Returns
the new CPoolRecord

Implements ConstantPool.

const CPoolRecord * ConstantPoolGhidra::getRecord ( const vector< uintb > &  refs) const
virtual

Retrieve a constant pool record (CPoolRecord) given a reference to it.

Parameters
refsis the reference (made up of 1 or more identifying integers)
Returns
the matching CPoolRecord or NULL if none matches the reference

Implements ConstantPool.

References cache, LowlevelError::explain, XmlError::explain, ArchitectureGhidra::getCPoolRef(), ConstantPoolInternal::getRecord(), Document::getRoot(), ghidra, ConstantPool::restoreXmlRecord(), and Architecture::types.

void ConstantPoolGhidra::restoreXml ( const Element el,
TypeFactory typegrp 
)
virtual

Restore constant pool records from an XML stream.

(If supported) The container is populated with CPooLRecords initialized from a <constantpool> XML tag.

Parameters
elis the XML element
typegrpis the TypeFactory used to resolve data-type references in the XML

Implements ConstantPool.

Referenced by clear().

void ConstantPoolGhidra::saveXml ( ostream &  s) const
virtual

Save all records in this container to an XML stream.

(If supported) An <constantpool> element is written containing <cpoolrec> child elements for each CPoolRecord in the container.

Parameters
sis the output stream

Implements ConstantPool.

Referenced by clear().


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