IDA SDK
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_toperator= (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...
 
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_tget_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

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
stancebitmask_cvt_stance_t
etf_flagsetf_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
tiltype library to use
namename of the type to link to
decl_typeif 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
resolvetrue: immediately resolve the type and return success code. false: return true but do not immediately resolve the type
try_ordinaltrue: 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
tiltype library to use
ordinalnumber of the type to link to
decl_typeif 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
resolvetrue: 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_effalignbuffer for the alignment value
gts_codecombination 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_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
namenew type name
ntf_flagsFlags 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.

◆ 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]outudm_t storage. Must not be nullptr
namemember 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]outudm_t storage. Must not be nullptr
indexthe 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]outudm_t storage. Must not be nullptr
offsetmember 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]outqualifier. may be nullptr
namefield name
offsetfield 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
outpointer to the output buffer. covered bytes will be appended to it.
offsetdelta 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
outpointer 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
reprvalue_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]outenum type member, may be nullptr
nameenum 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]edmenum type member
idxenum 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]outenum type member, may be nullptr
value
serial
bmask,incase 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
idxenum 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
bitoffsetbit offset into the structure
[out]out_indexinnermost member index
[out]out_bitoffsetremaining offset into the returned member
Return values
udtwith the innermost member
emptytype 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
bitoffsetbit offset into the structure
[out]out_bitoffsetremaining offset
Return values
theinnermost 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
outoutput string
namename of type
prtype_flagsType printing flags
indentstructure level indent
cmtindentcomment indent
prefixstring prepended to each line
cmtcomment 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
decla type declaration
tiltype library to use
pt_flagscombination 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
tidtid 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
tiltype library
mnameenum 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)
inlinestatic

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
idxthe 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
udmmember to add
etf_flagstype changing flags flags
timeshow many times to add. if times > 1, the member name will be appended a suffix like "_2" and so on
idxthe 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
nameMember name. Must not be nullptr or empty.
typeMember type. Must not be empty. Can be any valid udt member type, like a pointer, array, etc.
offsetMember offset in bits. It is the caller's responsibility to specify correct offsets.
etf_flagstype changing flags flags
timeshow many times to add. if times > 1, the member name will be appended a suffix like "_2" and so on
idxthe 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
nameMember name. Must not be nullptr or empty.
typeMember type. Can be only a simple type (integral/floating/bool).
offsetMember offset in bits. It is the caller's responsibility to specify correct offsets.
etf_flagstype changing flags flags
timeshow many times to add. if times > 1, the member name will be appended a suffix like "_2" and so on
idxthe 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
nameMember name. Must not be nullptr or empty.
typeMember type. A valid C type declaration.
offsetMember offset in bits. It is the caller's responsibility to specify correct offsets.
etf_flagstype changing flags flags
timeshow many times to add. if times > 1, the member name will be appended a suffix like "_2" and so on
idxthe 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
indexmember index in the udm array
tifnew type for the member
etf_flagsetf_flag_t
reprnew 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
idxindex 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
idxindex of the member
on
etf_flagsetf_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_sizenew 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
idxindex of the member
deltanumber of bytes to add or remove
etf_flagsetf_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
pfnfunction

◆ 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
insnthe instruction
xreference to instruction operand, may be nullptr
vimmediate 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
nbyteswidth of enum base type, allowed values: 0 (unspecified),1,2,4,8,16,32,64
etf_flagsetf_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
signtype_sign_t
etf_flagsetf_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
reprvalue_repr_t
etf_flagsetf_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
radixradix 2, 4, 8, 16, with the special case 1 to display as character
signdisplay as signed or unsigned
etf_flagsetf_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
edmthe constant name, value, and comment
bmaskbmask of the group to add the constant to
etf_flagsetf_flag_t ETF_FORCENAME may be used in case of TERR_ALIEN_NAME
idxthe 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
namethe constant name
valuethe constant value
bmaskbmask of the group to add the constant to
etf_flagsetf_flag_t ETF_FORCENAME may be used in case of TERR_ALIEN_NAME
idxthe 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
idx1index in edmvec_t
idx2index in edmvec_t or size_t(-1)
etf_flagsetf_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
namethe enumerator name (cannot be nullptr)
etf_flagsetf_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
valuethe enumerator value
etf_flagsetf_flag_t
bmask,incase 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
idxindex in edmvec_t
namenew name
etf_flagsetf_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
idxindex in edmvec_t
cmtcomment
etf_flagsetf_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
idxindex in edmvec_t
valueold or new value
bmaskold or new bitmask
etf_flagsetf_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
indexargument index in the function array
namenew name
etf_flagsetf_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
indexargument index in the function array
tifnew type for the argument
etf_flagsetf_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
tifnew type for the return type
etf_flagsetf_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
idx1index in funcargvec_t
idx2index in funcargvec_t or size_t(-1)
etf_flagsetf_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
fargargument to add
etf_flagstype changing flags flags
idxthe 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
indexargument index in the function array
arglocnew location for the argument
etf_flagsetf_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
arglocnew location for the return value
etf_flagsetf_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: