| IDA SDK

Classes | Functions | Macros | Typedefs | Enumerations | Variables
typeinf.hpp File Reference

## Detailed Description

Type information in IDA.

In IDA, types are represented by and manipulated through tinfo_t objects.

A tinfo_t can represent a simple type (e.g., `int`, `float`), a complex type (a structure, enum, union, typedef), or even an array, or a function prototype.

The key types in this file are:

- til_t - a type info library. Holds type information in serialized form.
- tinfo_t - information about a type (simple, complex, ...)

# Glossary

All throughout this file, there are certain terms that will keep appearing:

- udt: "user-defined type": a structure or union - but not enums. See udt_type_data_t
- udm: "udt member": i.e., a structure or union member. See udm_t
- edm: "enum member": i.e., an enumeration member - i.e., an enumerator. See edm_t

# Under the hood

The tinfo_t type provides a lot of useful methods already, but it's possible to achieve even more by retrieving its contents into the container classes:

- udt_type_data_t - for structures & unions. See tinfo_t::get_udt_details . Essentially, a vector of udm_t
- enum_type_data_t - for enumerations. See tinfo_t::get_enum_details . Essentially, a vector of edm_t
- ptr_type_data_t - for pointers. See tinfo_t::get_ptr_details
- array_type_data_t - for arrays. See tinfo_t::get_array_details
- func_type_data_t - for function prototypes. See tinfo_t::get_func_details
- bitfield_type_data_t - for bitfields. See tinfo_t::get_bitfield_details

# Attached & detached tinfo_t objects

tinfo_t objects can be attached to a til_t library, or can be created without using any til_t.

Here is an example, assigning a function prototype:

func_type_data_t func_info;

funcarg_t argc; argc.name = "argc"; argc.type = tinfo_t(BT_INT); func_info.push_back(argc);

funcarg_t argv; argc.name = "argv"; argc.type = tinfo_t("const char **"); func_info.push_back(argv)

tinfo_t tif; if ( tif.create_func(func_info) ) { ea_t ea = // get address of "main" apply_tinfo(ea, tif, TINFO_DEFINITE); }

This code manipulates a "detached" tinfo_t object, which does not depend on any til_t file. However, any complex type will require a til_t file. In IDA, there is always a default til_t file for each idb file. This til_t file can be specified by nullptr.

On the other hand, the following code manipulates an "attached" tinfo_t object, and any operation that modifies it, will also modify it in the hosting til_t:

tinfo_t tif; Load type from the "Local Types" til_t. Note: we could have used `get_idati()` instead of nullptr if ( tif.get_named_type(nullptr, "my_struct_t") ) tif.add_udm("extra_field", "unsigned long long");

You can check if a tinfo_t instance is attached to a type in a til_t file by calling tinfo_t::is_typeref

## Classes
struct | type_attr_t
struct | til_t
| Type Information Library. More...
struct | rrel_t
| Register-relative argument location. More...
struct | custloc_desc_t
| Description of a custom argloc. More...
class | argloc_t
| Describes an argument location. More...
struct | argpart_t
| Subsection of an argument location. More...
class | scattered_aloc_t
| Used to manage arguments that are described by multiple locations (also see ALOC_DIST) More...
struct | aloc_visitor_t
| Visit all argument locations. More...
struct | const_aloc_visitor_t
| Same as aloc_visitor_t, but may not modify the argloc. More...
class | callregs_t
| Register allocation calling convention. More...
class | tinfo_t
| Primary mechanism for managing type information. More...
struct | simd_info_t
| SIMD type info. More...
struct | ptr_type_data_t
| Pointer type information (see tinfo_t::get_ptr_details()) More...
struct | array_type_data_t
| Array type information (see tinfo_t::get_array_details()) More...
struct | funcarg_t
| Information about a single function argument. More...
struct | func_type_data_t
| Function type information (see tinfo_t::get_func_details()) More...
struct | stkarg_area_info_t
| Some calling conventions foresee special areas on the stack for call arguments. More...
struct | edm_t
| This structure describes an enum value. More...
struct | enum_type_data_t
| Enum type information (see tinfo_t::get_enum_details()) More...
struct | typedef_type_data_t
| Type information for typedefs. More...
struct | custom_data_type_info_t
struct | value_repr_t
| Visual representation of a member of a complex type (struct/union/enum) More...
struct | udm_t
| An object to represent struct or union members. More...
struct | udtmembervec_t
| vector of udt member objects More...
struct | udt_type_data_t
struct | udm_visitor_t
struct | bitfield_type_data_t
| Bitfield type information (see tinfo_t::get_bitfield_details()) More...
struct | type_mods_t
| Information about how to modify the current type, used by tinfo_visitor_t. More...
struct | tinfo_visitor_t
| Visit all subtypes of a type. Derive your visitor from this class and use apply_to() More...
struct | regobj_t
| Object that represents a register. More...
struct | regobjs_t
struct | argtinfo_helper_t
class | lowertype_helper_t
| Interface class - see ida_lowertype_helper_t. More...
class | ida_lowertype_helper_t
| An implementation of lowertype_helper_t that has access to the IDB, and thus can help spot holes in the stack arguments. More...
struct | format_data_info_t
| See format_cdata() More...
struct | valinfo_t
| Additional information about the output lines. More...
class | valstr_t
| Text representation of a data value (value string). More...
struct | valstrs_t
| Collection of value strings. More...
struct | text_sink_t
| Flush formatted text. More...
struct | til_symbol_t
| A symbol in a type library. More...
struct | predicate_t
| Helper class for choose_named_type(). More...
struct | til_type_ref_t

## Functions
THREAD_SAFE bool | is_type_const (type_t t)
| See BTM_CONST.
THREAD_SAFE bool | is_type_volatile (type_t t)
| See BTM_VOLATILE.
THREAD_SAFE type_t | get_base_type (type_t t)
| Get get basic type bits (TYPE_BASE_MASK)
THREAD_SAFE type_t | get_type_flags (type_t t)
| Get type flags (TYPE_FLAGS_MASK)
THREAD_SAFE type_t | get_full_type (type_t t)
| Get basic type bits + type flags (TYPE_FULL_MASK)
THREAD_SAFE bool | is_typeid_last (type_t t)
| Is the type_t the last byte of type declaration? (there are no additional bytes after a basic type, see _BT_LAST_BASIC)
THREAD_SAFE bool | is_type_partial (type_t t)
| Identifies an unknown or void type with a known size (see Basic type: unknown & void)
THREAD_SAFE bool | is_type_void (type_t t)
| See BTF_VOID.
THREAD_SAFE bool | is_type_unknown (type_t t)
| See BT_UNKNOWN.
THREAD_SAFE bool | is_type_ptr (type_t t)
| See BT_PTR.
THREAD_SAFE bool | is_type_complex (type_t t)
| See BT_COMPLEX.
THREAD_SAFE bool | is_type_func (type_t t)
| See BT_FUNC.
THREAD_SAFE bool | is_type_array (type_t t)
| See BT_ARRAY.
THREAD_SAFE bool | is_type_typedef (type_t t)
| See BTF_TYPEDEF.
THREAD_SAFE bool | is_type_sue (type_t t)
| Is the type a struct/union/enum?
THREAD_SAFE bool | is_type_struct (type_t t)
| See BTF_STRUCT.
THREAD_SAFE bool | is_type_union (type_t t)
| See BTF_UNION.
THREAD_SAFE bool | is_type_struni (type_t t)
| Is the type a struct or union?
THREAD_SAFE bool | is_type_enum (type_t t)
| See BTF_ENUM.
THREAD_SAFE bool | is_type_bitfld (type_t t)
| See BT_BITFIELD.
THREAD_SAFE bool | is_type_int (type_t bt)
| Does the type_t specify one of the basic types in Basic type: integer?
THREAD_SAFE bool | is_type_int128 (type_t t)
| Does the type specify a 128-bit value? (signed or unsigned, see Basic type: integer)
THREAD_SAFE bool | is_type_int64 (type_t t)
| Does the type specify a 64-bit value? (signed or unsigned, see Basic type: integer)
THREAD_SAFE bool | is_type_int32 (type_t t)
| Does the type specify a 32-bit value? (signed or unsigned, see Basic type: integer)
THREAD_SAFE bool | is_type_int16 (type_t t)
| Does the type specify a 16-bit value? (signed or unsigned, see Basic type: integer)
THREAD_SAFE bool | is_type_char (type_t t)
| Does the type specify a char value? (signed or unsigned, see Basic type: integer)
THREAD_SAFE bool | is_type_paf (type_t t)
| Is the type a pointer, array, or function type?
THREAD_SAFE bool | is_type_ptr_or_array (type_t t)
| Is the type a pointer or array type?
THREAD_SAFE bool | is_type_floating (type_t t)
| Is the type a floating point type?
THREAD_SAFE bool | is_type_integral (type_t t)
| Is the type an integral type (char/short/int/long/bool)?
THREAD_SAFE bool | is_type_ext_integral (type_t t)
| Is the type an extended integral type? (integral or enum)
THREAD_SAFE bool | is_type_arithmetic (type_t t)
| Is the type an arithmetic type? (floating or integral)
THREAD_SAFE bool | is_type_ext_arithmetic (type_t t)
| Is the type an extended arithmetic type? (arithmetic or enum)
THREAD_SAFE bool | is_type_uint (type_t t)
| See BTF_UINT.
THREAD_SAFE bool | is_type_uchar (type_t t)
| See BTF_UCHAR.
THREAD_SAFE bool | is_type_uint16 (type_t t)
| See BTF_UINT16.
THREAD_SAFE bool | is_type_uint32 (type_t t)
| See BTF_UINT32.
THREAD_SAFE bool | is_type_uint64 (type_t t)
| See BTF_UINT64.
THREAD_SAFE bool | is_type_uint128 (type_t t)
| See BTF_UINT128.
THREAD_SAFE bool | is_type_ldouble (type_t t)
| See BTF_LDOUBLE.
THREAD_SAFE bool | is_type_double (type_t t)
| See BTF_DOUBLE.
THREAD_SAFE bool | is_type_float (type_t t)
| See BTF_FLOAT.
THREAD_SAFE bool | is_type_tbyte (type_t t)
| See BTF_FLOAT.
THREAD_SAFE bool | is_type_bool (type_t t)
| See BTF_BOOL.
THREAD_SAFE bool | is_tah_byte (type_t t)
| The TAH byte (type attribute header byte) denotes the start of type attributes. More...
THREAD_SAFE bool | is_sdacl_byte (type_t t)
| Identify an sdacl byte. More...
THREAD_SAFE bool | operator< (const bytevec_t &v1, const bytevec_t &v2)
| Compare two bytevecs with '<'. More...
idaman bool ida_export | append_argloc (qtype *out, const argloc_t &vloc)
| Serialize argument location.
idaman bool ida_export | extract_argloc (argloc_t *vloc, const type_t **ptype, bool forbid_stkoff)
| Deserialize an argument location. More...
idaman const type_t *ida_export | resolve_typedef (const til_t *til, const type_t *type)
bool | is_restype_void (const til_t *til, const type_t *type)
bool | is_restype_enum (const til_t *til, const type_t *type)
bool | is_restype_struni (const til_t *til, const type_t *type)
bool | is_restype_struct (const til_t *til, const type_t *type)
idaman type_t ida_export | get_scalar_bt (int size)
idaman til_t *ida_export | new_til (const char *name, const char *desc)
| Initialize a til.
idaman int ida_export | add_base_tils (qstring *errbuf, til_t *ti, const char *tildir, const char *bases, bool gen_events)
| Add multiple base tils. More...
idaman til_t *ida_export | load_til (const char *name, qstring *errbuf, const char *tildir=nullptr)
| Load til from a file without adding it to the database list (see also add_til). More...
idaman bool ida_export | sort_til (til_t *ti)
| Sort til (use after modifying it). More...
idaman bool ida_export | compact_til (til_t *ti)
| Collect garbage in til. More...
idaman bool ida_export | store_til (til_t *ti, const char *tildir, const char *name)
| Store til to a file. More...
idaman void ida_export | free_til (til_t *ti)
| Free memory allocated by til.
idaman til_t *ida_export | load_til_header (const char *tildir, const char *name, qstring *errbuf)
| Get human-readable til description.
THREAD_SAFE bool | is_code_far (cm_t cm)
| Does the given model specify far code?.
THREAD_SAFE bool | is_data_far (cm_t cm)
| Does the given model specify far data?.
idaman int ida_export | install_custom_argloc (const custloc_desc_t *custloc)
| Save a custom argloc.
idaman bool ida_export | remove_custom_argloc (int idx)
| Delete the custom argloc at the given index.
idaman const custloc_desc_t *ida_export | retrieve_custom_argloc (int idx)
| Retrieve the custom argloc at the given index.
idaman int ida_export | verify_argloc (const argloc_t &vloc, int size, const rangeset_t *gaps)
| Verify argloc_t. More...
idaman bool ida_export | optimize_argloc (argloc_t *vloc, int size, const rangeset_t *gaps)
| Verify and optimize scattered argloc into simple form. More...
idaman size_t ida_export | print_argloc (char *buf, size_t bufsize, const argloc_t &vloc, int size=0, int vflags=0)
| Convert an argloc to human readable form.
idaman int ida_export | for_all_arglocs (aloc_visitor_t &vv, argloc_t &vloc, int size, int off=0)
| Compress larger argloc types and initiate the aloc visitor.
int idaapi | for_all_const_arglocs (const_aloc_visitor_t &vv, const argloc_t &vloc, int size, int off=0)
| See for_all_arglocs()
constexpr THREAD_SAFE cm_t | get_cc (cm_t cm)
| Get the calling convention.
cm_t | get_effective_cc (cm_t cm)
| Get effective calling convention (with respect to default CC)
constexpr THREAD_SAFE bool | is_user_cc (cm_t cm)
| Does the calling convention specify argument locations explicitly?
constexpr THREAD_SAFE bool | is_vararg_cc (cm_t cm)
| Does the calling convention use ellipsis?
constexpr THREAD_SAFE bool | is_purging_cc (cm_t cm)
| Does the calling convention clean the stack arguments upon return?. More...
constexpr bool | is_golang_cc (cm_t cc)
| GO language calling convention (return value in stack)?
constexpr bool | is_swift_cc (cm_t cc)
| Swift calling convention (arguments and return values in registers)?
THREAD_SAFE comp_t | get_comp (comp_t comp)
| Get compiler bits.
idaman const char *ida_export | get_compiler_name (comp_t id)
| Get full compiler name.
idaman const char *ida_export | get_compiler_abbr (comp_t id)
| Get abbreviated compiler name.
idaman void ida_export | get_compilers (compvec_t *ids, qstrvec_t *names, qstrvec_t *abbrs)
| Get names of all built-in compilers.
THREAD_SAFE comp_t | is_comp_unsure (comp_t comp)
| See COMP_UNSURE.
comp_t | default_compiler ()
| Get compiler specified by inf.cc.
bool | is_gcc ()
| Is the target compiler COMP_GNU?
bool | is_gcc32 ()
| Is the target compiler 32 bit gcc?
bool | is_gcc64 ()
| Is the target compiler 64 bit gcc?
bool | gcc_layout ()
| Should use the struct/union layout as done by gcc?
idaman bool ida_export | set_compiler (const compiler_info_t &cc, int flags, const char *abiname=nullptr)
| Change current compiler. More...
bool idaapi | set_compiler_id (comp_t id, const char *abiname=nullptr)
| Set the compiler id (see Compiler IDs)
bool idaapi | set_abi_name (const char *abiname, bool user_level=false)
| Set abi name (see Compiler IDs)
idaman ssize_t ida_export | get_abi_name (qstring *out)
| Get ABI name. More...
idaman bool ida_export | append_abi_opts (const char *abi_opts, bool user_level=false)
| Add/remove/check ABI option General form of full abi name: abiname-opt1-opt2-... or -opt1-opt2-... More...
idaman bool ida_export | remove_abi_opts (const char *abi_opts, bool user_level=false)
idaman bool ida_export | set_compiler_string (const char *compstr, bool user_level)
bool | use_golang_cc ()
| is GOLANG calling convention used by default?
void | switch_to_golang ()
| switch to GOLANG calling convention (to be used as default CC)
idaman int ida_export | h2ti (til_t *ti, lexer_t *lx, const char *input, int flags=HTI_HIGH, h2ti_type_cb *type_cb=nullptr, h2ti_type_cb *var_cb=nullptr, printer_t *print_cb=nullptr, void *_cb_data=nullptr, abs_t _isabs=ABS_UNK)
| Convert declarations to type_t*. More...
THREAD_SAFE int | convert_pt_flags_to_hti (int pt_flags)
| Convert Type parsing flags to Type formatting flags. More...
idaman bool ida_export | parse_decl (tinfo_t *out_tif, qstring *out_name, til_t *til, const char *decl, int pt_flags)
| Parse ONE declaration. More...
idaman int ida_export | parse_decls (til_t *til, const char *input, printer_t *printer, int hti_flags)
| Parse many declarations and store them in a til. More...
idaman bool ida_export | print_type (qstring *out, ea_t ea, int prtype_flags)
| Get type declaration for the specified address. More...
idaman int ida_export | get_named_type (const til_t *ti, const char *name, int ntf_flags, const type_t **type=nullptr, const p_list **fields=nullptr, const char **cmt=nullptr, const p_list **fieldcmts=nullptr, sclass_t *sclass=nullptr, uint32 *value=nullptr)
| Get named typeinfo. More...
int idaapi | get_named_type64 (const til_t *ti, const char *name, int ntf_flags, const type_t **type=nullptr, const p_list **fields=nullptr, const char **cmt=nullptr, const p_list **fieldcmts=nullptr, sclass_t *sclass=nullptr, uint64 *value=nullptr)
| See get_named_type() above. More...
idaman const char *ida_export | tinfo_errstr (tinfo_code_t code)
| Helper function to convert an error code into a printable string. More...
idaman bool ida_export | del_named_type (til_t *ti, const char *name, int ntf_flags)
| Delete information about a symbol. More...
idaman const char *ida_export | first_named_type (const til_t *ti, int ntf_flags)
| Enumerate types. More...
idaman const char *ida_export | next_named_type (const til_t *ti, const char *name, int ntf_flags)
| Enumerate types. More...
idaman uint32 ida_export | copy_named_type (til_t *dsttil, const til_t *srctil, const char *name)
| Copy a named type from one til to another. More...
idaman bool ida_export | decorate_name (qstring *out, const char *name, bool mangle, cm_t cc=CM_CC_UNKNOWN, const tinfo_t *type=nullptr)
| Decorate/undecorate a C symbol name. More...
idaman bool ida_export | gen_decorate_name (qstring *out, const char *name, bool mangle, cm_t cc, const tinfo_t *type)
| Generic function for decorate_name() (may be used in IDP modules)
idaman ssize_t ida_export | calc_c_cpp_name (qstring *out, const char *name, const tinfo_t *type, int ccn_flags)
| Get C or C++ form of the name. More...
idaman bool ida_export | enable_numbered_types (til_t *ti, bool enable)
| Enable the use of numbered types in til. More...
idaman bool ida_export | get_numbered_type (const til_t *ti, uint32 ordinal, const type_t **type=nullptr, const p_list **fields=nullptr, const char **cmt=nullptr, const p_list **fieldcmts=nullptr, sclass_t *sclass=nullptr)
| Retrieve a type by its ordinal number.
idaman uint32 ida_export | alloc_type_ordinals (til_t *ti, int qty)
| Allocate a range of ordinal numbers for new types. More...
uint32 | alloc_type_ordinal (til_t *ti)
| alloc_type_ordinals(ti, 1)
idaman uint32 ida_export | get_ordinal_limit (const til_t *ti=nullptr)
| Get number of allocated ordinals + 1. More...
uint32 | get_ordinal_count (const til_t *ti=nullptr)
| Get number of allocated ordinals. More...
idaman bool ida_export | del_numbered_type (til_t *ti, uint32 ordinal)
| Delete a numbered type.
idaman bool ida_export | set_type_alias (til_t *ti, uint32 src_ordinal, uint32 dst_ordinal)
| Create a type alias. More...
idaman uint32 ida_export | get_alias_target (const til_t *ti, uint32 ordinal)
| Find the final alias destination. More...
idaman int32 ida_export | get_type_ordinal (const til_t *ti, const char *name)
| Get type ordinal by its name.
idaman const char *ida_export | get_numbered_type_name (const til_t *ti, uint32 ordinal)
| Get type name (if exists) by its ordinal. More...
idaman ssize_t ida_export | create_numbered_type_name (qstring *buf, int32 ord)
| Create anonymous name for numbered type. More...
idaman bool ida_export | is_ordinal_name (const char *name, uint32 *ord=nullptr)
| Check if the name is an ordinal name. More...
idaman void ida_export | build_anon_type_name (qstring *buf, const type_t *type, const p_list *fields)
| Generate a name like $hex_numbers based on the field types and names.
idaman int ida_export | compact_numbered_types (til_t *ti, uint32 min_ord=0, intvec_t *p_ordmap=nullptr, int flags=0)
| Compact numbered types to get rid of empty slots. More...
idaman bool ida_export | is_type_choosable (const til_t *ti, uint32 ordinal)
| Check if a struct/union type is choosable. More...
idaman void ida_export | set_type_choosable (til_t *ti, uint32 ordinal, bool value)
| Enable/disable 'choosability' flag for a struct/union type. More...
idaman ea_t ida_export | get_vftable_ea (uint32 ordinal)
| Get address of a virtual function table. More...
idaman uint32 ida_export | get_vftable_ordinal (ea_t vftable_ea)
| Get ordinal number of the virtual function table. More...
idaman bool ida_export | set_vftable_ea (uint32 ordinal, ea_t vftable_ea)
| Set the address of a vftable instance for a vftable type. More...
bool | del_vftable_ea (uint32 ordinal)
| Delete the address of a vftable instance for a vftable type. More...
size_t | get_default_align ()
| Get default alignment for structure fields. More...
THREAD_SAFE void | align_size (size_t &cur_tot_size, size_t elem_size, size_t algn)
| Get alignment delta for the a structure field. More...
idaman bool ida_export | deref_ptr (ea_t *ptr_ea, const tinfo_t &tif, ea_t *closure_obj=nullptr)
| Dereference a pointer. More...
idaman bool ida_export | remove_tinfo_pointer (tinfo_t *tif, const char **pname, const til_t *til=nullptr)
| Remove pointer of a type. More...
idaman int ida_export | add_til (const char *name, int flags)
| Load a til file and add it the database type libraries list. More...
idaman bool ida_export | del_til (const char *name)
| Unload a til file.
idaman bool ida_export | apply_named_type (ea_t ea, const char *name)
| Apply the specified named type to the address. More...
idaman bool ida_export | apply_tinfo (ea_t ea, const tinfo_t &tif, uint32 flags)
| Apply the specified type to the specified address. More...
idaman bool ida_export | apply_cdecl (til_t *til, ea_t ea, const char *decl, int flags=0)
| Apply the specified type to the address. More...
idaman bool ida_export | apply_callee_tinfo (ea_t caller, const tinfo_t &tif)
| Apply the type of the called function to the calling instruction. More...
idaman bool ida_export | get_arg_addrs (eavec_t *out, ea_t caller)
| Retrieve argument initialization addresses. More...
idaman bool ida_export | apply_once_tinfo_and_name (ea_t dea, const tinfo_t &tif, const char *name)
| Apply the specified type and name to the address. More...
idaman int ida_export | guess_tinfo (tinfo_t *out, tid_t id)
| Generate a type information about the id from the disassembly. More...
void | set_c_header_path (const char *incdir)
| Set include directory path the target compiler.
ssize_t | get_c_header_path (qstring *buf)
| Get the include directory path of the target compiler.
void | set_c_macros (const char *macros)
| Set predefined macros for the target compiler.
ssize_t | get_c_macros (qstring *buf)
| Get predefined macros for the target compiler.
idaman til_t *ida_export | get_idati ()
| Pointer to the local type library - this til is private for each IDB file Functions that accept til_t* default to `idati` when is nullptr provided. More...
idaman bool ida_export | get_idainfo_by_type (size_t *out_size, flags64_t *out_flags, opinfo_t *out_mt, const tinfo_t &tif, size_t *out_alsize=nullptr)
| Extract information from a tinfo_t. More...
idaman bool ida_export | get_tinfo_by_flags (tinfo_t *out, flags64_t flags)
| Get tinfo object that corresponds to data flags. More...
idaman cm_t ida_export | guess_func_cc (const func_type_data_t &fti, int npurged, int cc_flags)
| Use func_type_data_t::guess_cc()
idaman bool ida_export | dump_func_type_data (qstring *out, const func_type_data_t &fti, int praloc_bits)
| Use func_type_data_t::dump()
bool | stroff_as_size (int plen, const tinfo_t &tif, asize_t value)
| Should display a structure offset expression as the structure size?
idaman int ida_export | visit_stroff_udms (udm_visitor_t &sfv, const tid_t *path, int plen, adiff_t *disp, bool appzero)
| Visit structure fields in a stroff expression or in a reference to a struct data variable. More...
THREAD_SAFE bool | is_one_bit_mask (uval_t mask)
| Is bitmask one bit?
bool | inf_pack_stkargs (cm_t cc)
bool | inf_big_arg_align (cm_t cc)
bool | inf_huge_arg_align (cm_t cc)
int | get_arg_align (int type_align, int slotsize, cm_t cc=CM_CC_UNKNOWN)
int | get_arg_align (const tinfo_t &tif, int slotsize, cm_t cc=CM_CC_UNKNOWN)
sval_t | align_stkarg_up (sval_t spoff, int type_align, int slotsize, cm_t cc=CM_CC_UNKNOWN)
sval_t | align_stkarg_up (sval_t spoff, const tinfo_t &tif, int slotsize, cm_t cc=CM_CC_UNKNOWN)
tinfo_t | remove_pointer (const tinfo_t &tif)
| BT_PTR: If the current type is a pointer, return the pointed object. More...
idaman error_t ida_export | unpack_idcobj_from_idb (idc_value_t *obj, const tinfo_t &tif, ea_t ea, const bytevec_t *off0, int pio_flags=0)
| Collection of register objects. More...
idaman error_t ida_export | unpack_idcobj_from_bv (idc_value_t *obj, const tinfo_t &tif, const bytevec_t &bytes, int pio_flags=0)
| Read a typed idc object from the byte vector.
idaman error_t ida_export | pack_idcobj_to_idb (const idc_value_t *obj, const tinfo_t &tif, ea_t ea, int pio_flags=0)
| Write a typed idc object to the database.
idaman error_t ida_export | pack_idcobj_to_bv (const idc_value_t *obj, const tinfo_t &tif, relobj_t *bytes, void *objoff, int pio_flags=0)
| Write a typed idc object to the byte vector. More...
idaman bool ida_export | apply_tinfo_to_stkarg (const insn_t &insn, const op_t &x, uval_t v, const tinfo_t &tif, const char *name)
| Helper function for the processor modules. More...
idaman void ida_export | gen_use_arg_tinfos (struct argtinfo_helper_t *_this, ea_t caller, func_type_data_t *fti, funcargvec_t *rargs)
| Do not call this function directly, use argtinfo_helper_t.
idaman bool ida_export | func_has_stkframe_hole (ea_t ea, const func_type_data_t &fti)
| Looks for a hole at the beginning of the stack arguments. More...
idaman int ida_export | lower_type (til_t *til, tinfo_t *tif, const char *name=nullptr, lowertype_helper_t *_helper=nullptr)
| Lower type. More...
idaman int ida_export | replace_ordinal_typerefs (til_t *til, tinfo_t *tif)
| Replace references to ordinal types by name references. More...
idaman void ida_export | begin_type_updating (update_type_t utp)
| Mark the beginning of a large update operation on the types. More...
idaman void ida_export | end_type_updating (update_type_t utp)
| Mark the end of a large update operation on the types (see begin_type_updating())
idaman tid_t ida_export | get_named_type_tid (const char *name)
| Get named local type TID. More...
idaman bool ida_export | get_tid_name (qstring *out, tid_t tid)
| Get a type name for the specified TID. More...
idaman uint32 ida_export | get_tid_ordinal (tid_t tid)
| Get type ordinal number for TID. More...
idaman ssize_t ida_export | get_udm_by_fullname (udm_t *udm, const char *fullname)
| Get udt member by full name. More...
idaman bool ida_export | get_idainfo_by_udm (flags64_t *flags, opinfo_t *ti, const udm_t &udm, ea_t refinfo_ea=BADADDR)
| Calculate IDA info from udt member. More...
tid_t | create_enum_type (const char *enum_name, enum_type_data_t &ei, int enum_width, type_sign_t sign, bool convert_to_bitmask, const char *enum_cmt=nullptr)
| Create type enum. More...
idaman bool ida_export | format_cdata (qstrvec_t *outvec, const idc_value_t &idc_value, const tinfo_t *tif, valstr_t *vtree=nullptr, const format_data_info_t *fdi=nullptr)
| Format a data value as a C initializer. More...
idaman int ida_export | print_cdata (text_sink_t &printer, const idc_value_t &idc_value, const tinfo_t *tif, const format_data_info_t *fdi=nullptr)
| The same as format_cdata(), but instead of returning the answer in a vector, print it. More...
idaman int ida_export | print_decls (text_sink_t &printer, const til_t *til, const ordvec_t *ordinals, uint32 pdf_flags)
| Print types (and possibly their dependencies) in a format suitable for using in a header file. More...
idaman int ida_export | calc_number_of_children (const argloc_t &loc, const tinfo_t &tif, bool dont_deref_ptr=false)
| Calculate max number of lines of a formatted c data, when expanded (PTV_EXPAND). More...
idaman bool ida_export | get_enum_member_expr (qstring *buf, const tinfo_t &tif, int serial, uint64 value)
| Return a C expression that can be used to represent an enum member. More...
idaman bool ida_export | choose_named_type (til_symbol_t *out_sym, const til_t *root_til, const char *title, int ntf_flags, predicate_t *predicate=nullptr)
| Choose a type from a type library. More...
idaman uint32 ida_export | choose_local_tinfo (const til_t *ti, const char *title, local_tinfo_predicate_t *func=nullptr, uint32 def_ord=0, void *ud=nullptr)
| Choose a type from the local type library. More...
idaman uint32 ida_export | choose_local_tinfo_and_delta (int32 *delta, const til_t *ti, const char *title, local_tinfo_predicate_t *func=nullptr, uint32 def_ord=0, void *ud=nullptr)
| Choose a type from the local type library and specify the pointer shift value. More...
idaman ssize_t ida_export | visit_edms (const tinfo_t &tif, uint64 value, int nbytes, uchar serial, const enum_type_visitor_t &visitor)
| Visit enum members having the specified value. More...

## Macros
#define | DEFMASK64 bmask64_t(-1)
| default bitmask 64bits
#define | RESERVED_BYTE 0xFF
| multifunctional purpose
#define | TAH_BYTE 0xFE
| type attribute header byte
#define | FAH_BYTE 0xFF
| function argument attribute header byte
#define | MAX_DECL_ALIGN 0x000F
#define | TAH_HASATTRS 0x0010
| has extended attributes
#define | TAUDT_UNALIGNED 0x0040
| struct: unaligned struct
#define | TAUDT_MSSTRUCT 0x0020
| struct: gcc msstruct attribute
#define | TAUDT_CPPOBJ 0x0080
| struct: a c++ object, not simple pod type
#define | TAUDT_VFTABLE 0x0100
| struct: is virtual function table
#define | TAUDT_FIXED 0x0400
| struct: fixed field offsets, stored in serialized form; cannot be set for unions
#define | TAFLD_BASECLASS 0x0020
| field: do not include but inherit from the current field
#define | TAFLD_UNALIGNED 0x0040
| field: unaligned field
#define | TAFLD_VIRTBASE 0x0080
| field: virtual base (not supported yet)
#define | TAFLD_VFTABLE 0x0100
| field: ptr to virtual function table
#define | TAFLD_METHOD 0x0200
| denotes a udt member function
#define | TAFLD_GAP 0x0400
| field: gap member (displayed as padding in type details)
#define | TAFLD_REGCMT 0x0800
| field: the comment is regular (if not set, it is repeatable)
#define | TAFLD_FRAME_R 0x1000
| frame: function return address frame slot
#define | TAFLD_FRAME_S 0x2000
| frame: function saved registers frame slot
#define | TAFLD_BYTIL 0x4000
| field: was the member created due to the type system
#define | TAPTR_PTR32 0x0020
| ptr: __ptr32
#define | TAPTR_PTR64 0x0040
| ptr: __ptr64
#define | TAPTR_RESTRICT 0x0060
| ptr: __restrict
#define | TAPTR_SHIFTED 0x0080
| ptr: __shifted(parent_struct, delta)
#define | TAENUM_64BIT 0x0020
| enum: store 64-bit values
#define | TAENUM_UNSIGNED 0x0040
| enum: unsigned
#define | TAENUM_SIGNED 0x0080
| enum: signed
#define | TAENUM_OCT 0x0100
| enum: octal representation, if BTE_HEX
#define | TAENUM_BIN 0x0200
| enum: binary representation, if BTE_HEX only one of OCT/BIN bits can be set. More...
#define | TAENUM_NUMSIGN 0x0400
| enum: signed representation, if BTE_HEX
#define | TAENUM_LZERO 0x0800
| enum: print numbers with leading zeroes (only for HEX/OCT/BIN)
#define | TAH_ALL 0x7FF0
| all defined bits
#define | TA_ORG_TYPEDEF "__org_typedef"
| the original typedef name (simple string)
#define | TA_ORG_ARRDIM "__org_arrdim"
| the original array dimension (pack_dd)
#define | TA_FORMAT "format"
| info about the 'format' argument. More...
#define | TA_VALUE_REPR "\x01"
| serialized value_repr_t (used for scalars and arrays)
#define | TIL_ZIP 0x0001
| pack buckets using zip
#define | TIL_MAC 0x0002
| til has macro table
#define | TIL_ESI 0x0004
| extended sizeof info (short, long, longlong)
#define | TIL_UNI 0x0008
| universal til for any compiler
#define | TIL_ORD 0x0010
| type ordinal numbers are present
#define | TIL_ALI 0x0020
| type aliases are present (this bit is used only on the disk)
#define | TIL_MOD 0x0040
| til has been modified, should be saved
#define | TIL_STM 0x0080
| til has extra streams
#define | TIL_SLD 0x0100
| sizeof(long double)
#define | TIL_ADD_FAILED 0
| see errbuf
#define | TIL_ADD_OK 1
| some tils were added
#define | TIL_ADD_ALREADY 2
| the base til was already added
#define | ARGLOC_HELPER_DEFINITIONS(decl)
| Helper to declare common argloc_t related functions. More...
#define | PRALOC_VERIFY 0x01
| interr if illegal argloc
#define | PRALOC_STKOFF 0x02
| print stack offsets
#define | SETCOMP_OVERRIDE 0x0001
| may override old compiler info
#define | SETCOMP_ONLY_ID 0x0002
| cc has only 'id' field; the rest will be set to defaults corresponding to the program bitness
#define | SETCOMP_ONLY_ABI 0x0004
| ignore cc field complete, use only abiname
#define | SETCOMP_BY_USER 0x0008
| invoked by user, cannot be replaced by module/loader
#define | MAX_FUNC_ARGS 256
| max number of function arguments
#define | HTI_CPP 0x00000001
| C++ mode (not implemented)
#define | HTI_INT 0x00000002
| debug: print internal representation of types
#define | HTI_EXT 0x00000004
| debug: print external representation of types
#define | HTI_LEX 0x00000008
| debug: print tokens
#define | HTI_UNP 0x00000010
| debug: check the result by unpacking it
#define | HTI_TST 0x00000020
| test mode: discard the result
#define | HTI_FIL 0x00000040
| "input" is file name, otherwise "input" contains a C declaration
#define | HTI_MAC 0x00000080
| define macros from the base tils
#define | HTI_NWR 0x00000100
| no warning messages
#define | HTI_NER 0x00000200
| ignore all errors but display them
#define | HTI_DCL 0x00000400
| don't complain about redeclarations
#define | HTI_NDC 0x00000800
| don't decorate names
#define | HTI_PAK 0x00007000
| explicit structure pack value (#pragma pack)
#define | HTI_PAK_SHIFT 12
| shift for HTI_PAK. More...
#define | HTI_PAKDEF 0x00000000
| default pack value
#define | HTI_PAK1 0x00001000
| #pragma pack(1)
#define | HTI_PAK2 0x00002000
| #pragma pack(2)
#define | HTI_PAK4 0x00003000
| #pragma pack(4)
#define | HTI_PAK8 0x00004000
| #pragma pack(8)
#define | HTI_PAK16 0x00005000
| #pragma pack(16)
#define | HTI_HIGH 0x00008000
| assume high level prototypes (with hidden args, etc)
#define | HTI_LOWER 0x00010000
| lower the function prototypes
#define | HTI_RAWARGS 0x00020000
| leave argument names unchanged (do not remove underscores)
#define | HTI_RELAXED 0x00080000
| accept references to unknown namespaces
#define | HTI_NOBASE 0x00100000
| do not inspect base tils
#define | HTI_SEMICOLON 0x00200000
| do not complain if the terminated semicolon is absent
#define | PT_SIL 0x0001
| silent, no messages
#define | PT_NDC 0x0002
| don't decorate names
#define | PT_TYP 0x0004
| return declared type information
#define | PT_VAR 0x0008
| return declared object information
#define | PT_PACKMASK 0x0070
| mask for pack alignment values
#define | PT_HIGH 0x0080
| assume high level prototypes (with hidden args, etc)
#define | PT_LOWER 0x0100
| lower the function prototypes
#define | PT_REPLACE 0x0200
| replace the old type (used in idc)
#define | PT_RAWARGS 0x0400
| leave argument names unchanged (do not remove underscores)
#define | PT_RELAXED 0x1000
| accept references to unknown namespaces
#define | PT_EMPTY 0x2000
| accept empty decl
#define | PT_SEMICOLON 0x4000
| append the terminated semicolon
#define | PRTYPE_1LINE 0x00000
| print to one line
#define | PRTYPE_MULTI 0x00001
| print to many lines
#define | PRTYPE_TYPE 0x00002
| print type declaration (not variable declaration)
#define | PRTYPE_PRAGMA 0x00004
| print pragmas for alignment
#define | PRTYPE_SEMI 0x00008
| append ; to the end
#define | PRTYPE_CPP 0x00010
| use c++ name (only for print_type())
#define | PRTYPE_DEF 0x00020
| tinfo_t: print definition, if available
#define | PRTYPE_NOARGS 0x00040
| tinfo_t: do not print function argument names
#define | PRTYPE_NOARRS 0x00080
| tinfo_t: print arguments with FAI_ARRAY as pointers
#define | PRTYPE_NORES 0x00100
| tinfo_t: never resolve types (meaningful with PRTYPE_DEF)
#define | PRTYPE_RESTORE 0x00200
| tinfo_t: print restored types for FAI_ARRAY and FAI_STRUCT
#define | PRTYPE_NOREGEX 0x00400
| do not apply regular expressions to beautify name
#define | PRTYPE_COLORED 0x00800
| add color tag COLOR_SYMBOL for any parentheses, commas and colons
#define | PRTYPE_METHODS 0x01000
| tinfo_t: print udt methods
#define | PRTYPE_1LINCMT 0x02000
| print comments even in the one line mode
#define | PRTYPE_HEADER 0x04000
| print only type header (only for definitions)
#define | PRTYPE_OFFSETS 0x08000
| print udt member offsets
#define | PRTYPE_MAXSTR 0x10000
| limit the output length to 1024 bytes (the output may be slightly longer)
#define | PRTYPE_TAIL 0x20000
| print only the definition tail (only for definitions, exclusive with PRTYPE_HEADER)
#define | PRTYPE_ARGLOCS 0x40000
| print function arglocs (not only for usercall)
#define | NTF_TYPE 0x0001
| type name
#define | NTF_SYMU 0x0008
| symbol, name is unmangled ('func')
#define | NTF_SYMM 0x0000
| symbol, name is mangled ('_func'); only one of NTF_TYPE and NTF_SYMU, NTF_SYMM can be used
#define | NTF_NOBASE 0x0002
| don't inspect base tils (for get_named_type)
#define | NTF_REPLACE 0x0004
| replace original type (for set_named_type)
#define | NTF_UMANGLED 0x0008
| name is unmangled (don't use this flag)
#define | NTF_NOCUR 0x0020
| don't inspect current til file (for get_named_type)
#define | NTF_64BIT 0x0040
| value is 64bit
#define | NTF_FIXNAME 0x0080
| force-validate the name of the type when setting (set_named_type, set_numbered_type only)
#define | NTF_IDBENC 0x0100
| the name is given in the IDB encoding; non-ASCII bytes will be decoded accordingly (set_named_type, set_numbered_type only)
#define | NTF_CHKSYNC 0x0200
| check that synchronization to IDB passed OK (set_numbered_type, set_named_type)
#define | NTF_NO_NAMECHK 0x0400
| do not validate type name (set_numbered_type, set_named_type)
#define | NTF_COPY 0x1000
| save a new type definition, not a typeref (tinfo_t::set_numbered_type, tinfo_t::set_named_type)
#define | CCN_C 0x00
#define | CCN_CPP 0x01
#define | ADDTIL_DEFAULT 0x0000
| default behavior
#define | ADDTIL_INCOMP 0x0001
| load incompatible tils
#define | ADDTIL_SILENT 0x0002
| do not ask any questions
#define | ADDTIL_FAILED 0
| something bad, the warning is displayed
#define | ADDTIL_OK 1
| ok, til is loaded
#define | ADDTIL_COMP 2
| ok, but til is not compatible with the current compiler
#define | ADDTIL_ABORTED 3
| til was not loaded (incompatible til rejected by user)
#define | TINFO_GUESSED 0x0000
| this is a guessed type
#define | TINFO_DEFINITE 0x0001
| this is a definite type
#define | TINFO_DELAYFUNC 0x0002
| if type is a function and no function exists at ea, schedule its creation and argument renaming to auto-analysis, otherwise try to create it immediately
#define | TINFO_STRICT 0x0004
| never convert given type to another one before applying
#define | GUESS_FUNC_FAILED 0
| couldn't guess the function type
#define | GUESS_FUNC_TRIVIAL 1
| the function type doesn't have interesting info
#define | GUESS_FUNC_OK 2
| ok, some non-trivial information is gathered
#define | SUDT_SORT 0x0001
| fields are not sorted by offset, sort them first
#define | SUDT_ALIGN 0x0002
| recalculate field alignments, struct packing, etc to match the offsets and size info
#define | SUDT_GAPS 0x0004
| allow to fill gaps with additional members (_BYTE[])
#define | SUDT_UNEX 0x0008
| references to nonexistent member types are acceptable; in this case it is better to set the corresponding udm_t::fda field to the type alignment. More...
#define | SUDT_FAST 0x0010
| serialize without verifying offsets and alignments
#define | SUDT_CONST 0x0040
| only for serialize_udt: make type const
#define | SUDT_VOLATILE 0x0080
| only for serialize_udt: make type volatile
#define | SUDT_TRUNC 0x0100
| serialize: truncate useless strings from fields, fldcmts
#define | SUDT_SERDEF 0x0200
| serialize: if a typeref, serialize its definition
#define | DECLARE_TINFO_HELPERS(decl)
| Macro to declare common tinfo_t related functions.
#define | STRMEM_MASK 0x000F
#define | STRMEM_OFFSET 0x0000
| get member by offset More...
#define | STRMEM_INDEX 0x0001
| get member by number More...
#define | STRMEM_AUTO 0x0002
| get member by offset if struct, or get member by index if union More...
#define | STRMEM_NAME 0x0003
| get member by name More...
#define | STRMEM_TYPE 0x0004
| get member by type. More...
#define | STRMEM_SIZE 0x0005
| get member by size. More...
#define | STRMEM_MINS 0x0006
| get smallest member by size.
#define | STRMEM_MAXS 0x0007
| get biggest member by size.
#define | STRMEM_LOWBND 0x0008
| get member by offset or the next member (lower bound) More...
#define | STRMEM_NEXT 0x0009
| get next member after the offset More...
#define | STRMEM_VFTABLE 0x10000000
| can be combined with STRMEM_OFFSET, STRMEM_AUTO get vftable instead of the base class
#define | STRMEM_SKIP_EMPTY 0x20000000
| can be combined with STRMEM_OFFSET, STRMEM_AUTO skip empty members (i.e. More...
#define | STRMEM_CASTABLE_TO 0x40000000
| can be combined with STRMEM_TYPE: member type must be castable to the specified type
#define | STRMEM_ANON 0x80000000
| can be combined with STRMEM_NAME: look inside anonymous members too. More...
#define | STRMEM_SKIP_GAPS 0x01000000
| can be combined with STRMEM_OFFSET, STRMEM_LOWBND skip gap members
#define | TCMP_EQUAL 0x0000
| are types equal?
#define | TCMP_IGNMODS 0x0001
| ignore const/volatile modifiers
#define | TCMP_AUTOCAST 0x0002
| can t1 be cast into t2 automatically?
#define | TCMP_MANCAST 0x0004
| can t1 be cast into t2 manually?
#define | TCMP_CALL 0x0008
| can t1 be called with t2 type?
#define | TCMP_DELPTR 0x0010
| remove pointer from types before comparing
#define | TCMP_DECL 0x0020
| compare declarations without resolving them
#define | TCMP_ANYBASE 0x0040
| accept any base class when casting
#define | TCMP_SKIPTHIS 0x0080
| skip the first function argument in comparison
#define | FAI_HIDDEN 0x0001
| hidden argument
#define | FAI_RETPTR 0x0002
| pointer to return value. implies hidden
#define | FAI_STRUCT 0x0004
| was initially a structure
#define | FAI_ARRAY 0x0008
| was initially an array; see "__org_typedef" or "__org_arrdim" type attributes to determine the original type
#define | FAI_UNUSED 0x0010
| argument is not used by the function
#define | FTI_SPOILED 0x0001
| information about spoiled registers is present
#define | FTI_NORET 0x0002
| noreturn
#define | FTI_PURE 0x0004
| __pure
#define | FTI_HIGH 0x0008
| high level prototype (with possibly hidden args)
#define | FTI_STATIC 0x0010
| static
#define | FTI_VIRTUAL 0x0020
| virtual
#define | FTI_CALLTYPE 0x00C0
| mask for FTI_*CALL
#define | FTI_DEFCALL 0x0000
| default call
#define | FTI_NEARCALL 0x0040
| near call
#define | FTI_FARCALL 0x0080
| far call
#define | FTI_INTCALL 0x00C0
| interrupt call
#define | FTI_ARGLOCS 0x0100
| info about argument locations has been calculated (stkargs and retloc too)
#define | FTI_EXPLOCS 0x0200
| all arglocs are specified explicitly
#define | FTI_CONST 0x0400
| const member function
#define | FTI_CTOR 0x0800
| constructor
#define | FTI_DTOR 0x1000
| destructor
#define | FTI_ALL 0x1FFF
| all defined bits
#define | CC_CDECL_OK 0x01
| can use __cdecl calling convention?
#define | CC_ALLOW_ARGPERM 0x02
| disregard argument order?
#define | CC_ALLOW_REGHOLES 0x04
| allow holes in register argument list?
#define | CC_HAS_ELLIPSIS 0x08
| function has a variable list of arguments?
#define | CC_GOLANG_OK 0x10
| can use __golang calling convention
#define | FRB_MASK 0xF
| Mask for the value type (* means requires additional info):
#define | FRB_UNK 0x0
| Unknown.
#define | FRB_NUMB 0x1
| Binary number.
#define | FRB_NUMO 0x2
| Octal number.
#define | FRB_NUMH 0x3
| Hexadecimal number.
#define | FRB_NUMD 0x4
| Decimal number.
#define | FRB_FLOAT 0x5
| Floating point number (for interpreting an integer type as a floating value)
#define | FRB_CHAR 0x6
| Char.
#define | FRB_SEG 0x7
| Segment.
#define | FRB_ENUM 0x8
| *Enumeration
#define | FRB_OFFSET 0x9
| *Offset
#define | FRB_STRLIT 0xA
| *String literal (used for arrays)
#define | FRB_STROFF 0xB
| *Struct offset
#define | FRB_CUSTOM 0xC
| *Custom data type
#define | FRB_INVSIGN 0x0100
| Invert sign (0x01 is represented as -0xFF)
#define | FRB_INVBITS 0x0200
| Invert bits (0x01 is represented as ~0xFE)
#define | FRB_SIGNED 0x0400
| Force signed representation.
#define | FRB_LZERO 0x0800
| Toggle leading zeroes (used for integers)
#define | FRB_TABFORM 0x1000
| has additional tabular parameters
#define | STRUC_SEPARATOR '.'
| structname.fieldname
#define | VTBL_SUFFIX "_vtbl"
#define | VTBL_MEMNAME "__vftable"
#define | TPOS_LNNUM "\x05"
#define | TPOS_REGCMT '\x06'
#define | TVIS_TYPE 0x0001
| new type info is present
#define | TVIS_NAME 0x0002
| new name is present (only for funcargs and udt members)
#define | TVIS_CMT 0x0004
| new comment is present (only for udt members)
#define | TVIS_RPTCMT 0x0008
| the new comment is repeatable
#define | TVST_PRUNE 0x01
| don't visit children of current type
#define | TVST_DEF 0x02
| visit type definition (meaningful for typerefs)
#define | TVST_LEVEL 0x04
#define | PIO_NOATTR_FAIL 0x0004
| missing attributes are not ok
#define | PIO_IGNORE_PTRS 0x0008
| do not follow pointers
#define | PTV_DEREF 0x0001
| take value to print from the debugged process. More...
#define | PTV_QUEST 0x0002
| print '?' for uninited data
#define | PTV_EMPTY 0x0004
| return empty string for uninited data; should not specify PTV_QUEST and PTV_EMPTY together
#define | PTV_CSTR 0x0008
| print constant strings inline
#define | PTV_EXPAND 0x0010
| print only top level on separate lines; max_length applies to separate lines; margin is ignored
#define | PTV_LZERO 0x0020
| print numbers with leading zeroes (only for hex/oct/bin)
#define | PTV_STPFLT 0x0040
| fail on bad floating point numbers (if not set, just print ?flt for them)
#define | PTV_SPACE 0x0080
| add spaces after commas and around braces
#define | PTV_DEBUG 0x0100
| format output for debugger
#define | PTV_NOPTR 0x0200
| prevent pointer values from appearing in the output
#define | PTV_NTOP 0x40000000
| internal flag, do not use
#define | PTV_KEEP 0x80000000
| internal flag, do not use
#define | VALSTR_OPEN 0x01
| printed opening curly brace '{'
#define | PDF_INCL_DEPS 0x1
| Include all type dependencies.
#define | PDF_DEF_FWD 0x2
| Allow forward declarations.
#define | PDF_DEF_BASE 0x4
| Include base types: __int8, __int16, etc..
#define | PDF_HEADER_CMT 0x8
| Prepend output with a descriptive comment.

## Typedefs
typedef uchar | type_t
| In serialized form, a type is represented by a byte sequence. More...
typedef uchar | p_string
| Inside a type string, a pascal-like string: dt length, characters.
typedef uchar | p_list
| several p_string's
typedef uint64 | bmask64_t
| unsigned value that describes a bitmask
typedef uchar | bte_t
| Enum type flags.
typedef qvector< type_attr_t > | type_attrs_t
| this vector must be sorted by keys
typedef int | type_sign_t
| type signedness
typedef int | argloc_type_t
| Specifies the location type of a function argument or a debugger variable - see Argument location types.
typedef qvector< argloc_t > | arglocs_t
| vector of argument locations
typedef qvector< argpart_t > | argpartvec_t
typedef qvector< comp_t > | compvec_t
| Collection of compiler descriptions.
typedef int idaapi | h2ti_type_cb(const char *name, const tinfo_t &tif, const char *cmt, const uint64 *value, void *cb_data)
| This callback will be called for each type/variable declaration. More...
typedef int | printer_t(const char *format,...)
| Specify a printing callback when parsing types. More...
typedef uint64 | typid_t
typedef qvector< tinfo_t > | tinfovec_t
| vector of tinfo objects
typedef qvector< simd_info_t > | simd_info_vec_t
typedef qvector< funcarg_t > | funcargvec_t
| vector of function argument objects
typedef qvector< edm_t > | edmvec_t
| vector of enum values. More...
typedef qvector< regobj_t > | regobjvec_t
typedef qvector< valstr_t > | valstrvec_t
typedef qvector< uint32 > | ordvec_t
typedef int idaapi | local_tinfo_predicate_t(uint32 ord, const tinfo_t &type, void *ud)
| Controls which types are displayed/selected when choosing local types. More...
using | enum_type_visitor_t = std::function< ssize_t(const struct enum_type_data_t &ei, size_t idx, uint64 value, uint64 bmask)>
| Callback for visit_edms. More...

## Enumerations
enum | argreg_policy_t { ARGREGS_POLICY_UNDEFINED , ARGREGS_GP_ONLY , ARGREGS_INDEPENDENT , ARGREGS_BY_SLOTS , ARGREGS_FP_MASKS_GP , ARGREGS_MIPS_O32 , ARGREGS_RISCV }
| Function argument passing: how GP & FP registers cooperate with each other. More...
enum | abs_t { ABS_UNK , ABS_NO , ABS_YES }
| abstractness of declaration (see h2ti())
enum | sclass_t { SC_UNK = 0 , SC_TYPE = 1 , SC_EXT = 2 , SC_STAT = 3 , SC_REG = 4 , SC_AUTO = 5 , SC_FRIEND = 6 , SC_VIRT = 7 }
| < storage class More...
enum | tinfo_code_t { TERR_OK = 0 , TERR_SAVE_ERROR = -1 , TERR_SERIALIZE = -2 , TERR_BAD_NAME = -3 , TERR_BAD_ARG = -4 , TERR_BAD_TYPE = -5 , TERR_BAD_SIZE = -6 , TERR_BAD_INDEX = -7 , TERR_BAD_ARRAY = -8 , TERR_BAD_BF = -9 , TERR_BAD_OFFSET = -10 , TERR_BAD_UNIVAR = -11 , TERR_BAD_VARLAST = -12 , TERR_OVERLAP = -13 , TERR_BAD_SUBTYPE = -14 , TERR_BAD_VALUE = -15 , TERR_NO_BMASK = -16 , TERR_BAD_BMASK = -17 , TERR_BAD_MSKVAL = -18 , TERR_BAD_REPR = -19 , TERR_GRP_NOEMPTY = -20 , TERR_DUPNAME = -21 , TERR_UNION_BF = -22 , TERR_BAD_TAH = -23 , TERR_BAD_BASE = -24 , TERR_BAD_GAP = -25 , TERR_NESTED = -26 , TERR_NOT_COMPAT = -27 , TERR_BAD_LAYOUT = -28 , TERR_BAD_GROUPS = -29 , TERR_BAD_SERIAL = -30 , TERR_ALIEN_NAME = -31 , TERR_STOCK = -32 , TERR_ENUM_SIZE = -33 , TERR_NOT_IMPL = -34 , TERR_TYPE_WORSE = -35 , TERR_BAD_FX_SIZE = -36 , TERR_STRUCT_SIZE = -37 , TERR_NOT_FOUND = -38 , TERR_COUNT = 39 }
| Error codes various tinfo functions: More...
enum | stock_type_id_t { STI_PCHAR , STI_PUCHAR , STI_PCCHAR , STI_PCUCHAR , STI_PBYTE , STI_PINT , STI_PUINT , STI_PVOID , STI_PPVOID , STI_PCVOID , STI_ACHAR , STI_AUCHAR , STI_ACCHAR , STI_ACUCHAR , STI_FPURGING , STI_FDELOP , STI_MSGSEND , STI_AEABI_LCMP , STI_AEABI_ULCMP , STI_DONT_USE , STI_SIZE_T , STI_SSIZE_T , STI_AEABI_MEMCPY , STI_AEABI_MEMSET , STI_AEABI_MEMCLR , STI_RTC_CHECK_2 , STI_RTC_CHECK_4 , STI_RTC_CHECK_8 , STI_COMPLEX64 , STI_COMPLEX128 , STI_PUNKNOWN , STI_LAST }
| IDs for common types. More...
enum | etf_flag_t : uint { ETF_NO_SAVE = 0x00000001 , ETF_NO_LAYOUT = 0x00000002 , ETF_MAY_DESTROY = 0x00000004 , ETF_COMPATIBLE = 0x00000008 , ETF_FUNCARG = 0x00000010 , ETF_FORCENAME = 0x00000020 , ETF_AUTONAME = 0x00000040 , ETF_BYTIL = 0x00000080 , ETF_NO_ARRAY = 0x00000100 }
enum | gtd_udt_t { GTD_CALC_LAYOUT = 0 , GTD_NO_LAYOUT = BTM_VOLATILE , GTD_DEL_BITFLDS = BTM_CONST }
| Constants to be used with get_udt_details() More...
enum | gtd_func_t { GTD_CALC_ARGLOCS = 0 , GTD_NO_ARGLOCS = BTM_VOLATILE }
| Constants to be used with get_func_details() More...
enum | gts_code_t { GTS_NESTED = 0x01 , GTS_BASECLASS = 0x02 }
| Constants to be used with get_size() More...
enum | format_functype_t { FMTFUNC_PRINTF , FMTFUNC_SCANF , FMTFUNC_STRFTIME , FMTFUNC_STRFMON }
| Function index for the 'format' attribute.
enum | update_type_t { UTP_ENUM , UTP_STRUCT }
| See begin_type_updating()

## Variables
const type_t | TYPE_BASE_MASK = 0x0F
| the low 4 bits define the basic type
const type_t | TYPE_FLAGS_MASK = 0x30
| type flags - they have different meaning depending on the basic type
const type_t | TYPE_MODIF_MASK = 0xC0
| modifiers. More...
const type_t | TYPE_FULL_MASK = (TYPE_BASE_MASK | TYPE_FLAGS_MASK)
| basic type with type flags
const type_t | BT_UNK = 0x00
| unknown
const type_t | BT_VOID = 0x01
| void
const type_t | BTMT_SIZE0 = 0x00
| BT_VOID - normal void; BT_UNK - don't use
const type_t | BTMT_SIZE12 = 0x10
| size = 1 byte if BT_VOID; 2 if BT_UNK
const type_t | BTMT_SIZE48 = 0x20
| size = 4 bytes if BT_VOID; 8 if BT_UNK
const type_t | BTMT_SIZE128 = 0x30
| size = 16 bytes if BT_VOID; unknown if BT_UNK (IN struct alignment - see below)
const type_t | BT_INT8 = 0x02
| __int8
const type_t | BT_INT16 = 0x03
| __int16
const type_t | BT_INT32 = 0x04
| __int32
const type_t | BT_INT64 = 0x05
| __int64
const type_t | BT_INT128 = 0x06
| __int128 (for alpha & future use)
const type_t | BT_INT = 0x07
| natural int. (size provided by idp module)
const type_t | BTMT_UNKSIGN = 0x00
| unknown signedness
const type_t | BTMT_SIGNED = 0x10
| signed
const type_t | BTMT_USIGNED = 0x20
| unsigned
const type_t | BTMT_UNSIGNED = BTMT_USIGNED
const type_t | BTMT_CHAR = 0x30
| specify char or segment register More...
const type_t | BT_BOOL = 0x08
| bool
const type_t | BTMT_DEFBOOL = 0x00
| size is model specific or unknown(?)
const type_t | BTMT_BOOL1 = 0x10
| size 1byte
const type_t | BTMT_BOOL2 = 0x20
| size 2bytes - !inf_is_64bit()
const type_t | BTMT_BOOL8 = 0x20
| size 8bytes - inf_is_64bit()
const type_t | BTMT_BOOL4 = 0x30
| size 4bytes
const type_t | BT_FLOAT = 0x09
| float
const type_t | BTMT_FLOAT = 0x00
| float (4 bytes)
const type_t | BTMT_DOUBLE = 0x10
| double (8 bytes)
const type_t | BTMT_LNGDBL = 0x20
| long double (compiler specific)
const type_t | BTMT_SPECFLT = 0x30
| float (variable size). More...
const type_t | _BT_LAST_BASIC = BT_FLOAT
| the last basic type, all basic types may be followed by [tah-typeattrs]
const type_t | BT_PTR = 0x0A
| pointer. More...
const type_t | BTMT_DEFPTR = 0x00
| default for model
const type_t | BTMT_NEAR = 0x10
| near
const type_t | BTMT_FAR = 0x20
| far
const type_t | BTMT_CLOSURE = 0x30
| closure. More...
const type_t | BT_ARRAY = 0x0B
| array
const type_t | BTMT_NONBASED = 0x10
const type_t | BTMT_ARRESERV = 0x20
| reserved bit
const type_t | BT_FUNC = 0x0C
| function. More...
const type_t | BTMT_DEFCALL = 0x00
| call method - default for model or unknown
const type_t | BTMT_NEARCALL = 0x10
| function returns by retn
const type_t | BTMT_FARCALL = 0x20
| function returns by retf
const type_t | BTMT_INTCALL = 0x30
| function returns by iret in this case cc MUST be 'unknown'
const type_t | BT_COMPLEX = 0x0D
| struct/union/enum/typedef. More...
const type_t | BTMT_STRUCT = 0x00
| struct: MCNT records: type_t; [sdacl-typeattrs];
const type_t | BTMT_UNION = 0x10
| union: MCNT records: type_t...
const type_t | BTMT_ENUM = 0x20
| enum: next byte bte_t (see below) N records: de delta(s) OR blocks (see below)
const type_t | BTMT_TYPEDEF = 0x30
| named reference always p_string name
const type_t | BT_BITFIELD = 0x0E
| bitfield (only in struct) ['bitmasked' enum see below] next byte is dt ((size in bits << 1) | (unsigned ? 1 : 0))
const type_t | BTMT_BFLDI8 = 0x00
| __int8
const type_t | BTMT_BFLDI16 = 0x10
| __int16
const type_t | BTMT_BFLDI32 = 0x20
| __int32
const type_t | BTMT_BFLDI64 = 0x30
| __int64
const type_t | BT_RESERVED = 0x0F
| RESERVED.
const type_t | BTM_CONST = 0x40
| const
const type_t | BTM_VOLATILE = 0x80
| volatile
const bte_t | BTE_SIZE_MASK = 0x07
| storage size. More...
const bte_t | BTE_RESERVED = 0x08
| must be 0, in order to distinguish from a tah-byte
const bte_t | BTE_BITMASK = 0x10
| 'subarrays'. More...
const bte_t | BTE_OUT_MASK = 0x60
| output style mask
const bte_t | BTE_HEX = 0x00
| hex
const bte_t | BTE_CHAR = 0x20
| char or hex
const bte_t | BTE_SDEC = 0x40
| signed decimal
const bte_t | BTE_UDEC = 0x60
| unsigned decimal
const bte_t | BTE_ALWAYS = 0x80
| this bit MUST be present
const type_t | BT_SEGREG = (BT_INT | BTMT_CHAR)
| segment register
const type_t | BT_UNK_BYTE = (BT_VOID | BTMT_SIZE12)
| 1 byte
const type_t | BT_UNK_WORD = (BT_UNK | BTMT_SIZE12)
| 2 bytes
const type_t | BT_UNK_DWORD = (BT_VOID | BTMT_SIZE48)
| 4 bytes
const type_t | BT_UNK_QWORD = (BT_UNK | BTMT_SIZE48)
| 8 bytes
const type_t | BT_UNK_OWORD = (BT_VOID | BTMT_SIZE128)
| 16 bytes
const type_t | BT_UNKNOWN = (BT_UNK | BTMT_SIZE128)
| unknown size - for parameters
const type_t | BTF_BYTE = BT_UNK_BYTE
| byte
const type_t | BTF_UNK = BT_UNKNOWN
| unknown
const type_t | BTF_VOID = BT_VOID | BTMT_SIZE0
| void
const type_t | BTF_INT8 = BT_INT8 | BTMT_SIGNED
| signed byte
const type_t | BTF_CHAR = BT_INT8 | BTMT_CHAR
| signed char
const type_t | BTF_UCHAR = BT_INT8 | BTMT_USIGNED
| unsigned char
const type_t | BTF_UINT8 = BT_INT8 | BTMT_USIGNED
| unsigned byte
const type_t | BTF_INT16 = BT_INT16 | BTMT_SIGNED
| signed short
const type_t | BTF_UINT16 = BT_INT16 | BTMT_USIGNED
| unsigned short
const type_t | BTF_INT32 = BT_INT32 | BTMT_SIGNED
| signed int
const type_t | BTF_UINT32 = BT_INT32 | BTMT_USIGNED
| unsigned int
const type_t | BTF_INT64 = BT_INT64 | BTMT_SIGNED
| signed long
const type_t | BTF_UINT64 = BT_INT64 | BTMT_USIGNED
| unsigned long
const type_t | BTF_INT128 = BT_INT128 | BTMT_SIGNED
| signed 128-bit value
const type_t | BTF_UINT128 = BT_INT128 | BTMT_USIGNED
| unsigned 128-bit value
const type_t | BTF_INT = BT_INT | BTMT_UNKSIGN
| int, unknown signedness
const type_t | BTF_UINT = BT_INT | BTMT_USIGNED
| unsigned int
const type_t | BTF_SINT = BT_INT | BTMT_SIGNED
| singed int
const type_t | BTF_BOOL = BT_BOOL
| boolean
const type_t | BTF_FLOAT = BT_FLOAT | BTMT_FLOAT
| float
const type_t | BTF_DOUBLE = BT_FLOAT | BTMT_DOUBLE
| double
const type_t | BTF_LDOUBLE = BT_FLOAT | BTMT_LNGDBL
| long double
const type_t | BTF_TBYTE = BT_FLOAT | BTMT_SPECFLT
| see BTMT_SPECFLT
const type_t | BTF_STRUCT = BT_COMPLEX | BTMT_STRUCT
| struct
const type_t | BTF_UNION = BT_COMPLEX | BTMT_UNION
| union
const type_t | BTF_ENUM = BT_COMPLEX | BTMT_ENUM
| enum
const type_t | BTF_TYPEDEF = BT_COMPLEX | BTMT_TYPEDEF
| typedef
const type_sign_t | no_sign = 0
| no sign, or unknown
const type_sign_t | type_signed = 1
| signed type
const type_sign_t | type_unsigned = 2
| unsigned type
const cm_t | CM_MASK = 0x03
const cm_t | CM_UNKNOWN = 0x00
| unknown
const cm_t | CM_N8_F16 = 0x01
| if sizeof(int)<=2: near 1 byte, far 2 bytes
const cm_t | CM_N64 = 0x01
| if sizeof(int)>2: near 8 bytes, far 8 bytes
const cm_t | CM_N16_F32 = 0x02
| near 2 bytes, far 4 bytes
const cm_t | CM_N32_F48 = 0x03
| near 4 bytes, far 6 bytes
const cm_t | CM_M_MASK = 0x0C
const cm_t | CM_M_NN = 0x00
| small: code=near, data=near (or unknown if CM_UNKNOWN)
const cm_t | CM_M_FF = 0x04
| large: code=far, data=far
const cm_t | CM_M_NF = 0x08
| compact: code=near, data=far
const cm_t | CM_M_FN = 0x0C
| medium: code=far, data=near
const cm_t | CM_CC_MASK = 0xF0
const cm_t | CM_CC_INVALID = 0x00
| this value is invalid
const cm_t | CM_CC_UNKNOWN = 0x10
| unknown calling convention
const cm_t | CM_CC_VOIDARG = 0x20
| function without arguments if has other cc and argnum == 0, represent as f() - unknown list
const cm_t | CM_CC_CDECL = 0x30
| stack
const cm_t | CM_CC_ELLIPSIS = 0x40
| cdecl + ellipsis
const cm_t | CM_CC_STDCALL = 0x50
| stack, purged
const cm_t | CM_CC_PASCAL = 0x60
| stack, purged, reverse order of args
const cm_t | CM_CC_FASTCALL = 0x70
| stack, purged (x86), first args are in regs (compiler-dependent)
const cm_t | CM_CC_THISCALL = 0x80
| stack, purged (x86), first arg is in reg (compiler-dependent)
const cm_t | CM_CC_SWIFT = 0x90
| (Swift) arguments and return values in registers (compiler-dependent)
const cm_t | CM_CC_SPOILED = 0xA0
| This is NOT a cc! Mark of __spoil record the low nibble is count and after n {spoilreg_t} present real cm_t byte. More...
const cm_t | CM_CC_GOLANG = 0xB0
| (Go) arguments and return value in stack
const cm_t | CM_CC_RESERVE3 = 0xC0
const cm_t | CM_CC_SPECIALE = 0xD0
| CM_CC_SPECIAL with ellipsis
const cm_t | CM_CC_SPECIALP = 0xE0
| Equal to CM_CC_SPECIAL, but with purged stack.
const cm_t | CM_CC_SPECIAL = 0xF0
| usercall: locations of all arguments and the return value are explicitly specified
const type_t | BFA_NORET = 0x01
| __noreturn
const type_t | BFA_PURE = 0x02
| __pure
const type_t | BFA_HIGH = 0x04
| high level prototype (with possibly hidden args)
const type_t | BFA_STATIC = 0x08
| static
const type_t | BFA_VIRTUAL = 0x10
| virtual
const cm_t | BFA_FUNC_MARKER = 0x0F
| This is NOT a cc! (used internally as a marker)
const type_t | BFA_FUNC_EXT_FORMAT = 0x80
| This is NOT a real attribute (used internally as marker for extended format)
const argloc_type_t | ALOC_NONE = 0
| none
const argloc_type_t | ALOC_STACK = 1
| stack offset
const argloc_type_t | ALOC_DIST = 2
| distributed (scattered)
const argloc_type_t | ALOC_REG1 = 3
| one register (and offset within it)
const argloc_type_t | ALOC_REG2 = 4
| register pair
const argloc_type_t | ALOC_RREL = 5
| register relative
const argloc_type_t | ALOC_STATIC = 6
| global address
const argloc_type_t | ALOC_CUSTOM = 7
| custom argloc (7 or higher)
const cm_t | C_PC_TINY = (CM_N16_F32 | CM_M_NN)
const cm_t | C_PC_SMALL = (CM_N16_F32 | CM_M_NN)
const cm_t | C_PC_COMPACT = (CM_N16_F32 | CM_M_NF)
const cm_t | C_PC_MEDIUM = (CM_N16_F32 | CM_M_FN)
const cm_t | C_PC_LARGE = (CM_N16_F32 | CM_M_FF)
const cm_t | C_PC_HUGE = (CM_N16_F32 | CM_M_FF)
const cm_t | C_PC_FLAT = (CM_N32_F48 | CM_M_NN)
const comp_t | COMP_MASK = 0x0F
const comp_t | COMP_UNK = 0x00
| Unknown.
const comp_t | COMP_MS = 0x01
| Visual C++.
const comp_t | COMP_BC = 0x02
| Borland C++.
const comp_t | COMP_WATCOM = 0x03
| Watcom C++.
const comp_t | COMP_GNU = 0x06
| GNU C++.
const comp_t | COMP_VISAGE = 0x07
| Visual Age C++.
const comp_t | COMP_BP = 0x08
| Delphi.
const comp_t | COMP_UNSURE = 0x80
| uncertain compiler id
const size_t | BADSIZE = size_t(-1)
| bad type size
const int | FIRST_NONTRIVIAL_TYPID = 0x100
| Denotes the first bit describing a nontrivial type.
const int | TYPID_ISREF = 0x100
| Identifies that a type that is a typeref.
const int | TYPID_SHIFT = 9
| First type detail bit.
const uchar | MAX_ENUM_SERIAL = 255
| Max number of identical constants allowed for one enum type.

## Macro Definition Documentation

## ◆ TA_FORMAT

#define TA_FORMAT "format"

info about the 'format' argument.

3 times pack_dd: format_functype_t, argument number of 'format', argument number of '...'

## ◆ ARGLOC_HELPER_DEFINITIONS

#define ARGLOC_HELPER_DEFINITIONS | ( |  | decl | ) |

Value:
decl void ida_export copy_argloc(argloc_t *dst, const argloc_t *src); \
decl void ida_export cleanup_argloc(argloc_t *vloc);\
decl int ida_export compare_arglocs(const argloc_t &a, const argloc_t &b);
argloc_t
Describes an argument location.
Definition: typeinf.hpp:1085

Helper to declare common argloc_t related functions.

## Typedef Documentation

## ◆ type_t

typedef uchar type_t

In serialized form, a type is represented by a byte sequence.

(see Type flags) We call it a type string.

## ◆ edmvec_t

typedef qvector<edm_t> edmvec_t

vector of enum values.

for regular enums, no sorting order is defined. for bitmasks, the vector consists of bitmask groups. each non-trivial group (having more than one member or more than one bit in the value) starts with a mask member, the rest of the group has no defined sorting order.

## ◆ local_tinfo_predicate_t

typedef int idaapi local_tinfo_predicate_t(uint32 ord, const tinfo_t &type, void *ud)

Controls which types are displayed/selected when choosing local types.

Return values

  0 | skip type
  1 | include

## ◆ enum_type_visitor_t

using enum_type_visitor_t = std::function<ssize_t(const struct enum_type_data_t &ei, size_t idx, uint64 value, uint64 bmask)>

Callback for visit_edms.

Parameters

  ei | enum type details
  idx | constant index
  value | applied value
  bmask | group bitmask

Returns
  0 to continue, stop visiting enum members otherwise

## Enumeration Type Documentation

## ◆ sclass_t

enum sclass_t

< storage class

Enumerator
SC_UNK | unknown
SC_TYPE | typedef
SC_EXT | extern
SC_STAT | static
SC_REG | register
SC_AUTO | auto
SC_FRIEND | friend
SC_VIRT | virtual

## ◆ stock_type_id_t

enum stock_type_id_t

IDs for common types.

Enumerator
STI_PCHAR | char *
STI_PUCHAR | uint8 *
STI_PCCHAR | const char *
STI_PCUCHAR | const uint8 *
STI_PBYTE | _BYTE *
STI_PINT | int *
STI_PUINT | unsigned int *
STI_PVOID | void *
STI_PPVOID | void **
STI_PCVOID | const void *
STI_ACHAR | char[]
STI_AUCHAR | uint8[]
STI_ACCHAR | const char[]
STI_ACUCHAR | const uint8[]
STI_FPURGING | void __userpurge(int)
STI_FDELOP | void __cdecl(void *)
STI_MSGSEND | void *(void *, const char *, ...)
STI_AEABI_LCMP | int __fastcall __pure(int64 x, int64 y)
STI_AEABI_ULCMP | int __fastcall __pure(uint64 x, uint64 y)
STI_DONT_USE | unused stock type id; should not be used
STI_SIZE_T | size_t
STI_SSIZE_T | ssize_t
STI_AEABI_MEMCPY | void __fastcall(void *, const void *, size_t)
STI_AEABI_MEMSET | void __fastcall(void *, size_t, int)
STI_AEABI_MEMCLR | void __fastcall(void *, size_t)
STI_RTC_CHECK_2 | int16 __fastcall(int16 x)
STI_RTC_CHECK_4 | int32 __fastcall(int32 x)
STI_RTC_CHECK_8 | int64 __fastcall(int64 x)
STI_COMPLEX64 | struct complex64_t { float real, imag; }
STI_COMPLEX128 | struct complex128_t { double real, imag; }
STI_PUNKNOWN | _UNKNOWN *

## ◆ gtd_udt_t

enum gtd_udt_t

Constants to be used with get_udt_details()

Enumerator
GTD_CALC_LAYOUT | calculate udt layout
GTD_NO_LAYOUT | don't calculate udt layout please note that udt layout may have been calculated earlier
GTD_DEL_BITFLDS | delete udt bitfields

## ◆ gtd_func_t

enum gtd_func_t

Constants to be used with get_func_details()

Enumerator
GTD_CALC_ARGLOCS | calculate func arg locations
GTD_NO_ARGLOCS | don't calculate func arg locations please note that the locations may have been calculated earlier

## ◆ gts_code_t

enum gts_code_t

Constants to be used with get_size()

Enumerator
GTS_NESTED | nested type (embedded into a udt)
GTS_BASECLASS | is baseclass of a udt

## Function Documentation

## ◆ is_tah_byte()

THREAD_SAFE bool is_tah_byte | ( | type_t | t | ) |
| inline

The TAH byte (type attribute header byte) denotes the start of type attributes.

(see "tah-typeattrs" in the type bit definitions)

## ◆ is_sdacl_byte()

THREAD_SAFE bool is_sdacl_byte | ( | type_t | t | ) |
| inline

Identify an sdacl byte.

The first sdacl byte has the following format: 11xx000x. The sdacl bytes are appended to udt fields. They indicate the start of type attributes (as the tah-bytes do). The sdacl bytes are used in the udt headers instead of the tah-byte. This is done for compatibility with old databases, they were already using sdacl bytes in udt headers and as udt field postfixes. (see "sdacl-typeattrs" in the type bit definitions)

## ◆ operator<()

THREAD_SAFE bool operator< | ( | const bytevec_t & | v1,
|  | const bytevec_t & | v2
| ) |  |
| inline

Compare two bytevecs with '<'.

v1 is considered less than v2 if either:

- v1.size() < v2.size()
- there is some i such that v1[i] < v2[i]

## ◆ extract_argloc()

idaman bool ida_export extract_argloc | ( | argloc_t * | vloc,
|  | const type_t ** | ptype,
|  | bool | forbid_stkoff
| ) |  |

Deserialize an argument location.

Argument FORBID_STKOFF checks location type. It can be used, for example, to check the return location of a function that cannot return a value in the stack

## ◆ add_base_tils()

idaman int ida_export add_base_tils | ( | qstring * | errbuf,
|  | til_t * | ti,
|  | const char * | tildir,
|  | const char * | bases,
|  | bool | gen_events
| ) |  |

Add multiple base tils.

Parameters

  [out] | errbuf | error message
  | ti | target til
  | tildir | directory where specified tils can be found. nullptr means all default til subdirectories.
  | bases | comma separated list of til names
  | gen_events | generate corresponding IDB events

Returns
  one of Add TIL result codes

## ◆ load_til()

idaman til_t *ida_export load_til | ( | const char * | name,
|  | qstring * | errbuf,
|  | const char * | tildir = `nullptr`
| ) |  |

Load til from a file without adding it to the database list (see also add_til).

Failure to load base tils are reported into 'errbuf'. They do not prevent loading of the main til.

Parameters

  | name | filename of the til. If it's an absolute path, tildir is ignored. NB: the file extension is forced to .til
  [out] | errbuf | error message
  | tildir | directory where to load the til from. nullptr means default til subdirectories.

Returns
  pointer to resulting til, nullptr if failed and error message is in errbuf

## ◆ sort_til()

idaman bool ida_export sort_til | ( | til_t * | ti | ) |

Sort til (use after modifying it).

Returns
  false if no memory or bad parameter

## ◆ compact_til()

idaman bool ida_export compact_til | ( | til_t * | ti | ) |

Collect garbage in til.

Must be called before storing the til.

Returns
  true if any memory was freed

## ◆ store_til()

idaman bool ida_export store_til | ( | til_t * | ti,
|  | const char * | tildir,
|  | const char * | name
| ) |  |

Store til to a file.

If the til contains garbage, it will be collected before storing the til. Your plugin should call compact_til() before calling store_til().

Parameters

  ti | type library to store
  tildir | directory where to store the til. nullptr means current directory.
  name | filename of the til. If it's an absolute path, tildir is ignored. NB: the file extension is forced to .til

Returns
  success

## ◆ get_default_align()

size_t get_default_align | ( |  | ) |
| inline

Get default alignment for structure fields.

Returns
  one of 1,2,4,8,...

## ◆ align_size()

THREAD_SAFE void align_size | ( | size_t & | cur_tot_size,
|  | size_t | elem_size,
|  | size_t | algn
| ) |  |
| inline

Get alignment delta for the a structure field.

Parameters

  cur_tot_size | the structure size calculated so far
  elem_size | size of the current field. the whole structure should be calculated
  algn | the structure alignment (0,1,2,4,8...)

## ◆ deref_ptr()

idaman bool ida_export deref_ptr | ( | ea_t * | ptr_ea,
|  | const tinfo_t & | tif,
|  | ea_t * | closure_obj = `nullptr`
| ) |  |

Dereference a pointer.

Parameters

  [out] | ptr_ea | in/out parameter in: address of the pointer out: the pointed address
  | tif | type of the pointer
  [out] | closure_obj | closure object (not used yet)

Returns
  success

## ◆ remove_tinfo_pointer()

idaman bool ida_export remove_tinfo_pointer | ( | tinfo_t * | tif,
|  | const char ** | pname,
|  | const til_t * | til = `nullptr`
| ) |  |

Remove pointer of a type.

(i.e. convert "char *" into "char"). Optionally remove the "lp" (or similar) prefix of the input name. If the input type is not a pointer, then fail.

## ◆ add_til()

idaman int ida_export add_til | ( | const char * | name,
|  | int | flags
| ) |  |

Load a til file and add it the database type libraries list.

IDA will also apply function prototypes for matching function names.

Parameters

  name | til name
  flags | combination of Load TIL flags

Returns
  one of Load TIL result codes

## ◆ apply_named_type()

idaman bool ida_export apply_named_type | ( | ea_t | ea,
|  | const char * | name
| ) |  |

Apply the specified named type to the address.

Parameters

  ea | linear address
  name | the type name, e.g. "FILE"

Returns
  success

## ◆ apply_tinfo()

idaman bool ida_export apply_tinfo | ( | ea_t | ea,
|  | const tinfo_t & | tif,
|  | uint32 | flags
| ) |  |

Apply the specified type to the specified address.

This function sets the type and tries to convert the item at the specified address to conform the type.

Parameters

  ea | linear address
  tif | type string in internal format
  flags | combination of Apply tinfo flags

Returns
  success

## ◆ apply_cdecl()

idaman bool ida_export apply_cdecl | ( | til_t * | til,
|  | ea_t | ea,
|  | const char * | decl,
|  | int | flags = `0`
| ) |  |

Apply the specified type to the address.

This function parses the declaration and calls apply_tinfo()

Parameters

  til | type library
  ea | linear address
  decl | type declaration in C form
  flags | flags to pass to apply_tinfo (TINFO_DEFINITE is always passed)

Returns
  success

## ◆ apply_callee_tinfo()

idaman bool ida_export apply_callee_tinfo | ( | ea_t | caller,
|  | const tinfo_t & | tif
| ) |  |

Apply the type of the called function to the calling instruction.

This function will append parameter comments and rename the local variables of the calling function. It also stores information about the instructions that initialize call arguments in the database. Use get_arg_addrs() to retrieve it if necessary. Alternatively it is possible to hook to processor_t::arg_addrs_ready event.

Parameters

  caller | linear address of the calling instruction. must belong to a function.
  tif | type info

Returns
  success

## ◆ get_arg_addrs()

idaman bool ida_export get_arg_addrs | ( | eavec_t * | out,
|  | ea_t | caller
| ) |  |

Retrieve argument initialization addresses.

This function retrieves information about argument addresses. This information is stored in the database by apply_callee_tinfo().

Parameters

  out | linear addresses of the instructions that load call arguments
  caller | address of the call instruction

Returns
  success

## ◆ apply_once_tinfo_and_name()

idaman bool ida_export apply_once_tinfo_and_name | ( | ea_t | dea,
|  | const tinfo_t & | tif,
|  | const char * | name
| ) |  |

Apply the specified type and name to the address.

This function checks if the address already has a type. If the old type
does not exist or the new type is 'better' than the old type, then the
new type will be applied. A type is considered better if it has more
information (e.g. BTMT_STRUCT is better than BT_INT).
The same logic is with the name: if the address already have a meaningful
name, it will be preserved. Only if the old name does not exist or it
is a dummy name like byte_123, it will be replaced by the new name.

Parameters

  dea | linear address
  tif | type string in the internal format
  name | new name for the address

Returns
  success

## ◆ guess_tinfo()

idaman int ida_export guess_tinfo | ( | tinfo_t * | out,
|  | tid_t | id
| ) |  |

Generate a type information about the id from the disassembly.

id can be a structure/union/enum id or an address.

Returns
  one of Guess tinfo codes

## ◆ get_idati()

idaman til_t *ida_export get_idati | ( |  | ) |

Pointer to the local type library - this til is private for each IDB file Functions that accept til_t* default to `idati` when is nullptr provided.

## ◆ get_idainfo_by_type()

idaman bool ida_export get_idainfo_by_type | ( | size_t * | out_size,
|  | flags64_t * | out_flags,
|  | opinfo_t * | out_mt,
|  | const tinfo_t & | tif,
|  | size_t * | out_alsize = `nullptr`
| ) |  |

Extract information from a tinfo_t.

Parameters

  [out] | out_size | size of tif
  [out] | out_flags | description of type using flags64_t
  [out] | out_mt | info for non-scalar types
  | tif | the type to inspect
  [out] | out_alsize | alignment

## ◆ get_tinfo_by_flags()

idaman bool ida_export get_tinfo_by_flags | ( | tinfo_t * | out,
|  | flags64_t | flags
| ) |  |

Get tinfo object that corresponds to data flags.

Parameters

  [out] | out | type info
  | flags | simple flags (byte, word, ..., zword)

## ◆ visit_stroff_udms()

idaman int ida_export visit_stroff_udms | ( | udm_visitor_t & | sfv,
|  | const tid_t * | path,
|  | int | plen,
|  | adiff_t * | disp,
|  | bool | appzero
| ) |  |

Visit structure fields in a stroff expression or in a reference to a struct data variable.

This function can be used to enumerate all components of an expression like 'a.b.c'.

Parameters

  | sfv | visitor object
  | path | struct path (path[0] contains the initial struct id)
  | plen | len
  [in,out] | disp | offset into structure
  | appzero | should visit field at offset zero?

Returns
  visitor result

## ◆ remove_pointer()

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

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()

## ◆ unpack_idcobj_from_idb()

idaman error_t ida_export unpack_idcobj_from_idb | ( | idc_value_t * | obj,
|  | const tinfo_t & | tif,
|  | ea_t | ea,
|  | const bytevec_t * | off0,
|  | int | pio_flags = `0`
| ) |  |

Collection of register objects.

Read a typed idc object from the database

## ◆ pack_idcobj_to_bv()

idaman error_t ida_export pack_idcobj_to_bv | ( | const idc_value_t * | obj,
|  | const tinfo_t & | tif,
|  | relobj_t * | bytes,
|  | void * | objoff,
|  | int | pio_flags = `0`
| ) |  |

Write a typed idc object to the byte vector.

Byte vector may be non-empty, this function will append data to it

## ◆ apply_tinfo_to_stkarg()

idaman bool ida_export apply_tinfo_to_stkarg | ( | const insn_t & | insn,
|  | const op_t & | x,
|  | uval_t | v,
|  | const tinfo_t & | tif,
|  | const char * | name
| ) |  |

Helper function for the processor modules.

to be called from processor_t::use_stkarg_type

## ◆ func_has_stkframe_hole()

idaman bool ida_export func_has_stkframe_hole | ( | ea_t | ea,
|  | const func_type_data_t & | fti
| ) |  |

Looks for a hole at the beginning of the stack arguments.

Will make use of the IDB's func_t function at that place (if present) to help determine the presence of such a hole.

## ◆ lower_type()

idaman int ida_export lower_type | ( | til_t * | til,
|  | tinfo_t * | tif,
|  | const char * | name = `nullptr`,
|  | lowertype_helper_t * | _helper = `nullptr`
| ) |  |

Lower type.

Inspect the type and lower all function subtypes using lower_func_type().
We call the prototypes usually encountered in source files "high level"
They may have implicit arguments, array arguments, big structure retvals, etc
We introduce explicit arguments (i.e. 'this' pointer) and call the result
"low level prototype". See FTI_HIGH.

In order to improve heuristics for recognition of big structure retvals,
it is recommended to pass a helper that will be used to make decisions.
That helper will be used only for lowering 'tif', and not for the children
types walked through by recursion.

Return values

  1 | removed FTI_HIGH,
  2 | made substantial changes
  -1 | failure

## ◆ replace_ordinal_typerefs()

idaman int ida_export replace_ordinal_typerefs | ( | til_t * | til,
|  | tinfo_t * | tif
| ) |  |

Replace references to ordinal types by name references.

This function 'unties' the type from the current local type library and makes it easier to export it.

Parameters

  til | type library to use. may be nullptr.
  tif | type to modify (in/out)

Return values

  number | of replaced subtypes, -1 on failure

## ◆ begin_type_updating()

idaman void ida_export begin_type_updating | ( | update_type_t | utp | ) |

Mark the beginning of a large update operation on the types.

Can be used with add_enum_member(), add_struc_member, etc... Also see end_type_updating()

## ◆ format_cdata()

idaman bool ida_export format_cdata | ( | qstrvec_t * | outvec,
|  | const idc_value_t & | idc_value,
|  | const tinfo_t * | tif,
|  | valstr_t * | vtree = `nullptr`,
|  | const format_data_info_t * | fdi = `nullptr`
| ) |  |

Format a data value as a C initializer.

Parameters

  outvec | buffer for the formatted string(s). may be nullptr
  idc_value | value to format
  tif | type of the data to format. if nullptr and PTV_DEREF is specified, take tinfo from idb
  vtree | more detailed output info
  fdi | formatting options

Returns
  success. if failed, see qerrno for more info

## ◆ print_cdata()

idaman int ida_export print_cdata | ( | text_sink_t & | printer,
|  | const idc_value_t & | idc_value,
|  | const tinfo_t * | tif,
|  | const format_data_info_t * | fdi = `nullptr`
| ) |  |

The same as format_cdata(), but instead of returning the answer in a vector, print it.

This function can handle very huge data volume without using too much memory. As soon as the output text becomes too long, the function prints it and flushes its internal buffers.

Return values

  0 | ok
  -1 | printing failed, check qerrno
  else | code returned by text_sink_t::print()

## ◆ print_decls()

idaman int ida_export print_decls | ( | text_sink_t & | printer,
|  | const til_t * | til,
|  | const ordvec_t * | ordinals,
|  | uint32 | pdf_flags
| ) |  |

Print types (and possibly their dependencies) in a format suitable for using in a header file.

This is the reverse parse_decls().

Parameters

  printer | a handler for printing text
  til | the type library holding the ordinals
  ordinals | ordinals of types to export. nullptr means: all ordinals in til
  pdf_flags | flags for the algorithm. A combination of PDF_ constants

Return values

  >0 | the number of types exported
  0 | an error occurred
  <0 | the negated number of types exported. There were minor errors and the resulting output might not be compilable.

## ◆ calc_number_of_children()

idaman int ida_export calc_number_of_children | ( | const argloc_t & | loc,
|  | const tinfo_t & | tif,
|  | bool | dont_deref_ptr = `false`
| ) |  |

Calculate max number of lines of a formatted c data, when expanded (PTV_EXPAND).

Parameters

  loc | location of the data (ALOC_STATIC or ALOC_CUSTOM)
  tif | type info
  dont_deref_ptr | consider 'ea' as the ptr value

Return values

  0 | data is not expandable
  -1 | error, see qerrno
  else | the max number of lines

## ◆ get_enum_member_expr()

idaman bool ida_export get_enum_member_expr | ( | qstring * | buf,
|  | const tinfo_t & | tif,
|  | int | serial,
|  | uint64 | value
| ) |  |

Return a C expression that can be used to represent an enum member.

If the value does not correspond to any single enum member, this function tries to find a bitwise combination of enum members that correspond to it. If more than half of value bits do not match any enum members, it fails.

Parameters

  buf | output buffer
  tif | enumeration type
  serial | which enumeration member to use (0 means the first with the given value)
  value | value to search in the enumeration type

Returns
  success

## ◆ choose_named_type()

idaman bool ida_export choose_named_type | ( | til_symbol_t * | out_sym,
|  | const til_t * | root_til,
|  | const char * | title,
|  | int | ntf_flags,
|  | predicate_t * | predicate = `nullptr`
| ) |  |

Choose a type from a type library.

Parameters

  out_sym | pointer to be filled with the chosen type
  root_til | pointer to starting til (the function will inspect the base tils if allowed by flags)
  title | title of listbox to display
  ntf_flags | combination of Flags for named types
  predicate | predicate to select types to display (maybe nullptr)

Returns
  false if nothing is chosen, otherwise true

## ◆ choose_local_tinfo()

idaman uint32 ida_export choose_local_tinfo | ( | const til_t * | ti,
|  | const char * | title,
|  | local_tinfo_predicate_t * | func = `nullptr`,
|  | uint32 | def_ord = `0`,
|  | void * | ud = `nullptr`
| ) |  |

Choose a type from the local type library.

Parameters

  ti | pointer to til
  title | title of listbox to display
  func | predicate to select types to display (maybe nullptr)
  def_ord | ordinal to position cursor before choose
  ud | user data

Returns
  == 0 means nothing is chosen, otherwise an ordinal number

## ◆ choose_local_tinfo_and_delta()

idaman uint32 ida_export choose_local_tinfo_and_delta | ( | int32 * | delta,
|  | const til_t * | ti,
|  | const char * | title,
|  | local_tinfo_predicate_t * | func = `nullptr`,
|  | uint32 | def_ord = `0`,
|  | void * | ud = `nullptr`
| ) |  |

Choose a type from the local type library and specify the pointer shift value.

Parameters

  delta | pointer shift value
  ti | pointer to til
  title | title of listbox to display
  func | predicate to select types to display (maybe nullptr)
  def_ord | ordinal to position cursor before choose
  ud | user data

Returns
  == 0 means nothing is chosen, otherwise an ordinal number

## ◆ visit_edms()

idaman ssize_t ida_export visit_edms | ( | const tinfo_t & | tif,
|  | uint64 | value,
|  | int | nbytes,
|  | uchar | serial,
|  | const enum_type_visitor_t & | visitor
| ) |  |

Visit enum members having the specified value.

Parameters

  tif | enum type
  value | value to visit
  nbytes | size of value in bytes
  serial | use the enum constant with the specified serial; if it does not exist, use serial 0
  visitor | the visitor function

Returns
  -1 if TIF is not a enum type; code from VISITOR or 0 if no member was visited

Note
  1. For ordinary enums, two values are checked for equality: * the zero-extended VALUE * the sign-extended VALUE 2. For bitmask enums, the following members are visited: * the regular member of the bitmask group * the bitmask itself 3. Enum constant with value 0 is acceptable