| IDA SDK

Public Member Functions | Static Public Member Functions | Public Types | Friends | List of all members
tinfo_t Class Reference

## Detailed Description

Primary mechanism for managing type information.

## Public Member Functions
| tinfo_t ()
| Constructor.
| tinfo_t (type_t decl_type)
| Constructor - can only be used to initialize simple types!
| tinfo_t (const char *decl, til_t *til=nullptr, int pt_flags=0)
| Constructor - will attempt to parse the provided C declaration.
| tinfo_t (const tinfo_t &r)
| Constructor.
tinfo_t & | operator= (const tinfo_t &r)
| Copy contents of given tinfo into this one.
| ~tinfo_t ()
| Destructor.
void | clear ()
| Clear contents of this tinfo, and remove from the type system.
void | swap (tinfo_t &r)
| Assign this = r and r = this.
bool | get_named_type (const til_t *til, const char *name, type_t decl_type=BTF_TYPEDEF, bool resolve=true, bool try_ordinal=true)
| Create a tinfo_t object for an existing named type. More...
bool | get_named_type (const char *name, type_t decl_type=BTF_TYPEDEF, bool resolve=true, bool try_ordinal=true)
bool | get_numbered_type (const til_t *til, uint32 ordinal, type_t decl_type=BTF_TYPEDEF, bool resolve=true)
| Create a tinfo_t object for an existing ordinal type. More...
bool | get_numbered_type (uint32 ordinal, type_t decl_type=BTF_TYPEDEF, bool resolve=true)
bool | detach ()
| Detach tinfo_t from the underlying type. More...
bool | serialize (qtype *type, qtype *fields=nullptr, qtype *fldcmts=nullptr, int sudt_flags=SUDT_FAST|SUDT_TRUNC) const
| Serialize tinfo_t object into a type string.
bool | deserialize (const til_t *til, const type_t **ptype, const p_list **pfields=nullptr, const p_list **pfldcmts=nullptr, const char *cmt=nullptr)
| Deserialize a type string into a tinfo_t object.
bool | deserialize (const til_t *til, const qtype *ptype, const qtype *pfields=nullptr, const qtype *pfldcmts=nullptr, const char *cmt=nullptr)
| Deserialize a type string into a tinfo_t object. More...
bool | is_correct () const
| Is the type object correct?. More...
type_t | get_realtype (bool full=false) const
| Get the resolved base type. More...
THREAD_SAFE type_t | get_decltype () const
| Get declared type (without resolving type references; they are returned as is). More...
THREAD_SAFE bool | empty () const
| Was tinfo_t initialized with some type info or not?
bool | present () const
| Is the type really present? (not a reference to a missing type, for example)
size_t | get_size (uint32 *p_effalign=nullptr, int gts_code=0) const
| Get the type size in bytes. More...
size_t | get_unpadded_size () const
| Get the type size in bytes without the final padding, in bytes. More...
uint32 | get_alignment () const
| Get type alignment This function returns the effective type alignment. More...
type_sign_t | get_sign () const
| Get type sign.
bool | is_signed () const
| Is this a signed type?
bool | is_unsigned () const
| Is this an unsigned type?
uchar | get_declalign () const
| Get declared alignment of the type.
THREAD_SAFE bool | is_typeref () const
| Is this type a type reference?.
THREAD_SAFE bool | has_details () const
| Does this type refer to a nontrivial type?
bool | get_type_name (qstring *out) const
| Does a type refer to a name?. More...
bool | get_nice_type_name (qstring *out) const
| Get the beautified type name. More...
tinfo_code_t | rename_type (const char *name, int ntf_flags=0)
| Rename a type. More...
bool | get_final_type_name (qstring *out) const
| Use in the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn). More...
bool | get_next_type_name (qstring *out) const
| Use In the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn). More...
tid_t | get_tid () const
| Get the type tid Each type in the local type library has a so-called `tid` associated with it. More...
tid_t | force_tid ()
| Get the type tid. More...
uint32 | get_ordinal () const
| Get type ordinal (only if the type was created as a numbered type, 0 if none)
uint32 | get_final_ordinal () const
| Get final type ordinal (0 if none)
til_t * | get_til () const
| Get the type library for tinfo_t.
bool | is_from_subtil () const
| Was the named type found in some base type library (not the top level type library)?. More...
bool | is_forward_decl () const
| Is this a forward declaration?. More...
type_t | get_forward_type () const
| Get type of a forward declaration. More...
bool | is_forward_struct () const
bool | is_forward_union () const
bool | is_forward_enum () const
bool | is_typedef () const
| Is this a typedef?. More...
int | get_type_cmt (qstring *out) const
| Get type comment. More...
bool | get_type_rptcmt (qstring *out) const
| Get type comment only if it is repeatable.
THREAD_SAFE bool | is_decl_const () const
| is_type_const(get_decltype())
THREAD_SAFE bool | is_decl_volatile () const
| is_type_volatile(get_decltype())
THREAD_SAFE bool | is_decl_void () const
| is_type_void(get_decltype())
THREAD_SAFE bool | is_decl_partial () const
| is_type_partial(get_decltype())
THREAD_SAFE bool | is_decl_unknown () const
| is_type_unknown(get_decltype())
THREAD_SAFE bool | is_decl_last () const
| is_typeid_last(get_decltype())
THREAD_SAFE bool | is_decl_ptr () const
| is_type_ptr(get_decltype())
THREAD_SAFE bool | is_decl_array () const
| is_type_array(get_decltype())
THREAD_SAFE bool | is_decl_func () const
| is_type_func(get_decltype())
THREAD_SAFE bool | is_decl_complex () const
| is_type_complex(get_decltype())
THREAD_SAFE bool | is_decl_typedef () const
| is_type_typedef(get_decltype())
THREAD_SAFE bool | is_decl_sue () const
| is_type_sue(get_decltype())
THREAD_SAFE bool | is_decl_struct () const
| is_type_struct(get_decltype())
THREAD_SAFE bool | is_decl_union () const
| is_type_union(get_decltype())
THREAD_SAFE bool | is_decl_udt () const
| is_type_struni(get_decltype())
THREAD_SAFE bool | is_decl_enum () const
| is_type_enum(get_decltype())
THREAD_SAFE bool | is_decl_bitfield () const
| is_type_bitfld(get_decltype())
THREAD_SAFE bool | is_decl_int128 () const
| is_type_int128(get_decltype())
THREAD_SAFE bool | is_decl_int64 () const
| is_type_int64(get_decltype())
THREAD_SAFE bool | is_decl_int32 () const
| is_type_int32(get_decltype())
THREAD_SAFE bool | is_decl_int16 () const
| is_type_int16(get_decltype())
THREAD_SAFE bool | is_decl_int () const
| is_type_int(get_decltype())
THREAD_SAFE bool | is_decl_char () const
| is_type_char(get_decltype())
THREAD_SAFE bool | is_decl_uint () const
| is_type_uint(get_decltype())
THREAD_SAFE bool | is_decl_uchar () const
| is_type_uchar(get_decltype())
THREAD_SAFE bool | is_decl_uint16 () const
| is_type_uint16(get_decltype())
THREAD_SAFE bool | is_decl_uint32 () const
| is_type_uint32(get_decltype())
THREAD_SAFE bool | is_decl_uint64 () const
| is_type_uint64(get_decltype())
THREAD_SAFE bool | is_decl_uint128 () const
| is_type_uint128(get_decltype())
THREAD_SAFE bool | is_decl_ldouble () const
| is_type_ldouble(get_decltype())
THREAD_SAFE bool | is_decl_double () const
| is_type_double(get_decltype())
THREAD_SAFE bool | is_decl_float () const
| is_type_float(get_decltype())
THREAD_SAFE bool | is_decl_tbyte () const
| is_type_tbyte(get_decltype())
THREAD_SAFE bool | is_decl_floating () const
| is_type_floating(get_decltype())
THREAD_SAFE bool | is_decl_bool () const
| is_type_bool(get_decltype())
THREAD_SAFE bool | is_decl_paf () const
| is_type_paf(get_decltype())
THREAD_SAFE bool | is_well_defined () const
| !(empty()) && !(is_decl_partial()) && !(is_punknown())
bool | is_const () const
| is_type_const(get_realtype())
bool | is_volatile () const
| is_type_volatile(get_realtype())
bool | is_void () const
| is_type_void(get_realtype())
bool | is_partial () const
| is_type_partial(get_realtype())
bool | is_unknown () const
| is_type_unknown(get_realtype())
bool | is_ptr () const
| is_type_ptr(get_realtype())
bool | is_array () const
| is_type_array(get_realtype())
bool | is_func () const
| is_type_func(get_realtype())
bool | is_complex () const
| is_type_complex(get_realtype())
bool | is_struct () const
| is_type_struct(get_realtype())
bool | is_union () const
| is_type_union(get_realtype())
bool | is_udt () const
| is_type_struni(get_realtype())
bool | is_enum () const
| is_type_enum(get_realtype())
bool | is_sue () const
| is_type_sue(get_realtype())
bool | is_bitfield () const
| is_type_bitfld(get_realtype())
bool | is_int128 () const
| is_type_int128(get_realtype())
bool | is_int64 () const
| is_type_int64(get_realtype())
bool | is_int32 () const
| is_type_int32(get_realtype())
bool | is_int16 () const
| is_type_int16(get_realtype())
bool | is_int () const
| is_type_int(get_realtype())
bool | is_char () const
| is_type_char(get_realtype())
bool | is_uint () const
| is_type_uint(get_realtype())
bool | is_uchar () const
| is_type_uchar(get_realtype())
bool | is_uint16 () const
| is_type_uint16(get_realtype())
bool | is_uint32 () const
| is_type_uint32(get_realtype())
bool | is_uint64 () const
| is_type_uint64(get_realtype())
bool | is_uint128 () const
| is_type_uint128(get_realtype())
bool | is_ldouble () const
| is_type_ldouble(get_realtype())
bool | is_double () const
| is_type_double(get_realtype())
bool | is_float () const
| is_type_float(get_realtype())
bool | is_tbyte () const
| is_type_tbyte(get_realtype())
bool | is_bool () const
| is_type_bool(get_realtype())
bool | is_paf () const
| is_type_paf(get_realtype())
bool | is_ptr_or_array () const
| is_type_ptr_or_array(get_realtype())
bool | is_integral () const
| is_type_integral(get_realtype())
bool | is_ext_integral () const
| is_type_ext_integral(get_realtype())
bool | is_floating () const
| is_type_floating(get_realtype())
bool | is_arithmetic () const
| is_type_arithmetic(get_realtype())
bool | is_ext_arithmetic () const
| is_type_ext_arithmetic(get_realtype())
bool | is_scalar () const
| Does the type represent a single number?
bool | get_ptr_details (ptr_type_data_t *pi) const
| Get the pointer info.
bool | get_array_details (array_type_data_t *ai) const
| Get the array specific info.
bool | get_enum_details (enum_type_data_t *ei) const
| Get the enum specific info.
bool | get_bitfield_details (bitfield_type_data_t *bi) const
| Get the bitfield specific info.
bool | get_udt_details (udt_type_data_t *udt, gtd_udt_t gtd=GTD_CALC_LAYOUT) const
| Get the udt specific info.
bool | get_func_details (func_type_data_t *fi, gtd_func_t gtd=GTD_CALC_ARGLOCS) const
| Get only the function specific info for this tinfo_t.
bool | is_funcptr () const
| Is this pointer to a function?
bool | is_shifted_ptr () const
| Is a shifted pointer?
bool | is_varstruct () const
| Is a variable-size structure?
bool | is_varmember () const
| Can the type be of a variable struct member? This function checks for: is_array() && array.nelems==0 Such a member can be only the very last member of a structure.
int | get_ptrarr_objsize () const
| BT_PTR & BT_ARRAY: get size of pointed object or array element. On error returns -1
tinfo_t | get_ptrarr_object () const
| BT_PTR & BT_ARRAY: get the pointed object or array element. More...
tinfo_t | get_pointed_object () const
| BT_PTR: get type of pointed object. More...
bool | is_pvoid () const
| Is "void *"?. This function does not check the pointer attributes and type modifiers.
bool | is_punknown () const
| Is "_UNKNOWN *"?. This function does not check the pointer attributes and type modifiers.
tinfo_t | get_array_element () const
| BT_ARRAY: get type of array element. See also get_ptrarr_object()
tinfo_t | get_final_element () const
| repeat recursively: if an array, return the type of its element; else return the type itself.
int | get_array_nelems () const
| BT_ARRAY: get number of elements (-1 means error)
tinfo_t | get_nth_arg (int n) const
| BT_FUNC or BT_PTR BT_FUNC: Get type of n-th arg (-1 means return type, see get_rettype())
tinfo_t | get_rettype () const
| BT_FUNC or BT_PTR BT_FUNC: Get the function's return type
int | get_nargs () const
| BT_FUNC or BT_PTR BT_FUNC: Calculate number of arguments (-1 - error)
cm_t | get_cc () const
| BT_FUNC or BT_PTR BT_FUNC: Get calling convention
bool | is_user_cc () const
| is_user_cc(get_cc())
bool | is_vararg_cc () const
| is_vararg_cc(get_cc())
bool | is_purging_cc () const
| is_purging_cc(get_cc())
int | calc_purged_bytes () const
| BT_FUNC: Calculate number of purged bytes
bool | is_high_func () const
| BT_FUNC: Is high level type?
bool | get_methods (udtmembervec_t *methods) const
| BT_COMPLEX: get a list of member functions declared in this udt. More...
bool | get_bit_buckets (range64vec_t *buckets) const
| ::BT_STRUCT: get bit buckets Bit buckets are used to layout bitfields More...
int | find_udm (udm_t *udm, int strmem_flags) const
| BTF_STRUCT,BTF_UNION: Find a udt member. More...
int | find_udm (uint64 offset, int strmem_flags=0) const
| BTF_STRUCT,BTF_UNION: Find an udt member at the specified offset More...
int | find_udm (const char *name, int strmem_flags=0) const
| BTF_STRUCT,BTF_UNION: Find an udt member by name More...
int | get_udm (udm_t *out, const char *name) const
| Retrieve a structure/union member with the specified name. More...
int | get_udm (udm_t *out, size_t index) const
| Retrieve a structure/union member with the specified index. More...
int | get_udm_by_offset (udm_t *out, uint64 offset) const
| Retrieve a structure/union member with the specified offset. More...
int | get_udt_nmembers () const
| Get number of udt members. -1-error.
bool | is_empty_udt () const
| Is an empty struct/union? (has no fields)
bool | is_small_udt () const
| Is a small udt? (can fit a register or a pair of registers)
bool | requires_qualifier (qstring *out, const char *name, uint64 offset) const
| Requires full qualifier? (name is not unique) More...
bool | append_covered (rangeset_t *out, uint64 offset=0) const
| Calculate set of covered bytes for the type. More...
bool | calc_gaps (rangeset_t *out) const
| Calculate set of padding bytes for the type. More...
bool | is_one_fpval () const
| Floating value or an object consisting of one floating member entirely.
bool | is_sse_type () const
| Is a SSE vector type?
bool | is_anonymous_udt () const
| Is an anonymous struct/union? We assume that types with names are anonymous if the name starts with $.
bool | is_vftable () const
| Is a vftable type?
bool | has_vftable () const
| Has a vftable?
bool | has_union () const
| Has a member of type "union"?
size_t | get_enum_nmembers () const
| Get number of enum members. More...
bool | is_empty_enum () const
| Is an empty enum? (has no constants)
type_t | get_enum_base_type () const
| Get enum base type (convert enum to integer type) Returns BT_UNK if failed to convert.
bool | is_bitmask_enum () const
| Is bitmask enum? More...
int | get_enum_radix () const
| Get enum constant radix. More...
tinfo_code_t | get_enum_repr (value_repr_t *repr) const
| Set the representation of enum members. More...
int | get_enum_width () const
| Get enum width. More...
uint64 | calc_enum_mask () const
ssize_t | get_edm (edm_t *out, const char *name) const
| Get enum member by its name. More...
tinfo_code_t | get_edm (edm_t *edm, size_t idx) const
| Get enum member by its index. More...
ssize_t | get_edm_by_value (edm_t *out, uint64 value, bmask64_t bmask=DEFMASK64, uchar serial=0) const
| Get enum member by its value. More...
tid_t | get_edm_tid (size_t idx) const
| Get enum member TID. More...
tinfo_t | get_onemember_type () const
| For objects consisting of one member entirely: return type of the member.
tinfo_t | get_innermost_udm (uint64 bitoffset, size_t *out_index=nullptr, uint64 *out_bitoffset=nullptr) const
| Get the innermost member at the given offset. More...
tinfo_t | get_innermost_member_type (uint64 bitoffset, uint64 *out_bitoffset=nullptr) const
| Get the innermost member type at the given offset. More...
uint32 | calc_score () const
| Calculate the type score (the higher - the nicer is the type)
bool | print (qstring *out, const char *name=nullptr, int prtype_flags=PRTYPE_1LINE, int indent=0, int cmtindent=0, const char *prefix=nullptr, const char *cmt=nullptr) const
| Get a C-like string representation of the type. More...
const char * | dstr () const
| Function to facilitate debugging.
bool | get_attrs (type_attrs_t *tav, bool all_attrs=false) const
| Get type attributes (all_attrs: include attributes of referenced types, if any)
bool | get_attr (const qstring &key, bytevec_t *bv, bool all_attrs=true) const
| Get a type attribute.
bool | set_attrs (type_attrs_t *tav)
| Set type attributes. More...
bool | set_attr (const type_attr_t &ta, bool may_overwrite=true)
| Set a type attribute. If necessary, a new typid will be created.
void | del_attrs ()
| Del all type attributes. typerefs cannot be modified by this function.
bool | del_attr (const qstring &key, bool make_copy=true)
| Del a type attribute. typerefs cannot be modified by this function.
bool | create_simple_type (type_t decl_type)
bool | create_ptr (const ptr_type_data_t &p, type_t decl_type=BT_PTR)
bool | create_array (const array_type_data_t &p, type_t decl_type=BT_ARRAY)
bool | create_bitfield (const bitfield_type_data_t &p, type_t decl_type=BT_BITFIELD)
bool | create_typedef (const typedef_type_data_t &p, type_t decl_type=BTF_TYPEDEF, bool try_ordinal=true)
bool | parse (const char *decl, til_t *til=nullptr, int pt_flags=0)
| Convenience function to parse a string with a type declaration. More...
bool | create_udt (bool is_union=false)
| Create an empty structure/union.
bool | create_enum (bte_t bte=BTE_ALWAYS|BTE_HEX)
| Create an empty enum.
ssize_t | get_by_edm_name (const char *mname, const til_t *til=nullptr)
| Retrieve enum tinfo using enum member name. More...
tinfo_code_t | create_forward_decl (til_t *til, type_t decl_type, const char *name, int ntf_flags=0)
| Create a forward declaration. More...
bool | convert_array_to_ptr ()
| Convert an array into a pointer. More...
bool | remove_ptr_or_array ()
| Replace the current type with the ptr obj or array element. More...
tinfo_code_t | set_type_alignment (uchar declalign, uint etf_flags=0)
| Set type alignment.
bool | change_sign (type_sign_t sign)
| Change the type sign. Works only for the types that may have sign.
bool | calc_udt_aligns (int sudt_flags=SUDT_GAPS)
| Calculate the udt alignments using the field offsets/sizes and the total udt size This function does not work on typerefs.
bool | set_methods (udtmembervec_t &methods)
| BT_COMPLEX: set the list of member functions. More...
tinfo_code_t | set_type_cmt (const char *cmt, bool is_regcmt=false, uint etf_flags=0)
| Set type comment This function works only for non-trivial types.
uint32 | get_alias_target () const
| Get type alias If the type has no alias, return 0. More...
bool | is_aliased () const
bool | set_type_alias (uint32 dest_ord)
| Set type alias Redirects all references to source type to the destination type. More...
tinfo_code_t | set_udt_alignment (int sda, uint etf_flags=0)
| Set declared structure alignment (sda) This alignment supersedes the alignment returned by get_declalign() and is really used when calculating the struct layout. More...
tinfo_code_t | set_udt_pack (int pack, uint etf_flags=0)
| Set structure packing. More...
tid_t | get_udm_tid (size_t idx) const
| Get udt member TID. More...
tinfo_code_t | add_udm (const udm_t &udm, uint etf_flags=0, size_t times=1, ssize_t idx=-1)
| Add a structure/union member. More...
tinfo_code_t | add_udm (const char *name, const tinfo_t &type, uint64 offset=0, uint etf_flags=0, size_t times=1, ssize_t idx=-1)
| Add a structure/union member. More...
tinfo_code_t | add_udm (const char *name, type_t type, uint64 offset=0, uint etf_flags=0, size_t times=1, ssize_t idx=-1)
| Add a structure/union member. More...
tinfo_code_t | add_udm (const char *name, const char *type, uint64 offset=0, uint etf_flags=0, size_t times=1, ssize_t idx=-1)
| Add a structure/union member. More...
tinfo_code_t | del_udm (size_t index, uint etf_flags=0)
| Delete a structure/union member.
tinfo_code_t | del_udms (size_t idx1, size_t idx2, uint etf_flags=0)
| Delete structure/union members in the range [idx1, idx2)
tinfo_code_t | rename_udm (size_t index, const char *name, uint etf_flags=0)
| Rename a structure/union member. More...
tinfo_code_t | set_udm_type (size_t index, const tinfo_t &tif, uint etf_flags=0, const value_repr_t *repr=nullptr)
| Set type of a structure/union member. More...
tinfo_code_t | set_udm_cmt (size_t index, const char *cmt, bool is_regcmt=false, uint etf_flags=0)
| Set a comment for a structure/union member. More...
tinfo_code_t | set_udm_repr (size_t index, const value_repr_t &repr, uint etf_flags=0)
| Set the representation of a structure/union member.
bool | is_udm_by_til (size_t idx) const
| Was the member created due to the type system. More...
tinfo_code_t | set_udm_by_til (size_t idx, bool on=true, uint etf_flags=0)
| The member is created due to the type system. More...
tinfo_code_t | set_fixed_struct (bool on=true)
| Declare struct member offsets as fixed. More...
tinfo_code_t | set_struct_size (size_t new_size)
| Explicitly specify the struct size. More...
bool | is_fixed_struct () const
| Is a structure with fixed offsets?
tinfo_code_t | expand_udt (size_t idx, adiff_t delta, uint etf_flags=0)
| Expand/shrink a structure by adding/removing a gap before the specified member. More...
bool | get_func_frame (const func_t *pfn)
| Create a tinfo_t object for the function frame. More...
bool | is_frame () const
| Is a function frame?
ea_t | get_frame_func () const
| Get function address for the frame.
ssize_t | get_stkvar (sval_t *actval, const insn_t &insn, const op_t *x, sval_t v)
| Retrieve frame tinfo for a stack variable. More...
tinfo_code_t | set_enum_width (int nbytes, uint etf_flags=0)
| Set the width of enum base type. More...
tinfo_code_t | set_enum_sign (type_sign_t sign, uint etf_flags=0)
| Set enum sign. More...
tinfo_code_t | set_enum_is_bitmask (bitmask_cvt_stance_t stance=ENUMBM_ON, uint etf_flags=0)
tinfo_code_t | set_enum_repr (const value_repr_t &repr, uint etf_flags=0)
| Set the representation of enum members. More...
tinfo_code_t | set_enum_radix (int radix, bool sign, uint etf_flags=0)
| Set enum radix to display constants. More...
tinfo_code_t | add_edm (const edm_t &edm, bmask64_t bmask=DEFMASK64, uint etf_flags=0, ssize_t idx=-1)
| Add a new enum member (a new symbolic constant) More...
tinfo_code_t | add_edm (const char *name, uint64 value, bmask64_t bmask=DEFMASK64, uint etf_flags=0, ssize_t idx=-1)
| Add a new enum member (a new symbolic constant) More...
tinfo_code_t | del_edms (size_t idx1, size_t idx2, uint etf_flags=0)
| Delete enum members. More...
tinfo_code_t | del_edm (size_t idx, uint etf_flags=0)
tinfo_code_t | del_edm (const char *name, uint etf_flags=0)
| Delete enum member by its name. More...
tinfo_code_t | del_edm_by_value (uint64 value, uint etf_flags=0, bmask64_t bmask=DEFMASK64, uchar serial=0)
| Delete enum member by its value. More...
tinfo_code_t | rename_edm (size_t idx, const char *name, uint etf_flags=0)
| Rename a enum member. More...
tinfo_code_t | set_edm_cmt (size_t idx, const char *cmt, uint etf_flags=0)
| Set a comment for an enum member. More...
tinfo_code_t | edit_edm (size_t idx, uint64 value, bmask64_t bmask=DEFMASK64, uint etf_flags=0)
| Change constant value and/or bitmask. More...
tinfo_code_t | rename_funcarg (size_t index, const char *name, uint etf_flags=0)
| Rename a function argument. More...
tinfo_code_t | set_funcarg_type (size_t index, const tinfo_t &tif, uint etf_flags=0)
| Set type of a function argument. More...
tinfo_code_t | set_func_rettype (const tinfo_t &tif, uint etf_flags=0)
| Set function return type . More...
tinfo_code_t | del_funcargs (size_t idx1, size_t idx2, uint etf_flags=0)
| Delete function arguments. More...
tinfo_code_t | del_funcarg (size_t idx, uint etf_flags=0)
tinfo_code_t | add_funcarg (const funcarg_t &farg, uint etf_flags=0, ssize_t idx=-1)
| Add a function argument. More...
tinfo_code_t | set_func_cc (cm_t cc, uint etf_flags=0)
| Set function calling convention.
tinfo_code_t | set_funcarg_loc (size_t index, const argloc_t &argloc, uint etf_flags=0)
| Set location of a function argument. More...
tinfo_code_t | set_func_retloc (const argloc_t &argloc, uint etf_flags=0)
| Set location of function return value. More...
bool | compare_with (const tinfo_t &r, int tcflags=0) const
| Compare two types, based on given flags (see tinfo_t comparison flags)
bool | equals_to (const tinfo_t &r) const
bool | is_castable_to (const tinfo_t &target) const
bool | is_manually_castable_to (const tinfo_t &target) const
Convenience functions
bool | create_ptr (const tinfo_t &tif, uchar bps=0, type_t decl_type=BT_PTR)
bool | create_array (const tinfo_t &tif, uint32 nelems=0, uint32 base=0, type_t decl_type=BT_ARRAY)
void | create_typedef (const til_t *til, const char *name, type_t decl_type=BTF_TYPEDEF, bool try_ordinal=true)
void | create_typedef (const til_t *til, uint ord, type_t decl_type=BTF_TYPEDEF)
bool | create_bitfield (uchar nbytes, uchar width, bool is_unsigned=false, type_t decl_type=BT_BITFIELD)
Warning
These functions consume 'p' (make it empty)
bool | create_udt (udt_type_data_t &p)
bool | create_udt (udt_type_data_t &p, type_t decl_type)
bool | create_enum (enum_type_data_t &p, type_t decl_type=BTF_ENUM)
bool | create_func (func_type_data_t &p, type_t decl_type=BT_FUNC)
ssize_t | get_udm_by_tid (udm_t *udm, tid_t tid)
| Retrive tinfo using type TID or struct/enum member MID. More...
ssize_t | get_edm_by_tid (edm_t *edm, tid_t tid)
bool | get_type_by_tid (tid_t tid)
Store type
Store the type info in the type library as a named or numbered type. The tinfo_t object will be replaced by a reference to the created type. Allowed bits for ntf_flags: NTF_NOBASE, NTF_REPLACE Note These methods are not applicable for the function frame
tinfo_code_t | set_named_type (til_t *til, const char *name, int ntf_flags=0)
tinfo_code_t | set_symbol_type (til_t *til, const char *name, int ntf_flags=0)
tinfo_code_t | set_numbered_type (til_t *til, uint32 ord, int ntf_flags=0, const char *name=nullptr)
tinfo_code_t | save_type (int ntf_flags=NTF_TYPE|NTF_REPLACE)
tinfo_code_t | copy_type (til_t *til, const char *name, int ntf_flags=NTF_TYPE|NTF_COPY)
Bitfields
Helper functions to store/extract bitfield values
uint64 | read_bitfield_value (uint64 v, int bitoff) const
uint64 | write_bitfield_value (uint64 dst, uint64 v, int bitoff) const
Modifiers
Work with type modifiers: const and volatile
type_t | get_modifiers () const
void | set_modifiers (type_t mod)
void | set_const ()
void | set_volatile ()
void | clr_decl_const_volatile ()
bool | clr_const ()
bool | clr_volatile ()
bool | clr_const_volatile ()

## Static Public Member Functions
static tinfo_t | get_stock (stock_type_id_t id)
| Get stock type information. More...

## Public Types
enum | bitmask_cvt_stance_t { ENUMBM_OFF = 0 , ENUMBM_ON = 1 , ENUMBM_AUTO = 2 }
| Set or clear the 'bitmask' attribute of an enum. More...

## Friends
struct | type_detail_t
tinfo_t | remove_pointer (const tinfo_t &tif)
| BT_PTR: If the current type is a pointer, return the pointed object. More...

## Member Enumeration Documentation

## ◆ bitmask_cvt_stance_t

enum tinfo_t::bitmask_cvt_stance_t

Set or clear the 'bitmask' attribute of an enum.

This attribute controls if the enum is considered as a collection of bits or a plain enum. Enums having the 'bitmask' attribute can be used to represent bitwise combination of the defined enum members.

Parameters

  stance | bitmask_cvt_stance_t
  etf_flags | etf_flag_t

Each group starts with a mask member. Group size is the number of enum constants in it, including group mask. GROUP_SIZES contains the group sizes. Sum of GROUPS_SIZES is equal to number of enum constants. If value is the only value in a group, no need for additional mask value.

Note
  1. If mask candidate is equal to the next constant then this is not a bitmask enum 2. Constant 0 could not be a mask

Enumerator
ENUMBM_OFF | convert to ordinal enum
ENUMBM_ON | convert to bitmask enum
ENUMBM_AUTO | convert to bitmask if the outcome is nice and useful

## Member Function Documentation

## ◆ get_named_type()

bool tinfo_t::get_named_type | ( | const til_t * | til,
|  | const char * | name,
|  | type_t | decl_type = `BTF_TYPEDEF`,
|  | bool | resolve = `true`,
|  | bool | try_ordinal = `true`
| ) |  |
| inline

Create a tinfo_t object for an existing named type.

Parameters

  til | type library to use
  name | name of the type to link to
  decl_type | if the reference was explicitly specified with the type tag (BTF_STRUCT/BTF_UNION/BTF_ENUM) you may specify it. the kernel will accept only the specified tag after resolving the type. If the resolved type does not correspond to the explicitly specified tag, the type will be considered as undefined
  resolve | true: immediately resolve the type and return success code. false: return true but do not immediately resolve the type
  try_ordinal | true: try to replace name reference by an ordinal reference

## ◆ get_numbered_type()

bool tinfo_t::get_numbered_type | ( | const til_t * | til,
|  | uint32 | ordinal,
|  | type_t | decl_type = `BTF_TYPEDEF`,
|  | bool | resolve = `true`
| ) |  |
| inline

Create a tinfo_t object for an existing ordinal type.

Parameters

  til | type library to use
  ordinal | number of the type to link to
  decl_type | if the reference was explicitly specified with the type tag (BTF_STRUCT/BTF_UNION/BTF_ENUM) you may specify it. the kernel will accept only the specified tag after resolving the type. If the resolved type does not correspond to the explicitly specified tag, the type will be considered as undefined
  resolve | true: immediately resolve the type and return success code false: return true but do not immediately resolve the type

## ◆ detach()

bool tinfo_t::detach | ( |  | ) |
| inline

Detach tinfo_t from the underlying type.

After calling this finction, tinfo_t will lose its link to the underlying named or numbered type (if any) and will become a reference to a unique type. After that, any modifications to tinfo_t will affect only its type.

## ◆ deserialize()

bool tinfo_t::deserialize | ( | const til_t * | til,
|  | const qtype * | ptype,
|  | const qtype * | pfields = `nullptr`,
|  | const qtype * | pfldcmts = `nullptr`,
|  | const char * | cmt = `nullptr`
| ) |  |
| inline

Deserialize a type string into a tinfo_t object.

## ◆ is_correct()

bool tinfo_t::is_correct | ( |  | ) | const
| inline

Is the type object correct?.

It is possible to create incorrect types. For example, we can define a function that returns an enum and then delete the enum type. If this function returns false, the type should not be used in disassembly. Please note that this function does not verify all involved types: for example, pointers to undefined types are permitted.

## ◆ get_realtype()

type_t tinfo_t::get_realtype | ( | bool | full = `false` | ) | const
| inline

Get the resolved base type.

Deserialization options:

- if full=true, the referenced type will be deserialized fully, this may not always be desirable (slows down things)
- if full=false, we just return the base type, the referenced type will be resolved again later if necessary (this may lead to multiple resolvings of the same type) imho full=false is a better approach because it does not perform unnecessary actions just in case. however, in some cases the caller knows that it is very likely that full type info will be required. in those cases full=true makes sense

## ◆ get_decltype()

THREAD_SAFE type_t tinfo_t::get_decltype | ( |  | ) | const
| inline

Get declared type (without resolving type references; they are returned as is).

Obviously this is a very fast function and should be used instead of get_realtype() if possible. Please note that for typerefs this function will return BTF_TYPEDEF. To determine if a typeref is a typedef, use is_typedef()

## ◆ get_size()

size_t tinfo_t::get_size | ( | uint32 * | p_effalign = `nullptr`,
|  | int | gts_code = `0`
| ) |  | const
| inline

Get the type size in bytes.

Parameters

  p_effalign | buffer for the alignment value
  gts_code | combination of GTS_... constants

Returns
  BADSIZE in case of problems

## ◆ get_unpadded_size()

size_t tinfo_t::get_unpadded_size | ( |  | ) | const
| inline

Get the type size in bytes without the final padding, in bytes.

For some UDTs get_unpadded_size() != get_size()

## ◆ get_alignment()

uint32 tinfo_t::get_alignment | ( |  | ) | const
| inline

Get type alignment This function returns the effective type alignment.

Zero means error.

## ◆ get_type_name()

bool tinfo_t::get_type_name | ( | qstring * | out | ) | const
| inline

Does a type refer to a name?.

If yes, fill the provided buffer with the type name and return true. Names are returned for numbered types too: either a user-defined nice name or, if a user-provided name does not exist, an ordinal name (like #xx, see create_numbered_type_name()).

## ◆ get_nice_type_name()

bool tinfo_t::get_nice_type_name | ( | qstring * | out | ) | const
| inline

Get the beautified type name.

Get the referenced name and apply regular expressions from goodname.cfg to beautify the name

## ◆ rename_type()

tinfo_code_t tinfo_t::rename_type | ( | const char * | name,
|  | int | ntf_flags = `0`
| ) |  |
| inline

Rename a type.

Parameters

  name | new type name
  ntf_flags | Flags for named types

Note
  The change is saved immediately

## ◆ get_final_type_name()

bool tinfo_t::get_final_type_name | ( | qstring * | out | ) | const
| inline

Use in the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn).

Returns
  the name of the last type in the chain (TYPEn). if there is no chain, returns TYPE1

## ◆ get_next_type_name()

bool tinfo_t::get_next_type_name | ( | qstring * | out | ) | const
| inline

Use In the case of typedef chain (TYPE1 -> TYPE2 -> TYPE3...TYPEn).

Returns
  the name of the next type in the chain (TYPE2). if there is no chain, returns failure

## ◆ get_tid()

tid_t tinfo_t::get_tid | ( |  | ) | const
| inline

Get the type tid Each type in the local type library has a so-called `tid` associated with it.

The tid is used to collect xrefs to the type. The tid is created when the type is created in the local type library and does not change afterwards. It can be passed to xref-related functions instead of the address.

Returns
  tid or BADADDR

Note
  types that do not come from a type library (that exist only in the memory) can not have a tid.

## ◆ force_tid()

tid_t tinfo_t::force_tid | ( |  | ) |
| inline

Get the type tid.

Create if it does not exist yet. If the type comes from a base til, the type will be copied to the local til and a new tid will be created for it. (if the type comes from a base til, it does not have a tid yet). If the type comes from the local til, this function is equivalent to get_tid()

Returns
  tid or BADADDR

## ◆ is_from_subtil()

bool tinfo_t::is_from_subtil | ( |  | ) | const
| inline

Was the named type found in some base type library (not the top level type library)?.

If yes, it usually means that the type comes from some loaded type library, not the local type library for the database

## ◆ is_forward_decl()

bool tinfo_t::is_forward_decl | ( |  | ) | const
| inline

Is this a forward declaration?.

Forward declarations are placeholders: the type definition does not exist

## ◆ get_forward_type()

type_t tinfo_t::get_forward_type | ( |  | ) | const
| inline

Get type of a forward declaration.

For a forward declaration this function returns its base type. In other cases it returns BT_UNK

## ◆ is_typedef()

bool tinfo_t::is_typedef | ( |  | ) | const
| inline

Is this a typedef?.

This function will return true for a reference to a local type that is declared as a typedef.

## ◆ get_type_cmt()

int tinfo_t::get_type_cmt | ( | qstring * | out | ) | const
| inline

Get type comment.

Returns
  0-failed, 1-returned regular comment, 2-returned repeatable comment

## ◆ get_ptrarr_object()

tinfo_t tinfo_t::get_ptrarr_object | ( |  | ) | const
| inline

BT_PTR & BT_ARRAY: get the pointed object or array element.

If the current type is not a pointer or array, return empty type info.

## ◆ get_pointed_object()

tinfo_t tinfo_t::get_pointed_object | ( |  | ) | const
| inline

BT_PTR: get type of pointed object.

If the current type is not a pointer, return empty type info. See also get_ptrarr_object() and remove_pointer()

## ◆ get_methods()

bool tinfo_t::get_methods | ( | udtmembervec_t * | methods | ) | const
| inline

BT_COMPLEX: get a list of member functions declared in this udt.

Returns
  false if no member functions exist

## ◆ get_bit_buckets()

bool tinfo_t::get_bit_buckets | ( | range64vec_t * | buckets | ) | const
| inline

::BT_STRUCT: get bit buckets Bit buckets are used to layout bitfields

Returns
  false if wrong type was passed

## ◆ find_udm() [1/3]

int tinfo_t::find_udm | ( | udm_t * | udm,
|  | int | strmem_flags
| ) |  | const
| inline

BTF_STRUCT,BTF_UNION: Find a udt member.

- at the specified offset (STRMEM_OFFSET)
- with the specified index (STRMEM_INDEX)
- with the specified type (STRMEM_TYPE)
- with the specified name (STRMEM_NAME)

Returns
  the index of the found member or -1

## ◆ find_udm() [2/3]

int tinfo_t::find_udm | ( | uint64 | offset,
|  | int | strmem_flags = `0`
| ) |  | const
| inline

BTF_STRUCT,BTF_UNION: Find an udt member at the specified offset

Returns
  the index of the found member or -1

## ◆ find_udm() [3/3]

int tinfo_t::find_udm | ( | const char * | name,
|  | int | strmem_flags = `0`
| ) |  | const
| inline

BTF_STRUCT,BTF_UNION: Find an udt member by name

Returns
  the index of the found member or -1

## ◆ get_udm() [1/2]

int tinfo_t::get_udm | ( | udm_t * | out,
|  | const char * | name
| ) |  | const
| inline

Retrieve a structure/union member with the specified name.

Parameters

  [out] | out | udm_t storage. Must not be nullptr
  | name | member name. Must not be nullptr

Returns
  the index of the found member, or -1

## ◆ get_udm() [2/2]

int tinfo_t::get_udm | ( | udm_t * | out,
|  | size_t | index
| ) |  | const
| inline

Retrieve a structure/union member with the specified index.

Parameters

  [out] | out | udm_t storage. Must not be nullptr
  | index | the member index

Returns
  the index of the found member, or -1

## ◆ get_udm_by_offset()

int tinfo_t::get_udm_by_offset | ( | udm_t * | out,
|  | uint64 | offset
| ) |  | const
| inline

Retrieve a structure/union member with the specified offset.

Parameters

  [out] | out | udm_t storage. Must not be nullptr
  | offset | member bit offset

Returns
  the index of the found member, or -1

## ◆ requires_qualifier()

bool tinfo_t::requires_qualifier | ( | qstring * | out,
|  | const char * | name,
|  | uint64 | offset
| ) |  | const
| inline

Requires full qualifier? (name is not unique)

Parameters

  [out] | out | qualifier. may be nullptr
  | name | field name
  | offset | field offset in bits

Returns
  if the name is not unique, returns true

## ◆ append_covered()

bool tinfo_t::append_covered | ( | rangeset_t * | out,
|  | uint64 | offset = `0`
| ) |  | const
| inline

Calculate set of covered bytes for the type.

Parameters

  out | pointer to the output buffer. covered bytes will be appended to it.
  offset | delta in bytes to add to all calculations. used internally during recurion.

## ◆ calc_gaps()

bool tinfo_t::calc_gaps | ( | rangeset_t * | out | ) | const
| inline

Calculate set of padding bytes for the type.

Parameters

  out | pointer to the output buffer; old buffer contents will be lost.

## ◆ get_enum_nmembers()

size_t tinfo_t::get_enum_nmembers | ( |  | ) | const
| inline

Get number of enum members.

Returns
  BADSIZE if error

## ◆ is_bitmask_enum()

bool tinfo_t::is_bitmask_enum | ( |  | ) | const
| inline

Is bitmask enum?

Returns
  true for bitmask enum and false in other cases enum_type_data_t::is_bf()

## ◆ get_enum_radix()

int tinfo_t::get_enum_radix | ( |  | ) | const
| inline

Get enum constant radix.

Returns
  radix or 1 for BTE_CHAR enum_type_data_t::get_enum_radix()

## ◆ get_enum_repr()

tinfo_code_t tinfo_t::get_enum_repr | ( | value_repr_t * | repr | ) | const
| inline

Set the representation of enum members.

Parameters

  repr | value_repr_t

## ◆ get_enum_width()

int tinfo_t::get_enum_width | ( |  | ) | const
| inline

Get enum width.

Returns
  width of enum base type in bytes, 0 - unspecified, or -1 enum_type_data_t::calc_nbytes()

## ◆ get_edm() [1/2]

ssize_t tinfo_t::get_edm | ( | edm_t * | out,
|  | const char * | name
| ) |  | const
| inline

Get enum member by its name.

Parameters

  [out] | out | enum type member, may be nullptr
  | name | enum member name. Must not be nullptr

Returns
  member index, otherwise returns -1.

## ◆ get_edm() [2/2]

tinfo_code_t tinfo_t::get_edm | ( | edm_t * | edm,
|  | size_t | idx
| ) |  | const
| inline

Get enum member by its index.

Parameters

  [out] | edm | enum type member
  | idx | enum member index

## ◆ get_edm_by_value()

ssize_t tinfo_t::get_edm_by_value | ( | edm_t * | out,
|  | uint64 | value,
|  | bmask64_t | bmask = `DEFMASK64`,
|  | uchar | serial = `0`
| ) |  | const
| inline

Get enum member by its value.

Parameters

  [out] | out | enum type member, may be nullptr
  | value |
  | serial |
  | bmask,in | case of DEFMASK64 the bitmask enum property is ignored

Returns
  member index, otherwise returns -1.

## ◆ get_edm_tid()

tid_t tinfo_t::get_edm_tid | ( | size_t | idx | ) | const
| inline

Get enum member TID.

Parameters

  idx | enum member index

Returns
  tid or BADADDR The tid is used to collect xrefs to the member, it can be passed to xref-related functions instead of the address.

## ◆ get_innermost_udm()

tinfo_t tinfo_t::get_innermost_udm | ( | uint64 | bitoffset,
|  | size_t * | out_index = `nullptr`,
|  | uint64 * | out_bitoffset = `nullptr`
| ) |  | const
| inline

Get the innermost member at the given offset.

Parameters

  | bitoffset | bit offset into the structure
  [out] | out_index | innermost member index
  [out] | out_bitoffset | remaining offset into the returned member

Return values

  udt | with the innermost member
  empty | type if it is not a struct type or OFFSET could not be found

## ◆ get_innermost_member_type()

tinfo_t tinfo_t::get_innermost_member_type | ( | uint64 | bitoffset,
|  | uint64 * | out_bitoffset = `nullptr`
| ) |  | const
| inline

Get the innermost member type at the given offset.

Parameters

  | bitoffset | bit offset into the structure
  [out] | out_bitoffset | remaining offset

Return values

  the | innermost member type

## ◆ print()

bool tinfo_t::print | ( | qstring * | out,
|  | const char * | name = `nullptr`,
|  | int | prtype_flags = `PRTYPE_1LINE`,
|  | int | indent = `0`,
|  | int | cmtindent = `0`,
|  | const char * | prefix = `nullptr`,
|  | const char * | cmt = `nullptr`
| ) |  | const
| inline

Get a C-like string representation of the type.

Parameters

  out | output string
  name | name of type
  prtype_flags | Type printing flags
  indent | structure level indent
  cmtindent | comment indent
  prefix | string prepended to each line
  cmt | comment text (if specified, overrides the type comment)

Returns
  success

## ◆ set_attrs()

bool tinfo_t::set_attrs | ( | type_attrs_t * | tav | ) |
| inline

Set type attributes.

If necessary, a new typid will be created. this function modifies tav! (returns old attributes, if any)

Returns
  false: bad attributes

## ◆ parse()

bool tinfo_t::parse | ( | const char * | decl,
|  | til_t * | til = `nullptr`,
|  | int | pt_flags = `0`
| ) |  |
| inline

Convenience function to parse a string with a type declaration.

Parameters

  decl | a type declaration
  til | type library to use
  pt_flags | combination of Type parsing flags bits

## ◆ get_udm_by_tid()

ssize_t tinfo_t::get_udm_by_tid | ( | udm_t * | udm,
|  | tid_t | tid
| ) |  |
| inline

Retrive tinfo using type TID or struct/enum member MID.

Parameters

  tid | tid can denote a type tid or a member tid.
  udm[out] | place to save the found member to, may be nullptr
  edm[out] | place to save the found member to, may be nullptr

Returns
  if a member tid was specified, returns the member index, otherwise returns -1. if the function fails, THIS object becomes empty.

## ◆ get_by_edm_name()

ssize_t tinfo_t::get_by_edm_name | ( | const char * | mname,
|  | const til_t * | til = `nullptr`
| ) |  |
| inline

Retrieve enum tinfo using enum member name.

Parameters

  til | type library
  mname | enum type member name

Returns
  member index, otherwise returns -1. If the function fails, THIS object becomes empty.

## ◆ create_forward_decl()

tinfo_code_t tinfo_t::create_forward_decl | ( | til_t * | til,
|  | type_t | decl_type,
|  | const char * | name,
|  | int | ntf_flags = `0`
| ) |  |
| inline

Create a forward declaration.

decl_type: BTF_STRUCT, BTF_UNION, or BTF_ENUM

## ◆ get_stock()

static tinfo_t tinfo_t::get_stock | ( | stock_type_id_t | id | ) |
| inline static

Get stock type information.

This function can be used to get tinfo_t for some common types. The same tinfo_t will be returned for the same id, thus saving memory and increasing the speed Please note that retrieving the STI_SIZE_T or STI_SSIZE_T stock type, will also have the side-effect of adding that type to the 'idati' TIL, under the well-known name 'size_t' or 'ssize_t' (respectively). The same is valid for STI_COMPLEX64 and STI_COMPLEX64 stock types with names 'complex64_t' and 'complex128_t' (respectively).

## ◆ convert_array_to_ptr()

bool tinfo_t::convert_array_to_ptr | ( |  | ) |
| inline

Convert an array into a pointer.

type[] => type *

## ◆ remove_ptr_or_array()

bool tinfo_t::remove_ptr_or_array | ( |  | ) |
| inline

Replace the current type with the ptr obj or array element.

This function performs one of the following conversions:

- type[] => type
- type* => type If the conversion is performed successfully, return true

## ◆ set_methods()

bool tinfo_t::set_methods | ( | udtmembervec_t & | methods | ) |
| inline

BT_COMPLEX: set the list of member functions.

This function consumes 'methods' (makes it empty).

Returns
  false if this type is not a udt, or if the given list is empty

## ◆ get_alias_target()

uint32 tinfo_t::get_alias_target | ( |  | ) | const
| inline

Get type alias If the type has no alias, return 0.

## ◆ set_type_alias()

bool tinfo_t::set_type_alias | ( | uint32 | dest_ord | ) |
| inline

Set type alias Redirects all references to source type to the destination type.

This is equivalent to instantaneous replacement all references to srctype by dsttype.

## ◆ set_udt_alignment()

tinfo_code_t tinfo_t::set_udt_alignment | ( | int | sda,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set declared structure alignment (sda) This alignment supersedes the alignment returned by get_declalign() and is really used when calculating the struct layout.

However, the effective structure alignment may differ from `sda` because of packing. The type editing functions (they accept etf_flags) may overwrite this attribute.

## ◆ set_udt_pack()

tinfo_code_t tinfo_t::set_udt_pack | ( | int | pack,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set structure packing.

The value controls how little a structure member alignment can be. Example: if pack=1, then it is possible to align a double to a byte. __attribute__((aligned(1))) double x; However, if pack=3, a double will be aligned to 8 (2**3) even if requested to be aligned to a byte. pack==0 will have the same effect. The type editing functions (they accept etf_flags) may overwrite this attribute.

## ◆ get_udm_tid()

tid_t tinfo_t::get_udm_tid | ( | size_t | idx | ) | const
| inline

Get udt member TID.

Parameters

  idx | the index of udt the member

Returns
  tid or BADADDR The tid is used to collect xrefs to the member, it can be passed to xref-related functions instead of the address.

## ◆ add_udm() [1/4]

tinfo_code_t tinfo_t::add_udm | ( | const udm_t & | udm,
|  | uint | etf_flags = `0`,
|  | size_t | times = `1`,
|  | ssize_t | idx = `-1`
| ) |  |
| inline

Add a structure/union member.

Parameters

  udm | member to add
  etf_flags | type changing flags flags
  times | how many times to add. if times > 1, the member name will be appended a suffix like "_2" and so on
  idx | the index in the udm array where the new udm should be placed. if the specified index cannot be honored because it would spoil the udm sorting order, it is silently ignored.

Note
  ETF_NO_SAVE is ignored

## ◆ add_udm() [2/4]

tinfo_code_t tinfo_t::add_udm | ( | const char * | name,
|  | const tinfo_t & | type,
|  | uint64 | offset = `0`,
|  | uint | etf_flags = `0`,
|  | size_t | times = `1`,
|  | ssize_t | idx = `-1`
| ) |  |
| inline

Add a structure/union member.

The member's size will be computed automatically.

Parameters

  name | Member name. Must not be nullptr or empty.
  type | Member type. Must not be empty. Can be any valid udt member type, like a pointer, array, etc.
  offset | Member offset in bits. It is the caller's responsibility to specify correct offsets.
  etf_flags | type changing flags flags
  times | how many times to add. if times > 1, the member name will be appended a suffix like "_2" and so on
  idx | the index in the udm array where the new udm should be placed. if the specified index cannot be honored because it would spoil the udm sorting order, it is silently ignored.

Note
  ETF_NO_SAVE is ignored

## ◆ add_udm() [3/4]

tinfo_code_t tinfo_t::add_udm | ( | const char * | name,
|  | type_t | type,
|  | uint64 | offset = `0`,
|  | uint | etf_flags = `0`,
|  | size_t | times = `1`,
|  | ssize_t | idx = `-1`
| ) |  |
| inline

Add a structure/union member.

The member's type will be created from 'type', and its size will be computed automatically.

Parameters

  name | Member name. Must not be nullptr or empty.
  type | Member type. Can be only a simple type (integral/floating/bool).
  offset | Member offset in bits. It is the caller's responsibility to specify correct offsets.
  etf_flags | type changing flags flags
  times | how many times to add. if times > 1, the member name will be appended a suffix like "_2" and so on
  idx | the index in the udm array where the new udm should be placed. if the specified index cannot be honored because it would spoil the udm sorting order, it is silently ignored.

Note
  ETF_NO_SAVE is ignored

## ◆ add_udm() [4/4]

tinfo_code_t tinfo_t::add_udm | ( | const char * | name,
|  | const char * | type,
|  | uint64 | offset = `0`,
|  | uint | etf_flags = `0`,
|  | size_t | times = `1`,
|  | ssize_t | idx = `-1`
| ) |  |
| inline

Add a structure/union member.

The member's type will be created by parsing 'type', and its size will be computed automatically.

Parameters

  name | Member name. Must not be nullptr or empty.
  type | Member type. A valid C type declaration.
  offset | Member offset in bits. It is the caller's responsibility to specify correct offsets.
  etf_flags | type changing flags flags
  times | how many times to add. if times > 1, the member name will be appended a suffix like "_2" and so on
  idx | the index in the udm array where the new udm should be placed. if the specified index cannot be honored because it would spoil the udm sorting order, it is silently ignored.

Note
  ETF_NO_SAVE is ignored

## ◆ rename_udm()

tinfo_code_t tinfo_t::rename_udm | ( | size_t | index,
|  | const char * | name,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Rename a structure/union member.

The new name must be unique.

Note
  ETF_NO_SAVE is ignored

## ◆ set_udm_type()

tinfo_code_t tinfo_t::set_udm_type | ( | size_t | index,
|  | const tinfo_t & | tif,
|  | uint | etf_flags = `0`,
|  | const value_repr_t * | repr = `nullptr`
| ) |  |
| inline

Set type of a structure/union member.

Parameters

  index | member index in the udm array
  tif | new type for the member
  etf_flags | etf_flag_t
  repr | new representation for the member (optional)

Returns
  tinfo_code_t

## ◆ set_udm_cmt()

tinfo_code_t tinfo_t::set_udm_cmt | ( | size_t | index,
|  | const char * | cmt,
|  | bool | is_regcmt = `false`,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set a comment for a structure/union member.

A member may have just one comment, and it is either repeatable or regular.

## ◆ is_udm_by_til()

bool tinfo_t::is_udm_by_til | ( | size_t | idx | ) | const
| inline

Was the member created due to the type system.

Parameters

  idx | index of the member

## ◆ set_udm_by_til()

tinfo_code_t tinfo_t::set_udm_by_til | ( | size_t | idx,
|  | bool | on = `true`,
|  | uint | etf_flags = `0`
| ) |  |
| inline

The member is created due to the type system.

Parameters

  idx | index of the member
  on |
  etf_flags | etf_flag_t

## ◆ set_fixed_struct()

tinfo_code_t tinfo_t::set_fixed_struct | ( | bool | on = `true` | ) |
| inline

Declare struct member offsets as fixed.

For such structures, IDA will not recalculate the member offsets. If a member does not fit into its place anymore, it will be deleted. This function works only with structures (not unions).

Parameters

  on |

## ◆ set_struct_size()

tinfo_code_t tinfo_t::set_struct_size | ( | size_t | new_size | ) |
| inline

Explicitly specify the struct size.

This function works only with fixed structures. The new struct size can be equal or higher the unpadded struct size (IOW, all existing members should fit into the specified size).

Parameters

  new_size | new structure size in bytes

## ◆ expand_udt()

tinfo_code_t tinfo_t::expand_udt | ( | size_t | idx,
|  | adiff_t | delta,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Expand/shrink a structure by adding/removing a gap before the specified member.

For regular structures, either the gap can be accommodated by aligning the next member with an alignment directive, or an explicit "gap" member will be inserted. Also note that it is impossible to add a gap at the end of a regular structure.

When it comes to fixed-layout structures, there is no need to either add new "gap" members or align existing members, since all members have a fixed offset. It is possible to add a gap at the end of a fixed-layout structure, by passing `-1` as index.

Parameters

  idx | index of the member
  delta | number of bytes to add or remove
  etf_flags | etf_flag_t

Note
  This function can be used to remove gaps in the middle of a structure by specifying a negative delta value.

## ◆ get_func_frame()

bool tinfo_t::get_func_frame | ( | const func_t * | pfn | ) |
| inline

Create a tinfo_t object for the function frame.

Parameters

  pfn | function

## ◆ get_stkvar()

ssize_t tinfo_t::get_stkvar | ( | sval_t * | actval,
|  | const insn_t & | insn,
|  | const op_t * | x,
|  | sval_t | v
| ) |  |
| inline

Retrieve frame tinfo for a stack variable.

Parameters

  actval[out] | actual value used to fetch stack variable, this pointer may point to 'v', may be nullptr
  insn | the instruction
  x | reference to instruction operand, may be nullptr
  v | immediate value in the operand (usually x.addr)

Returns
  returns the member index, otherwise returns -1. if the function fails, THIS object becomes empty.

## ◆ set_enum_width()

tinfo_code_t tinfo_t::set_enum_width | ( | int | nbytes,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set the width of enum base type.

Parameters

  nbytes | width of enum base type, allowed values: 0 (unspecified),1,2,4,8,16,32,64
  etf_flags | etf_flag_t

## ◆ set_enum_sign()

tinfo_code_t tinfo_t::set_enum_sign | ( | type_sign_t | sign,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set enum sign.

Parameters

  sign | type_sign_t
  etf_flags | etf_flag_t

## ◆ set_enum_repr()

tinfo_code_t tinfo_t::set_enum_repr | ( | const value_repr_t & | repr,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set the representation of enum members.

Parameters

  repr | value_repr_t
  etf_flags | etf_flag_t

## ◆ set_enum_radix()

tinfo_code_t tinfo_t::set_enum_radix | ( | int | radix,
|  | bool | sign,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set enum radix to display constants.

Parameters

  radix | radix 2, 4, 8, 16, with the special case 1 to display as character
  sign | display as signed or unsigned
  etf_flags | etf_flag_t

## ◆ add_edm() [1/2]

tinfo_code_t tinfo_t::add_edm | ( | const edm_t & | edm,
|  | bmask64_t | bmask = `DEFMASK64`,
|  | uint | etf_flags = `0`,
|  | ssize_t | idx = `-1`
| ) |  |
| inline

Add a new enum member (a new symbolic constant)

Parameters

  edm | the constant name, value, and comment
  bmask | bmask of the group to add the constant to
  etf_flags | etf_flag_t ETF_FORCENAME may be used in case of TERR_ALIEN_NAME
  idx | the index in the edm array where the new edm should be placed. if the specified index cannot be honored because it would spoil the edm sorting order, it is silently ignored.

Note
  1. For non-bitmask enums, `bmask` is ignored 2. For bitmask enums:
  - `edm.value` must be covered by `bmask`
  - if `bmask` is equal to DEFMASK64 then `edm.value` is used as `bmask`
  - if group with `bmask` exists, the member will be added to that group
  - otherwise use constant as bitmask for a new group
  ETF_NO_SAVE is ignored

## ◆ add_edm() [2/2]

tinfo_code_t tinfo_t::add_edm | ( | const char * | name,
|  | uint64 | value,
|  | bmask64_t | bmask = `DEFMASK64`,
|  | uint | etf_flags = `0`,
|  | ssize_t | idx = `-1`
| ) |  |
| inline

Add a new enum member (a new symbolic constant)

Parameters

  name | the constant name
  value | the constant value
  bmask | bmask of the group to add the constant to
  etf_flags | etf_flag_t ETF_FORCENAME may be used in case of TERR_ALIEN_NAME
  idx | the index in the edm array where the new edm should be placed. if the specified index cannot be honored because it would spoil the edm sorting order, it is silently ignored.

## ◆ del_edms()

tinfo_code_t tinfo_t::del_edms | ( | size_t | idx1,
|  | size_t | idx2,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Delete enum members.

Parameters

  idx1 | index in edmvec_t
  idx2 | index in edmvec_t or size_t(-1)
  etf_flags | etf_flag_t Delete enum members in [idx1, idx2)

Note
  For bitmask enum, the first member of a non-trivial group (having 2 or more members) is considered as a group mask. It is impossible to delete the group mask of a non-trivial group, other members of the group must be deleted first. Empty groups are automatically deleted.

## ◆ del_edm()

tinfo_code_t tinfo_t::del_edm | ( | const char * | name,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Delete enum member by its name.

Parameters

  name | the enumerator name (cannot be nullptr)
  etf_flags | etf_flag_t

Returns
  tinfo_code_t

## ◆ del_edm_by_value()

tinfo_code_t tinfo_t::del_edm_by_value | ( | uint64 | value,
|  | uint | etf_flags = `0`,
|  | bmask64_t | bmask = `DEFMASK64`,
|  | uchar | serial = `0`
| ) |  |
| inline

Delete enum member by its value.

Parameters

  value | the enumerator value
  etf_flags | etf_flag_t
  bmask,in | case of DEFMASK64 the bitmask enum property is ignored
  serial |

Returns
  tinfo_code_t

## ◆ rename_edm()

tinfo_code_t tinfo_t::rename_edm | ( | size_t | idx,
|  | const char * | name,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Rename a enum member.

Parameters

  idx | index in edmvec_t
  name | new name
  etf_flags | etf_flag_t ETF_FORCENAME may be used in case of TERR_ALIEN_NAME

Note
  ETF_NO_SAVE is ignored

## ◆ set_edm_cmt()

tinfo_code_t tinfo_t::set_edm_cmt | ( | size_t | idx,
|  | const char * | cmt,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set a comment for an enum member.

Such comments are always considered as repeatable.

Parameters

  idx | index in edmvec_t
  cmt | comment
  etf_flags | etf_flag_t

## ◆ edit_edm()

tinfo_code_t tinfo_t::edit_edm | ( | size_t | idx,
|  | uint64 | value,
|  | bmask64_t | bmask = `DEFMASK64`,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Change constant value and/or bitmask.

Parameters

  idx | index in edmvec_t
  value | old or new value
  bmask | old or new bitmask
  etf_flags | etf_flag_t

Note
  if new bitmask is specified the index of constant may be changed

## ◆ rename_funcarg()

tinfo_code_t tinfo_t::rename_funcarg | ( | size_t | index,
|  | const char * | name,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Rename a function argument.

The new name must be unique.

Parameters

  index | argument index in the function array
  name | new name
  etf_flags | etf_flag_t

Note
  ETF_NO_SAVE is ignored

## ◆ set_funcarg_type()

tinfo_code_t tinfo_t::set_funcarg_type | ( | size_t | index,
|  | const tinfo_t & | tif,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set type of a function argument.

Parameters

  index | argument index in the function array
  tif | new type for the argument
  etf_flags | etf_flag_t

Returns
  tinfo_code_t

## ◆ set_func_rettype()

tinfo_code_t tinfo_t::set_func_rettype | ( | const tinfo_t & | tif,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set function return type .

Parameters

  tif | new type for the return type
  etf_flags | etf_flag_t

Returns
  tinfo_code_t

## ◆ del_funcargs()

tinfo_code_t tinfo_t::del_funcargs | ( | size_t | idx1,
|  | size_t | idx2,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Delete function arguments.

Parameters

  idx1 | index in funcargvec_t
  idx2 | index in funcargvec_t or size_t(-1)
  etf_flags | etf_flag_t Delete function arguments in [idx1, idx2)

## ◆ add_funcarg()

tinfo_code_t tinfo_t::add_funcarg | ( | const funcarg_t & | farg,
|  | uint | etf_flags = `0`,
|  | ssize_t | idx = `-1`
| ) |  |
| inline

Add a function argument.

Parameters

  farg | argument to add
  etf_flags | type changing flags flags
  idx | the index in the funcarg array where the new funcarg should be placed. if the specified index cannot be honored because it would spoil the funcarg sorting order, it is silently ignored.

Note
  ETF_NO_SAVE is ignored

## ◆ set_funcarg_loc()

tinfo_code_t tinfo_t::set_funcarg_loc | ( | size_t | index,
|  | const argloc_t & | argloc,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set location of a function argument.

Parameters

  index | argument index in the function array
  argloc | new location for the argument
  etf_flags | etf_flag_t

Returns
  tinfo_code_t

## ◆ set_func_retloc()

tinfo_code_t tinfo_t::set_func_retloc | ( | const argloc_t & | argloc,
|  | uint | etf_flags = `0`
| ) |  |
| inline

Set location of function return value.

Parameters

  argloc | new location for the return value
  etf_flags | etf_flag_t

Returns
  tinfo_code_t

## Friends And Related Function Documentation

## ◆ remove_pointer

tinfo_t remove_pointer | ( | const tinfo_t & | tif | ) |
| friend

BT_PTR: If the current type is a pointer, return the pointed object.

If the current type is not a pointer, return the current type. See also get_ptrarr_object() and get_pointed_object()

The documentation for this class was generated from the following file:

- typeinf.hpp