decompiler
1.0.0
|
The base datatype class for the decompiler. More...
#include <type.hh>
Public Member Functions | |
Datatype (const Datatype &op) | |
Construct the base data-type copying low-level properties of another. | |
Datatype (int4 s, type_metatype m) | |
Construct the base data-type providing size and meta-type. | |
Datatype (int4 s, type_metatype m, const string &n) | |
Construct the base data-type providing size, meta-type, and name. | |
virtual void | printRaw (ostream &s) const |
Print a description of the type to stream. More... | |
virtual Datatype * | getSubType (uintb off, uintb *newoff) const |
Recover component data-type one-level down. More... | |
virtual int4 | compare (const Datatype &op, int4 level) const |
Compare for functional equivalence. More... | |
virtual int4 | compareDependency (const Datatype &op) const |
Compare for storage in tree structure. More... | |
virtual Datatype * | clone (void) const =0 |
Clone the data-type. | |
virtual void | saveXml (ostream &s) const |
Serialize the data-type to XML. More... | |
int4 | typeOrderBool (const Datatype &op) const |
Order this with -op-, treating bool data-type as special. More... | |
void | saveXmlBasic (ostream &s) const |
Save basic data-type properties. More... | |
void | saveXmlRef (ostream &s) const |
Write an XML reference of this to stream. More... | |
Protected Types | |
enum | { coretype = 1, chartype = 2, enumtype = 4, poweroftwo = 8, utf16 = 16, utf32 = 32 } |
Boolean properties of datatypes. More... | |
Protected Member Functions | |
void | restoreXmlBasic (const Element *el) |
Recover basic data-type properties. More... | |
virtual void | restoreXml (const Element *el, TypeFactory &typegrp) |
Restore data-type from XML. More... | |
Static Protected Member Functions | |
static uint8 | hashName (const string &nm) |
Produce a data-type id by hashing the type name. More... | |
Protected Attributes | |
int4 | size |
Size (of variable holding a value of this type) | |
string | name |
Name of type. | |
type_metatype | metatype |
Meta-type - type disregarding size. | |
uint4 | flags |
Boolean properties of the type. | |
uint8 | id |
A unique id for the type (or 0 if an id is not assigned) | |
Friends | |
class | TypeFactory |
struct | DatatypeCompare |
The base datatype class for the decompiler.
Used for symbols, function prototypes, type propagation etc.
|
protected |
Boolean properties of datatypes.
|
virtual |
Compare for functional equivalence.
Compare this with another data-type. 0 (equality) means the data-types are functionally equivalent (even if names differ) Smaller types come earlier. More specific types come earlier.
op | is the data-type to compare with this |
level | is maximum level to descend when recursively comparing |
Reimplemented in TypeSpacebase, TypeCode, TypeStruct, TypeEnum, TypeArray, and TypePointer.
References compareDependency().
Referenced by TypePointer::compare(), DatatypeNameCompare::operator()(), and typeOrderBool().
|
virtual |
Compare for storage in tree structure.
Ordering of data-types for the main TypeFactory container. Comparison only goes down one-level in the component structure, before just comparing pointers.
op | is the data-type to compare with this |
Reimplemented in TypeSpacebase, TypeCode, TypeStruct, TypeEnum, TypeArray, and TypePointer.
References chartype, coretype, flags, metatype, and size.
Referenced by compare(), TypeFactory::findAdd(), DatatypeCompare::operator()(), and TypeFactory::restoreXmlTypeNoRef().
|
virtual |
Recover component data-type one-level down.
Given an offset into this data-type, return the component data-type at that offset. Also, pass back a "renormalized" offset suitable for recursize getSubType() calls: i.e. if the original offset hits the exact start of the sub-type, 0 is passed back. If there is no valid component data-type at the offset, return NULL and pass back the original offset
off | is the offset into this data-type |
newoff | is a pointer to the passed-back offset |
Reimplemented in TypeSpacebase, TypeStruct, and TypeArray.
Referenced by RuleStructOffset0::applyOp(), RulePtrsubUndo::applyOp(), TypeFactory::downChain(), SymbolEntry::getSizedType(), ActionInferTypes::propagateRef(), RangeHint::reconcile(), Funcdata::syncVarnodesWithSymbols(), and RulePtrArith::transformPtr().
|
staticprotected |
Produce a data-type id by hashing the type name.
If a type id is explicitly provided for a data-type, this routine is used to produce an id based on a hash of the name. IDs produced this way will have their sign-bit set to distinguish it from other IDs.
nm | is the type name to be hashed |
Referenced by TypeFactory::getBase(), TypeFactory::getTypeChar(), TypeFactory::getTypeCode(), TypeFactory::getTypeEnum(), TypeFactory::getTypeStruct(), TypeFactory::getTypeUnicode(), TypeFactory::getTypeVoid(), restoreXmlBasic(), TypeFactory::restoreXmlType(), TypeFactory::restoreXmlTypeNoRef(), and TypeFactory::setName().
|
virtual |
Print a description of the type to stream.
Print a raw description of the type to stream. Intended for debugging. Not intended to produce parsable C.
s | is the output stream |
Reimplemented in TypeCode, TypeArray, and TypePointer.
Referenced by MapState::addRange(), TypeFactory::findAdd(), HighVariable::printInfo(), Varnode::printInfo(), and TypePointer::printRaw().
|
protectedvirtual |
Restore data-type from XML.
Restore a Datatype object from an XML element
el | is the XML element |
typegrp | is the underlying TypeFactory that will hold the new object |
Reimplemented in TypeSpacebase, TypeCode, TypeStruct, TypeEnum, TypeArray, TypePointer, and TypeUnicode.
References restoreXmlBasic().
Referenced by TypeFactory::restoreXmlTypeNoRef().
|
protected |
Recover basic data-type properties.
Restore the basic properties (name,size,id) of a data-type from an XML element Properties are read from the attributes of the element
el | is the XML element |
References coretype, flags, Element::getAttributeValue(), hashName(), id, metatype, name, size, string2metatype(), and xml_readbool().
Referenced by restoreXml(), TypeUnicode::restoreXml(), and TypeFactory::restoreXmlTypeWithCodeFlags().
|
virtual |
Serialize the data-type to XML.
Write out a formal description of the data-type as an XML <type> tag. For composite data-types, the description goes down one level, describing the component types only by reference.
s | is the stream to write to |
Reimplemented in TypeSpacebase, TypeCode, TypeStruct, TypeEnum, TypeArray, TypePointer, TypeVoid, TypeUnicode, and TypeChar.
References saveXmlBasic().
Referenced by CPoolRecord::saveXml(), ProtoStoreInternal::saveXml(), FuncProto::saveXml(), TypeFactory::saveXmlCoreTypes(), and saveXmlRef().
void Datatype::saveXmlBasic | ( | ostream & | s | ) | const |
Save basic data-type properties.
Write out basic data-type properties (name,size,id) as XML attributes. This routine presumes the initial tag is already written to the stream.
s | is the stream to write to |
References a_v(), a_v_b(), a_v_i(), coretype, flags, metatype, metatype2string(), name, and size.
Referenced by saveXml(), TypeChar::saveXml(), TypeUnicode::saveXml(), TypePointer::saveXml(), and TypeSpacebase::saveXml().
void Datatype::saveXmlRef | ( | ostream & | s | ) | const |
|
inline |
Order this with -op-, treating bool data-type as special.
Order data-types, with special handling of the bool data-type. Data-types are compared using the normal ordering, but bool is ordered after all other data-types. A return value of 0 indicates the data-types are the same, -1 indicates that this is prefered (ordered earlier), and 1 indicates this is ordered later.
op | is the other data-type to compare with this |