| 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 | ~Datatype (void) | 
| Destructor. | |
| bool | isCoreType (void) const | 
| Is this a core data-type. | |
| bool | isCharPrint (void) const | 
| Does this print as a 'char'. | |
| bool | isEnumType (void) const | 
| Is this an enumerated type. | |
| bool | isPowerOfTwo (void) const | 
| Is this a flag-based enumeration. | |
| bool | isASCII (void) const | 
| Does this print as an ASCII 'char'. | |
| bool | isUTF16 (void) const | 
| Does this print as UTF16 'wchar'. | |
| bool | isUTF32 (void) const | 
| Does this print as UTF32 'wchar'. | |
| bool | isVariableLength (void) const | 
| Is this a variable length structure. | |
| bool | hasSameVariableBase (const Datatype *ct) const | 
| Are these the same variable length data-type.  More... | |
| bool | isOpaqueString (void) const | 
| Is this an opaquely encoded string. | |
| uint4 | getInheritable (void) const | 
| Get properties pointers inherit. | |
| type_metatype | getMetatype (void) const | 
| Get the type meta-type. | |
| uint8 | getId (void) const | 
| Get the type id. | |
| int4 | getSize (void) const | 
| Get the type size. | |
| const string & | getName (void) const | 
| Get the type 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 Datatype * | nearestArrayedComponentForward (uintb off, uintb *newoff, int4 *elSize) const | 
| virtual Datatype * | nearestArrayedComponentBackward (uintb off, uintb *newoff, int4 *elSize) const | 
| virtual int4 | numDepend (void) const | 
| Return number of component sub-types. | |
| virtual Datatype * | getDepend (int4 index) const | 
| Return the i-th component sub-type. | |
| virtual void | printNameBase (ostream &s) const | 
| Print name as short prefix. | |
| 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 | typeOrder (const Datatype &op) const | 
| Order this with -op- datatype. | |
| 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... | |
| bool | isPtrsubMatching (uintb offset) const | 
| Is this data-type suitable as input to a CPUI_PTRSUB op.  More... | |
| Protected Types | |
| enum | { coretype = 1, chartype = 2, enumtype = 4, poweroftwo = 8, utf16 = 16, utf32 = 32, opaque_string = 64, variable_length = 128 } | 
| 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... | |
| static uint8 | hashSize (uint8 id, int4 size) | 
| Reversibly hash size into id.  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.
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(), TypeEnum::endEnum(), TypeStruct::getDepend(), TypeCode::getPrototype(), printNameBase(), TypePointer::printNameBase(), TypeArray::printNameBase(), typeOrder(), typeOrderBool(), and TypeSpacebase::TypeSpacebase().
| 
 | 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(), TypeSpacebase::compare(), TypeEnum::endEnum(), TypeFactory::findAdd(), TypeStruct::getDepend(), TypeCode::getPrototype(), DatatypeCompare::operator()(), printNameBase(), TypePointer::printNameBase(), TypeArray::printNameBase(), TypeFactory::restoreXmlTypeNoRef(), and TypeSpacebase::TypeSpacebase().
| 
 | 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, TypeCode, TypeStruct, and TypeArray.
Referenced by RuleStructOffset0::applyOp(), TypeFactory::downChain(), TypeStruct::endField(), getName(), TypeCode::getPrototype(), SymbolEntry::getSizedType(), AddTreeState::hasMatchingSubType(), isPtrsubMatching(), TypeSpacebase::nearestArrayedComponentBackward(), TypeArray::numElements(), ActionInferTypes::propagateRef(), RangeHint::reconcile(), Funcdata::syncVarnodesWithSymbols(), and TypeSpacebase::TypeSpacebase().
| 
 | 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().
| 
 | staticprotected | 
Reversibly hash size into id.
This allows IDs for variable length structures to be uniquefied based on size. A base ID is given and a size of the specific instance. A unique ID is returned. The hashing is reversible by feeding the output ID back into this function with the same size.
| id | is the given ID to (de)uniquify | 
| size | is the instance size of the structure | 
| return | the (de)uniquified id | 
Referenced by hasSameVariableBase(), restoreXmlBasic(), TypeFactory::restoreXmlTypeNoRef(), and saveXmlBasic().
| bool Datatype::hasSameVariableBase | ( | const Datatype * | ct | ) | const | 
Are these the same variable length data-type.
If this and the other given data-type are both variable length and come from the the same base data-type, return true.
| ct | is the other given data-type to compare with this | 
References hashSize(), id, isVariableLength(), and size.
Referenced by CastStrategyC::castStandard(), and isVariableLength().
| bool Datatype::isPtrsubMatching | ( | uintb | offset | ) | const | 
Is this data-type suitable as input to a CPUI_PTRSUB op.
A CPUI_PTRSUB must act on a pointer data-type where the given offset addresses a component. Perform this check.
| is | the given offset | 
References AddrSpace::addressToByte(), AddrSpace::addressToByteInt(), getSize(), getSubType(), metatype, size, TYPE_ARRAY, TYPE_PTR, TYPE_SPACEBASE, and TYPE_STRUCT.
Referenced by ActionSetCasts::apply(), RulePtrsubUndo::applyOp(), and typeOrder().
| 
 | virtual | 
Find the first component data-type before the given offset that is (or contains) an array, and pass back the difference between the component's start and the given offset. Return the component data-type or null if no array is found.
| off | is the given offset into this data-type | 
| newoff | is used to pass back the offset difference | 
| elSize | is used to pass back the array element size | 
Reimplemented in TypeSpacebase, and TypeStruct.
Referenced by TypeStruct::endField(), getName(), AddTreeState::hasMatchingSubType(), TypeSpacebase::nearestArrayedComponentBackward(), and TypeSpacebase::TypeSpacebase().
| 
 | virtual | 
Find the first component data-type after the given offset that is (or contains) an array, and pass back the difference between the component's start and the given offset. Return the component data-type or null if no array is found.
| off | is the given offset into this data-type | 
| newoff | is used to pass back the offset difference | 
| elSize | is used to pass back the array element size | 
Reimplemented in TypeSpacebase, and TypeStruct.
Referenced by TypeStruct::endField(), getName(), AddTreeState::hasMatchingSubType(), TypeSpacebase::nearestArrayedComponentForward(), and TypeSpacebase::TypeSpacebase().
| 
 | 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(), ActionPrototypeWarnings::apply(), TypeFactory::findAdd(), getName(), TypeCode::getPrototype(), TypePointer::getWordSize(), TypeArray::numElements(), SymbolEntry::printEntry(), and HighVariable::printInfo().
| 
 | 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::getArch(), and 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::getAttributeName(), Element::getAttributeValue(), Element::getNumAttributes(), hashName(), hashSize(), id, isVariableLength(), metatype, name, opaque_string, size, string2metatype(), variable_length, 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 TypeChar::clone(), TypeUnicode::clone(), TypeVoid::clone(), TypePointer::clone(), TypeArray::clone(), TypeEnum::clone(), TypeStruct::clone(), TypeCode::clone(), TypeSpacebase::clone(), TypeFactory::getArch(), printNameBase(), 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, hashSize(), id, isVariableLength(), metatype, metatype2string(), name, opaque_string, and size.
Referenced by saveXml(), TypeChar::saveXml(), TypeUnicode::saveXml(), TypePointer::saveXml(), TypeSpacebase::saveXml(), and typeOrder().
| 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 | 
References compare(), metatype, and TYPE_BOOL.
Referenced by HighVariable::getTypeRepresentative(), and typeOrder().
 1.8.11
 1.8.11