|
decompiler 1.0.0
|
Special Datatype object used to describe pointers that index into the symbol table. More...
#include <type.hh>
Public Member Functions | |
| TypeSpacebase (const TypeSpacebase &op) | |
| Construct from another TypeSpacebase. | |
| TypeSpacebase (Architecture *g) | |
| Constructor for use with decode. | |
| TypeSpacebase (AddrSpace *id, const Address &frame, Architecture *g) | |
| Construct given an address space, scope, and architecture. | |
| Scope * | getMap (void) const |
| Get the symbol table indexed by this. More... | |
| Address | getAddress (uintb off, int4 sz, const Address &point) const |
| Construct an Address given an offset. More... | |
| virtual Datatype * | getSubType (int8 off, int8 *newoff) const |
| Recover component data-type one-level down. More... | |
| virtual int8 | nearestArrayedComponentForward (int8 off, int8 max, int8 *newoff, int8 *elSize) const |
| virtual int8 | nearestArrayedComponentBackward (int8 off, int8 max, int8 *newoff, int8 *elSize) const |
| 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... | |
Public Member Functions inherited from ghidra::Datatype | |
| Datatype (const Datatype &op) | |
| Construct the base data-type copying low-level properties of another. | |
| Datatype (int4 s, int4 align, 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 | 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 | isPointerToArray (void) const |
| Is this a pointer to an array. | |
| 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. | |
| bool | hasWarning (void) const |
| Has a warning been issued about this data-type. | |
| bool | hasBitfields (void) const |
| Return true if this contains/overlaps bitfields. | |
| 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. | |
| uint8 | getUnsizedId (void) const |
| Get the type id, without variable length size adjustment. More... | |
| int4 | getSize (void) const |
| Get the type size. | |
| int4 | getAlignSize (void) const |
| Get size rounded up to multiple of alignment. | |
| int4 | getAlignment (void) const |
| Get the expected byte alignment. | |
| const string & | getName (void) const |
| Get the type name. | |
| const string & | getDisplayName (void) const |
| Get string to use in display. | |
| 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 (int8 off, int4 sz, const PcodeOp *op, int4 slot, int8 &newoff) const |
| Find an immediate subfield of this data-type. More... | |
| virtual Datatype * | getSubType (int8 off, int8 *newoff) const |
| Recover component data-type one-level down. More... | |
| virtual int8 | nearestArrayedComponentForward (int8 off, int8 max, int8 *newoff, int8 *elSize) const |
| virtual int8 | nearestArrayedComponentBackward (int8 off, int8 max, int8 *newoff, int8 *elSize) const |
| virtual int4 | getHoleSize (int4 off) const |
| Get number of bytes at the given offset that are padding. More... | |
| virtual int4 | numDepend (void) const |
| Get the number of component sub-types making up this data-type. More... | |
| virtual Datatype * | getDepend (int4 index) const |
| Get a specific component sub-type by index. More... | |
| virtual Datatype * | getPtrInto (int4 &off) const |
| If this is a pointer, return the large data-type this points into. More... | |
| virtual void | printNameBase (ostream &s) const |
| Print (part of) the name of this data-type as short prefix for a label. 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 (int8 off, int8 extra, int8 multiplier) 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 (int8 offset, PcodeOp *op, int4 slot, int8 &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... | |
| bool | isPieceStructured (void) const |
| Does this data-type consist of separate pieces? More... | |
| bool | isPrimitiveWhole (void) const |
| Is this made up of a single primitive. More... | |
Private Member Functions | |
| void | decode (Decoder &decoder, TypeFactory &typegrp) |
| Restore this spacebase data-type from a stream. More... | |
Private Attributes | |
| AddrSpace * | spaceid |
| The address space we are treating as a structure. | |
| Address | localframe |
| Address of function whose symbol table is indexed (or INVALID for "global") | |
| Architecture * | glb |
| Architecture for accessing symbol table. | |
Friends | |
| class | TypeFactory |
Additional Inherited Members | |
Static Public Member Functions inherited from ghidra::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 ghidra::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 , truncate_bigendian = 0x8000 , pointer_to_array = 0x10000 , warning_issued = 0x20000 , has_bitfields = 0x40000 } |
| Boolean properties of datatypes. More... | |
Protected Member Functions inherited from ghidra::Datatype | |
| void | decodeBasic (Decoder &decoder) |
| Recover basic data-type properties. More... | |
| void | encodeBasic (type_metatype meta, int4 align, 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... | |
Static Protected Member Functions inherited from ghidra::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 int4 | calcAlignSize (int4 sz, int4 align) |
| Calculate aligned size, given size and alignment of data-type. More... | |
Protected Attributes inherited from ghidra::Datatype | |
| uint8 | id |
| A unique id for the type (or 0 if an id is not assigned) | |
| int4 | size |
| Size (of variable holding a value of this type) | |
| uint4 | flags |
| Boolean properties of the type. | |
| string | name |
| Name of type. | |
| string | displayName |
| Name to display in output. | |
| type_metatype | metatype |
| Meta-type - type disregarding size. | |
| sub_metatype | submeta |
| Sub-type of the meta-type, for comparisons. | |
| Datatype * | typedefImm |
| The immediate data-type being typedefed by this. | |
| int4 | alignment |
| Byte alignment expected for this data-type in addressable memory. | |
| int4 | alignSize |
| Size of data-type rounded up to a multiple of alignment. | |
Static Protected Attributes inherited from ghidra::Datatype | |
| static sub_metatype | base2sub [18] |
Special Datatype object used to describe pointers that index into the symbol table.
A TypeSpacebase treats a specific AddrSpace as "structure" that will get indexed in to. This facilitates type propagation from local symbols into the stack space and from global symbols into the RAM space.
|
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 ghidra::Datatype.
References 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 ghidra::Datatype.
References ghidra::Datatype::compareDependency(), ghidra::Address::isInvalid(), localframe, and spaceid.
Referenced by compare().
|
private |
Restore this spacebase data-type from a stream.
Parse the <type> tag.
| decoder | is the stream decoder |
| typegrp | is the factory owning this data-type |
References ghidra::Address::decode(), ghidra::Datatype::decodeBasic(), localframe, ghidra::Decoder::readSpace(), and spaceid.
Referenced by ghidra::TypeFactory::decodeTypeNoRef().
|
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 ghidra::Datatype.
References ghidra::Encoder::closeElement(), ghidra::Address::encode(), ghidra::Datatype::encodeBasic(), ghidra::Datatype::encodeTypedef(), localframe, ghidra::Datatype::metatype, ghidra::Encoder::openElement(), spaceid, ghidra::Datatype::typedefImm, and ghidra::Encoder::writeSpace().
Construct an Address given an offset.
Return the Address being referred to by a specific offset relative to a pointer with this Datatype
| off | is the offset relative to the pointer |
| sz | is the size of offset (as a pointer) |
| point | is a "context" reference for the request |
References glb, ghidra::Address::isInvalid(), localframe, ghidra::AddrSpaceManager::resolveConstant(), and spaceid.
Referenced by ghidra::RulePtrsubCharConstant::applyOp(), ghidra::Funcdata::linkSymbolReference(), ghidra::PrintC::opPtrsub(), and ghidra::ActionInferTypes::propagateSpacebaseRef().
| Scope * ghidra::TypeSpacebase::getMap | ( | void | ) | const |
Get the symbol table indexed by this.
This data-type can index either a local or the global scope
References ghidra::Database::getGlobalScope(), ghidra::Funcdata::getScopeLocal(), glb, ghidra::Address::isInvalid(), localframe, ghidra::Scope::queryFunction(), and ghidra::Architecture::symboltab.
Referenced by ghidra::RulePtrsubCharConstant::applyOp(), getSubType(), ghidra::Funcdata::linkSymbolReference(), and nearestArrayedComponentForward().
|
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 ghidra::Datatype.
References ghidra::AddrSpace::byteToAddress(), ghidra::SymbolEntry::getAddr(), ghidra::TypeFactory::getBase(), getMap(), ghidra::Address::getOffset(), ghidra::SymbolEntry::getOffset(), ghidra::SymbolEntry::getSymbol(), ghidra::Symbol::getType(), ghidra::AddrSpace::getWordSize(), glb, ghidra::Scope::queryContainer(), ghidra::AddrSpaceManager::resolveConstant(), spaceid, ghidra::TYPE_UNKNOWN, and ghidra::Architecture::types.
Referenced by nearestArrayedComponentBackward().
|
virtual |
If this data-type is (or contains) an array starting before the given offset, return the distance in bytes to the end of the 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 |
| max | is the maximum distance, in bytes, to search |
| newoff | is used to pass back the offset difference |
| elSize | is used to pass back the array element size |
Reimplemented from ghidra::Datatype.
References getSubType(), and ghidra::Datatype::nearestArrayedComponentBackward().
|
virtual |
If this data-type is (or contains) an array starting after the given offset, return the distance in bytes to the start of the array, and pass back the difference between the component's start and the given offset.
| off | is the given offset into this data-type |
| max | is the maximum distance, in bytes, to search |
| newoff | is used to pass back the offset difference |
| elSize | is used to pass back the array element size |
Reimplemented from ghidra::Datatype.
References ghidra::AddrSpace::byteToAddress(), ghidra::AddrSpace::byteToAddressInt(), ghidra::SymbolEntry::getAddr(), getMap(), ghidra::Address::getOffset(), ghidra::SymbolEntry::getOffset(), ghidra::SymbolEntry::getSize(), ghidra::SymbolEntry::getSymbol(), ghidra::Symbol::getType(), ghidra::AddrSpace::getWordSize(), glb, ghidra::Datatype::nearestArrayedComponentForward(), ghidra::Scope::queryContainer(), ghidra::AddrSpaceManager::resolveConstant(), and spaceid.