decompiler
1.0.0
|
An enumerated Datatype object: an integer with named values. More...
#include <type.hh>
Public Member Functions | |
TypeEnum (const TypeEnum &op) | |
Construct from another TypeEnum. | |
TypeEnum (int4 s, type_metatype m) | |
Construct from a size and meta-type (TYPE_INT or TYPE_UINT) | |
TypeEnum (int4 s, type_metatype m, const string &nm) | |
Construct from a size, meta-type, and name. | |
map< uintb, string >::const_iterator | beginEnum (void) const |
Beginning of name map. | |
map< uintb, string >::const_iterator | endEnum (void) const |
End of name map. | |
bool | getMatches (uintb val, vector< string > &matchname) const |
Recover the named representation. 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. | |
virtual void | encode (Encoder &encoder) const |
Encode the data-type to a stream. More... | |
Public Member Functions inherited from ghidra::TypeBase | |
TypeBase (const TypeBase &op) | |
Construct TypeBase copying properties from another data-type. | |
TypeBase (int4 s, type_metatype m) | |
Construct TypeBase from a size and meta-type. | |
TypeBase (int4 s, type_metatype m, const string &n) | |
Construct TypeBase from a size, meta-type, and name. | |
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, 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. | |
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 Datatype * | nearestArrayedComponentForward (int8 off, int8 *newoff, int8 *elSize) const |
virtual Datatype * | nearestArrayedComponentBackward (int8 off, int8 *newoff, int8 *elSize) const |
virtual int4 | getHoleSize (int4 off) const |
Get number of bytes at the given offset that are padding. | |
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 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 (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... | |
Protected Member Functions | |
void | setNameMap (const map< uintb, string > &nmap) |
Establish the value -> name map. More... | |
void | decode (Decoder &decoder, TypeFactory &typegrp) |
Restore this enum data-type from a stream. More... | |
Protected Member Functions inherited from ghidra::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... | |
Protected Attributes | |
map< uintb, string > | namemap |
Map from integer to name. | |
vector< uintb > | masklist |
Masks for each bitfield within the enum. | |
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 of the meta-type, for comparisons. | |
Datatype * | typedefImm |
The immediate data-type being typedefed by this. | |
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 } |
Boolean properties of datatypes. 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 Protected Attributes inherited from ghidra::Datatype | |
static sub_metatype | base2sub [15] |
An enumerated Datatype object: an integer with named values.
This supports combinations of the enumeration values (using logical OR and bit-wise complement) by defining independent bit-fields.
|
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(), and namemap.
Referenced by compare().
|
protected |
Restore this enum data-type from a stream.
Parse a <type> element with children describing each specific enumeration value.
decoder | is the stream decoder |
typegrp | is the factory owning this data-type |
References ghidra::calc_mask(), ghidra::Decoder::closeElement(), ghidra::Datatype::decodeBasic(), ghidra::Decoder::getNextAttributeId(), ghidra::Datatype::name, ghidra::Decoder::openElement(), ghidra::Decoder::readSignedInteger(), ghidra::Decoder::readString(), setNameMap(), ghidra::SUB_INT_ENUM, ghidra::SUB_UINT_ENUM, ghidra::Datatype::submeta, and ghidra::TYPE_INT.
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::Datatype::encodeBasic(), ghidra::Datatype::encodeTypedef(), namemap, ghidra::Encoder::openElement(), ghidra::Datatype::typedefImm, ghidra::Encoder::writeString(), and ghidra::Encoder::writeUnsignedInteger().
bool ghidra::TypeEnum::getMatches | ( | uintb | val, |
vector< string > & | valnames | ||
) | const |
Recover the named representation.
Given a specific value of the enumeration, calculate the named representation of that value. The representation is returned as a list of names that must logically ORed and possibly complemented. If no representation is possible, no names will be returned.
val | is the value to find the representation for |
valnames | will hold the returned list of names |
References ghidra::calc_mask(), masklist, and namemap.
Referenced by ghidra::PrintC::pushEnumConstant().
|
protected |
Establish the value -> name map.
Set the map. Calculate the independent bit-fields within the named values of the enumeration Two bits are in the same bit-field if there is a name in the map whose value has those two bits set. Bit-fields must be a contiguous range of bits.
References ghidra::Datatype::flags, masklist, namemap, and ghidra::Datatype::poweroftwo.
Referenced by decode(), and ghidra::TypeFactory::setEnumValues().