|
decompiler 1.0.0
|
Datatype object representing executable code. More...
#include <type.hh>
Public Member Functions | |
| TypeCode (const TypeCode &op) | |
| Construct from another TypeCode. | |
| TypeCode (void) | |
| Construct an incomplete TypeCode. | |
| int4 | compareBasic (const TypeCode *op) const |
| Compare surface characteristics of two TypeCodes. More... | |
| const FuncProto * | getPrototype (void) const |
| Get the function prototype. | |
| 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 |
| Order types for propagation. More... | |
| virtual int4 | compareDependency (const Datatype &op) const |
| Compare for storage in tree structure. More... | |
| virtual Datatype * | clone (void) const |
| Clone the data-type. More... | |
| virtual void | saveXml (ostream &s) const |
| Serialize the data-type to XML. More... | |
Public Member Functions inherited from Datatype | |
| 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. | |
| 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. | |
| bool | isPointerRel (void) const |
| Is this a TypePointerRel. | |
| bool | isFormalPointerRel (void) const |
| Is this a non-ephemeral TypePointerRel. | |
| bool | hasStripped (void) const |
| Return true if this has a stripped form. | |
| bool | isIncomplete (void) const |
| Is this an incompletely defined data-type. | |
| uint4 | getInheritable (void) const |
| Get properties pointers inherit. | |
| type_metatype | getMetatype (void) const |
| Get the type meta-type. | |
| sub_metatype | getSubMeta (void) const |
| Get the sub-metatype. | |
| 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. | |
| Datatype * | getTypedef (void) const |
| Get the data-type immediately typedefed by this (or null) | |
| 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. More... | |
| virtual Datatype * | getDepend (int4 index) const |
| Return the i-th component sub-type. More... | |
| virtual void | printNameBase (ostream &s) const |
| Print name as short prefix. More... | |
| virtual int4 | compare (const Datatype &op, int4 level) const |
| Order types for propagation. More... | |
| virtual int4 | compareDependency (const Datatype &op) const |
| Compare for storage in tree structure. More... | |
| virtual void | saveXml (ostream &s) const |
| Serialize the data-type to XML. More... | |
| virtual bool | isPtrsubMatching (uintb off) const |
| Is this data-type suitable as input to a CPUI_PTRSUB op. More... | |
| virtual Datatype * | getStripped (void) const |
| Get a stripped version of this for formal use in formal declarations. 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 | saveXmlRef (ostream &s) const |
| Write an XML reference of this to stream. More... | |
Protected Member Functions | |
| void | setPrototype (TypeFactory *tfact, ProtoModel *model, Datatype *outtype, const vector< Datatype * > &intypes, bool dotdotdot, Datatype *voidtype) |
| Establish a function pointer. More... | |
| void | setPrototype (TypeFactory *typegrp, const FuncProto *fp) |
| Set a particular function prototype on this. More... | |
| void | restoreStub (const Element *el) |
| Restore stub of data-type without the full prototype. More... | |
| void | restorePrototype (const Element *el, bool isConstructor, bool isDestructor, TypeFactory &typegrp) |
| Restore any prototype description. More... | |
Protected Member Functions inherited from Datatype | |
| void | restoreXmlBasic (const Element *el) |
| Recover basic data-type properties. More... | |
| void | saveXmlBasic (type_metatype meta, ostream &s) const |
| Save basic data-type properties. More... | |
| void | saveXmlTypedef (ostream &s) const |
| Write this as a typedef tag to stream. More... | |
| void | markComplete (void) |
| Mark this data-type as completely defined. | |
| virtual Datatype * | clone (void) const =0 |
| Clone the data-type. More... | |
Protected Attributes | |
| FuncProto * | proto |
| If non-null, this describes the prototype of the underlying function. | |
| TypeFactory * | factory |
| Factory owning this. | |
Protected Attributes inherited from Datatype | |
| int4 | size |
| Size (of variable holding a value of this type) | |
| string | name |
| Name of type. | |
| type_metatype | metatype |
| Meta-type - type disregarding size. | |
| sub_metatype | submeta |
| Sub-type of of the meta-type, for comparisons. | |
| uint4 | flags |
| Boolean properties of the type. | |
| uint8 | id |
| A unique id for the type (or 0 if an id is not assigned) | |
| Datatype * | typedefImm |
| The immediate data-type being typedefed by this. | |
Friends | |
| class | TypeFactory |
Additional Inherited Members | |
Protected Types inherited from Datatype | |
| enum | { coretype = 1 , chartype = 2 , enumtype = 4 , poweroftwo = 8 , utf16 = 16 , utf32 = 32 , opaque_string = 64 , variable_length = 128 , has_stripped = 0x100 , is_ptrrel = 0x200 , type_incomplete = 0x400 } |
| Boolean properties of datatypes. More... | |
Static Protected Member Functions inherited from Datatype | |
| 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... | |
Static Protected Attributes inherited from Datatype | |
| static sub_metatype | base2sub [13] |
Datatype object representing executable code.
Sometimes, this holds the "function" being pointed to by a function pointer
|
inlinevirtual |
|
virtual |
Order types for propagation.
Order this with another data-type, in a way suitable for the type propagation algorithm. Bigger 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 from Datatype.
References Datatype::compare(), compareBasic(), Datatype::getId(), FuncProto::getOutputType(), FuncProto::getParam(), ProtoParameter::getType(), FuncProto::numParams(), and proto.
| int4 TypeCode::compareBasic | ( | const TypeCode * | op | ) | const |
Compare surface characteristics of two TypeCodes.
Compare basic characteristics of this with another TypeCode, not including the prototype
| op | is the other data-type to compare to |
References FuncProto::getComparableFlags(), FuncProto::getModelName(), FuncProto::hasModel(), FuncProto::numParams(), and proto.
Referenced by compare(), and compareDependency().
|
virtual |
Compare for storage in tree structure.
Sort data-types for the main TypeFactory container. The sort needs to be based on the data-type structure so that an example data-type, constructed outside the factory, can be used to find the equivalent object inside the factory. This means the comparison should not examine the data-type id. In practice, the comparison only needs to go down one level in the component structure before just comparing component pointers.
| op | is the data-type to compare with this |
Reimplemented from Datatype.
References compareBasic(), Datatype::compareDependency(), FuncProto::getOutputType(), FuncProto::getParam(), ProtoParameter::getType(), FuncProto::numParams(), and proto.
|
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 from Datatype.
References factory, TypeFactory::getBase(), and TYPE_CODE.
|
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 from Datatype.
References Datatype::name.
|
protected |
Restore any prototype description.
A single child element indicates a full function prototype.
| el | is the root XML tag describing the code object |
| isConstructor | is true if the prototype is a constructor |
| isDestructor | is true if the prototype is a destructor |
| typegrp | is the factory owning the code object |
References Architecture::defaultfp, factory, TypeFactory::getArch(), Element::getChildren(), TypeFactory::getTypeVoid(), Datatype::markComplete(), proto, FuncProto::restoreXml(), FuncProto::setConstructor(), FuncProto::setDestructor(), and FuncProto::setInternal().
Referenced by TypeFactory::restoreCode().
|
protected |
Restore stub of data-type without the full prototype.
| el | is the root XML element describing the code object |
References Datatype::flags, Element::getChildren(), Datatype::restoreXmlBasic(), and Datatype::variable_length.
Referenced by TypeFactory::restoreCode().
|
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 from Datatype.
References Datatype::metatype, proto, FuncProto::saveXml(), Datatype::saveXmlBasic(), Datatype::saveXmlTypedef(), and Datatype::typedefImm.
|
protected |
Establish a function pointer.
Turn on the data-type's function prototype
| tfact | is the factory that owns this |
| model | is the prototype model |
| outtype | is the return type of the prototype |
| intypes | is the list of input parameters |
| dotdotdot | is true if the prototype takes variable arguments |
| voidtype | is the reference "void" data-type |
References factory, Datatype::flags, proto, FuncProto::setInputLock(), FuncProto::setInternal(), FuncProto::setOutputLock(), FuncProto::updateAllTypes(), and Datatype::variable_length.
Referenced by TypeFactory::getTypeCode(), and TypeFactory::setPrototype().
|
protected |
Set a particular function prototype on this.
The prototype is copied in.
| typegrp | is the factory owning this |
| fp | is the prototype to set (may be null) |
References FuncProto::copy(), factory, and proto.