|
decompiler 1.0.0
|
Datatype object representing a pointer. More...
#include <type.hh>
Public Member Functions | |
| TypePointer (const TypePointer &op) | |
| Construct from another TypePointer. | |
| TypePointer (int4 s, Datatype *pt, uint4 ws) | |
| Construct from a size, pointed-to type, and wordsize. | |
| TypePointer (Datatype *pt, AddrSpace *spc) | |
| Construct from a pointed-to type and an address space attribute. | |
| Datatype * | getPtrTo (void) const |
| Get the pointed-to Datatype. | |
| uint4 | getWordSize (void) const |
| Get the size of the addressable unit being pointed to. | |
| AddrSpace * | getSpace (void) const |
| Get any address space associated with this pointer. | |
| virtual void | printRaw (ostream &s) const |
| Print a description of the type to stream. More... | |
| 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 Datatype * | clone (void) const |
| Clone the data-type. More... | |
| virtual void | encode (Encoder &encoder) const |
| Encode the data-type to a stream. More... | |
| virtual TypePointer * | downChain (uintb &off, TypePointer *&par, uintb &parOff, bool allowArrayWrap, TypeFactory &typegrp) |
| Find a sub-type pointer given an offset into this. More... | |
| virtual bool | isPtrsubMatching (uintb off) const |
| Is this data-type suitable as input to a CPUI_PTRSUB op. More... | |
| virtual Datatype * | resolveInFlow (PcodeOp *op, int4 slot) |
| Tailor data-type propagation based on Varnode use. More... | |
| virtual Datatype * | findResolve (const PcodeOp *op, int4 slot) |
| Find a previously resolved sub-type. 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. | |
| bool | needsResolution (void) const |
| Is this a union or a pointer to union. | |
| uint4 | getInheritable (void) const |
| Get properties pointers inherit. | |
| uint4 | getDisplayFormat (void) const |
| Get the display format for constants with this data-type. More... | |
| 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 const TypeField * | findTruncation (int4 off, int4 sz, const PcodeOp *op, int4 slot, int4 &newoff) const |
| Find an immediate subfield of this data-type. 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 | encode (Encoder &encoder) const |
| Encode the data-type to a stream. 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... | |
| virtual Datatype * | resolveInFlow (PcodeOp *op, int4 slot) |
| Tailor data-type propagation based on Varnode use. More... | |
| virtual Datatype * | findResolve (const PcodeOp *op, int4 slot) |
| Find a previously resolved sub-type. More... | |
| virtual int4 | findCompatibleResolve (Datatype *ct) const |
| Find a resolution compatible with the given data-type. More... | |
| virtual const TypeField * | resolveTruncation (int4 offset, PcodeOp *op, int4 slot, int4 &newoff) |
| Resolve which union field is being used for a given PcodeOp when a truncation is involved. 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 | encodeRef (Encoder &encoder) const |
| Encode a reference of this to a stream. More... | |
Protected Member Functions | |
| void | decode (Decoder &decoder, TypeFactory &typegrp) |
| Restore this pointer data-type from a stream. More... | |
| void | calcSubmeta (void) |
| Pointers to structures may require a specific submeta. More... | |
| TypePointer (void) | |
| Internal constructor for use with decode. | |
Protected Member Functions inherited from Datatype | |
| void | decodeBasic (Decoder &decoder) |
| Recover basic data-type properties. More... | |
| void | encodeBasic (type_metatype meta, Encoder &encoder) const |
| Encode basic data-type properties. More... | |
| void | encodeTypedef (Encoder &encoder) const |
| Encode this as a typedef element to a stream. More... | |
| void | markComplete (void) |
| Mark this data-type as completely defined. | |
| void | setDisplayFormat (uint4 format) |
| Set a specific display format. More... | |
| virtual Datatype * | clone (void) const =0 |
| Clone the data-type. More... | |
Protected Attributes | |
| Datatype * | ptrto |
| Type being pointed to. | |
| AddrSpace * | spaceid |
| If non-null, the address space this is intented to point into. | |
| uint4 | wordsize |
| What size unit does the pointer address. | |
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 | |
Static Public Member Functions inherited from Datatype | |
| static uint4 | encodeIntegerFormat (const string &val) |
| Encode the format attribute from an XML element. More... | |
| static string | decodeIntegerFormat (uint4 val) |
| Decode the given format value into an XML attribute string. More... | |
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 , needs_resolution = 0x800 , force_format = 0x7000 } |
| 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 [15] |
Datatype object representing a pointer.
|
protected |
Pointers to structures may require a specific submeta.
Calculate specific submeta for this pointer
References Datatype::flags, Datatype::getMetatype(), Datatype::isIncomplete(), Datatype::needs_resolution, Datatype::needsResolution(), Datatype::numDepend(), ptrto, SUB_PTR, SUB_PTR_STRUCT, Datatype::submeta, TYPE_PTR, TYPE_STRUCT, and TYPE_UNION.
Referenced by decode(), and TypePointer().
|
inlinevirtual |
Clone the data-type.
Implements Datatype.
Reimplemented in TypePointerRel.
References TypePointer().
|
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.
Reimplemented in TypePointerRel.
References Datatype::compare(), Datatype::getId(), AddrSpace::getIndex(), ptrto, spaceid, and wordsize.
Referenced by TypePointerRel::compare().
|
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.
Reimplemented in TypePointerRel.
References AddrSpace::getIndex(), Datatype::getSize(), Datatype::getSubMeta(), ptrto, Datatype::size, spaceid, Datatype::submeta, and wordsize.
|
protected |
Restore this pointer data-type from a stream.
Parse a <type> element with a child describing the data-type being pointed to
| decoder | is the stream decoder |
| typegrp | is the factory owning this data-type |
References calcSubmeta(), Datatype::decodeBasic(), TypeFactory::decodeType(), Datatype::flags, Datatype::getInheritable(), Decoder::getNextAttributeId(), Datatype::name, ptrto, Decoder::readSpace(), Decoder::readUnsignedInteger(), Decoder::rewindAttributes(), spaceid, and wordsize.
Referenced by TypeFactory::decodeTypeNoRef().
|
virtual |
Find a sub-type pointer given an offset into this.
Add a constant offset to this pointer. If there is a valid component at that offset, return a pointer to the data-type of the component or NULL otherwise. This routine only goes down one level at most. Pass back the renormalized offset relative to the new data-type. If this is a pointer to (into) a container, the data-type of the container is passed back, with the offset into the container.
| off | is a reference to the offset to add |
| par | is used to pass back the container |
| parOff | is used to pass back the offset into the container |
| allowArrayWrap | is true if the pointer should be treated as a pointer to an array |
| typegrp | is the factory producing the (possibly new) data-type |
Reimplemented in TypePointerRel.
References Datatype::getMetatype(), Datatype::getSize(), Datatype::getSubType(), TypeFactory::getTypePointer(), TypeFactory::getTypePointerStripArray(), Datatype::isVariableLength(), ptrto, sign_extend(), Datatype::size, TYPE_ARRAY, TYPE_STRUCT, and wordsize.
Referenced by TypePointerRel::downChain(), TypeOpPtrsub::getOutputToken(), TypeOpIntAdd::propagateAddIn2Out(), and ScoreUnionFields::scoreTrialDown().
|
virtual |
Encode the data-type to a stream.
Encode a formal description of the data-type as a <type> element. For composite data-types, the description goes down one level, describing the component types only by reference.
| encoder | is the stream encoder |
Reimplemented from Datatype.
Reimplemented in TypePointerRel.
References Encoder::closeElement(), ELEM_TYPE, Datatype::encodeBasic(), Datatype::encodeRef(), Datatype::encodeTypedef(), Datatype::metatype, Encoder::openElement(), ptrto, spaceid, Datatype::typedefImm, wordsize, Encoder::writeSignedInteger(), and Encoder::writeSpace().
Find a previously resolved sub-type.
This is the constant version of resolveInFlow. If a resulting subtype has already been calculated, for the particular read (slot >= 0) or write (slot == -1), then return it. Otherwise return the original data-type.
| op | is the PcodeOp using the Varnode assigned with this data-type |
| slot | is the slot reading or writing the Varnode |
Reimplemented from Datatype.
References ResolvedUnion::getDatatype(), BlockBasic::getFuncdata(), Datatype::getMetatype(), PcodeOp::getParent(), Funcdata::getUnionField(), ptrto, and TYPE_UNION.
|
inlinevirtual |
|
virtual |
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.
| off | is the given offset |
Reimplemented from Datatype.
Reimplemented in TypePointerRel.
References AddrSpace::addressToByte(), AddrSpace::addressToByteInt(), Datatype::getMetatype(), Datatype::getSize(), Datatype::getSubType(), ptrto, TYPE_ARRAY, TYPE_SPACEBASE, TYPE_STRUCT, TYPE_UNION, and wordsize.
Referenced by TypePointerRel::isPtrsubMatching().
|
inlinevirtual |
Return number of component sub-types.
Reimplemented from Datatype.
|
inlinevirtual |
Print name as short prefix.
Reimplemented from Datatype.
References Datatype::printNameBase(), and ptrto.
|
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.
Reimplemented in TypePointerRel.
References AddrSpace::getName(), Datatype::printRaw(), ptrto, and spaceid.
Tailor data-type propagation based on Varnode use.
For certain data-types, particularly union, variables of that data-type are transformed into a subtype depending on the particular use. Each read or write of the variable may use a different subtype. This method returns the particular subtype required based on a specific PcodeOp. A slot index >=0 indicates which operand reads the variable, or if the index is -1, the variable is written.
| op | is the specific PcodeOp |
| slot | indicates the input operand, or the output |
Reimplemented from Datatype.
References Funcdata::getArch(), ResolvedUnion::getDatatype(), BlockBasic::getFuncdata(), Datatype::getMetatype(), PcodeOp::getParent(), ScoreUnionFields::getResult(), Funcdata::getUnionField(), ptrto, Funcdata::setUnionField(), TYPE_UNION, and Architecture::types.