decompiler
1.0.0
|
A composite Datatype object: A "structure" with component "fields". More...
#include <type.hh>
Public Member Functions | |
TypeStruct (const TypeStruct &op) | |
Construct from another TypeStruct. | |
TypeStruct (const string &n) | |
Construct empty TypeStruct from a name. | |
vector< TypeField >::const_iterator | beginField (void) const |
Beginning of fields. | |
vector< TypeField >::const_iterator | endField (void) const |
End of fields. | |
const TypeField * | getField (int4 off, int4 sz, int4 *newoff) const |
Get field based on offset. 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. | |
virtual Datatype * | getDepend (int4 index) const |
Return the i-th component sub-type. | |
virtual int4 | compare (const Datatype &op, int4 level) const |
Compare for functional equivalence. 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 | 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. | |
Datatype (int4 s, type_metatype m, const string &n) | |
Construct the base data-type providing size, meta-type, and name. | |
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. | |
uint4 | getInheritable (void) const |
Get properties pointers inherit. | |
type_metatype | getMetatype (void) const |
Get the type meta-type. | |
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. | |
virtual void | printRaw (ostream &s) const |
Print a description of the type to stream. More... | |
virtual void | printNameBase (ostream &s) const |
Print name as short prefix. | |
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 | saveXmlBasic (ostream &s) const |
Save basic data-type properties. More... | |
void | saveXmlRef (ostream &s) const |
Write an XML reference of this to stream. More... | |
bool | isPtrsubMatching (uintb offset) const |
Is this data-type suitable as input to a CPUI_PTRSUB op. More... | |
Protected Member Functions | |
void | setFields (const vector< TypeField > &fd) |
Establish fields for this. More... | |
int4 | getFieldIter (int4 off) const |
Get index into field list. More... | |
int4 | getLowerBoundField (int4 off) const |
Get index of last field before or equal to given offset. More... | |
virtual void | restoreXml (const Element *el, TypeFactory &typegrp) |
Restore data-type from XML. More... | |
Protected Member Functions inherited from Datatype | |
void | restoreXmlBasic (const Element *el) |
Recover basic data-type properties. More... | |
Protected Attributes | |
vector< TypeField > | field |
The list of fields. | |
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. | |
uint4 | flags |
Boolean properties of the type. | |
uint8 | id |
A unique id for the type (or 0 if an id is not assigned) | |
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 } |
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... | |
A composite Datatype object: A "structure" with component "fields".
|
virtual |
Compare for functional equivalence.
0 (equality) means the data-types are functionally equivalent (even if names differ) Smaller 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.
|
virtual |
Compare for storage in tree structure.
Ordering of data-types for the main TypeFactory container. Comparison only goes down one-level in the component structure, before just comparing pointers.
op | is the data-type to compare with this |
Reimplemented from Datatype.
const TypeField * TypeStruct::getField | ( | int4 | off, |
int4 | sz, | ||
int4 * | newoff | ||
) | const |
Get field based on offset.
Given a byte range within this data-type, determine the field it is contained in and pass back the renormalized offset.
off | is the byte offset into this |
sz | is the size of the byte range |
newoff | points to the renormalized offset to pass back |
|
protected |
Get index into field list.
Find the proper subfield given an offset. Return the index of that field or -1 if the offset is not inside a field.
off | is the offset into the structure |
|
protected |
Get index of last field before or equal to given offset.
The field returned may or may not contain the offset. If there are no fields that occur earlier than the offset, return -1.
off | is the given offset |
|
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.
|
virtual |
Find the first component data-type before the given offset that is (or contains) an 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 |
newoff | is used to pass back the offset difference |
elSize | is used to pass back the array element size |
Reimplemented from Datatype.
|
virtual |
Find the first component data-type after the given offset that is (or contains) an 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 |
newoff | is used to pass back the offset difference |
elSize | is used to pass back the array element size |
Reimplemented from Datatype.
|
protectedvirtual |
Restore data-type from XML.
Restore a Datatype object from an XML element
el | is the XML element |
typegrp | is the underlying TypeFactory that will hold the new object |
Reimplemented from Datatype.
Referenced by TypeFactory::restoreXmlTypeNoRef().
|
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.
|
protected |
Establish fields for this.
Copy a list of fields into this structure, establishing its size. Should only be called once when constructing the type
fd | is the list of fields to copy in |
Referenced by TypeFactory::setFields().