|
Ghidra 11.4.2
Ghidra internal decompiler documentation.
|
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. | |
| Address | getAddress (uintb off, int4 sz, const Address &point) const |
| Construct an Address given an offset. | |
| virtual Datatype * | getSubType (int8 off, int8 *newoff) const |
| Recover component data-type one-level down. | |
| virtual Datatype * | nearestArrayedComponentForward (int8 off, int8 *newoff, int8 *elSize) const |
| virtual Datatype * | nearestArrayedComponentBackward (int8 off, int8 *newoff, int8 *elSize) const |
| virtual int4 | compare (const Datatype &op, int4 level) const |
| Order types for propagation. | |
| virtual int4 | compareDependency (const Datatype &op) const |
| Compare for storage in tree structure. | |
| virtual Datatype * | clone (void) const |
| Clone the data-type. | |
| virtual void | encode (Encoder &encoder) const |
| Encode the data-type to a stream. | |
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. | |
| 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. | |
| uint4 | getInheritable (void) const |
| Get properties pointers inherit. | |
| uint4 | getDisplayFormat (void) const |
| Get the display format for constants with this data-type. | |
| 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. | |
| 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. | |
| virtual const TypeField * | findTruncation (int8 off, int4 sz, const PcodeOp *op, int4 slot, int8 &newoff) const |
| Find an immediate subfield of this data-type. | |
| virtual int4 | getHoleSize (int4 off) const |
| Get number of bytes at the given offset that are padding. | |
| virtual int4 | numDepend (void) const |
| Get the number of component sub-types making up this data-type. | |
| virtual Datatype * | getDepend (int4 index) const |
| Get a specific component sub-type by index. | |
| virtual void | printNameBase (ostream &s) const |
| Print (part of) the name of this data-type as short prefix for a label. | |
| virtual bool | isPtrsubMatching (int8 off, int8 extra, int8 multiplier) const |
| Is this data-type suitable as input to a CPUI_PTRSUB op. | |
| virtual Datatype * | getStripped (void) const |
| Get a stripped version of this for formal use in formal declarations. | |
| virtual Datatype * | resolveInFlow (PcodeOp *op, int4 slot) |
| Tailor data-type propagation based on Varnode use. | |
| virtual Datatype * | findResolve (const PcodeOp *op, int4 slot) |
| Find a previously resolved sub-type. | |
| virtual int4 | findCompatibleResolve (Datatype *ct) const |
| Find a resolution compatible with the given data-type. | |
| 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. | |
| 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. | |
| void | encodeRef (Encoder &encoder) const |
| Encode a reference of this to a stream. | |
| bool | isPieceStructured (void) const |
| Does this data-type consist of separate pieces? | |
| bool | isPrimitiveWhole (void) const |
| Is this made up of a single primitive. | |
Private Member Functions | |
| void | decode (Decoder &decoder, TypeFactory &typegrp) |
| Restore this spacebase data-type from a stream. | |
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. | |
| static string | decodeIntegerFormat (uint4 val) |
| Decode the given format value into an XML attribute string. | |
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 } |
| Boolean properties of datatypes. More... | |
Protected Member Functions inherited from ghidra::Datatype | |
| void | decodeBasic (Decoder &decoder) |
| Recover basic data-type properties. | |
| void | encodeBasic (type_metatype meta, int4 align, Encoder &encoder) const |
| Encode basic data-type properties. | |
| void | encodeTypedef (Encoder &encoder) const |
| Encode this as a typedef element to a stream. | |
| void | markComplete (void) |
| Mark this data-type as completely defined. | |
| void | setDisplayFormat (uint4 format) |
| Set a specific display format. | |
Static Protected Member Functions inherited from ghidra::Datatype | |
| static uint8 | hashName (const string &nm) |
| Produce a data-type id by hashing the type name. | |
| static uint8 | hashSize (uint8 id, int4 size) |
| Reversibly hash size into id. | |
| static int4 | calcAlignSize (int4 sz, int4 align) |
| Calculate aligned size, given size and alignment of data-type. | |
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 |
Clone the data-type.
Implements ghidra::Datatype.
|
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 |
Find the last component data-type that is (or contains) an array starting before the given offset, 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 from ghidra::Datatype.
References ghidra::Datatype::getMetatype(), getSubType(), ghidra::Datatype::nearestArrayedComponentBackward(), ghidra::TYPE_ARRAY, and ghidra::TYPE_STRUCT.
|
virtual |
Find the first component data-type that is (or contains) an array starting after the given offset, 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 from ghidra::Datatype.
References ghidra::AddrSpace::byteToAddress(), ghidra::AddrSpace::byteToAddressInt(), ghidra::SymbolEntry::getAddr(), getMap(), ghidra::Datatype::getMetatype(), 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(), spaceid, ghidra::TYPE_ARRAY, and ghidra::TYPE_STRUCT.