Latest available version: IDA and decompilers v8.2.230124sp1 see all releases
Hex-Rays logo State-of-the-art binary code analysis tools
email icon
typeinf.hpp File Reference

Describes the type information records in IDA. More...

Classes

struct  type_attr_t
 Extended type attributes. More...
 
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  enum_member_t
 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  udt_member_t
 An object to represent struct or union members. More...
 
struct  udtmembervec_t
 vector of udt member objects More...
 
struct  udt_type_data_t
 An object to represent struct or union types (see tinfo_t::get_udt_details()) More...
 
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...
 

Macros

#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 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 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 TAH_ALL   0x03F0
 all defined bits
 
#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 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 PRTYPE_1LINE   0x0000
 print to one line
 
#define PRTYPE_MULTI   0x0001
 print to many lines
 
#define PRTYPE_TYPE   0x0002
 print type declaration (not variable declaration)
 
#define PRTYPE_PRAGMA   0x0004
 print pragmas for alignment
 
#define PRTYPE_SEMI   0x0008
 append ; to the end
 
#define PRTYPE_CPP   0x0010
 use c++ name (only for print_type())
 
#define PRTYPE_DEF   0x0020
 tinfo_t: print definition, if available
 
#define PRTYPE_NOARGS   0x0040
 tinfo_t: do not print function argument names
 
#define PRTYPE_NOARRS   0x0080
 tinfo_t: print arguments with FAI_ARRAY as pointers
 
#define PRTYPE_NORES   0x0100
 tinfo_t: never resolve types (meaningful with PRTYPE_DEF)
 
#define PRTYPE_RESTORE   0x0200
 tinfo_t: print restored types for FAI_ARRAY and FAI_STRUCT
 
#define PRTYPE_NOREGEX   0x0400
 do not apply regular expressions to beautify name
 
#define PRTYPE_COLORED   0x0800
 add color tag COLOR_SYMBOL for any parentheses, commas and colons
 
#define PRTYPE_METHODS   0x1000
 tinfo_t: print udt methods
 
#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 CCN_C   0x00
 
#define CCN_CPP   0x01
 
#define IMPTYPE_VERBOSE   0x0001
 more verbose output (dialog boxes may appear)
 
#define IMPTYPE_OVERRIDE   0x0002
 override existing type
 
#define IMPTYPE_LOCAL   0x0004
 the type is local, the struct/enum won't be marked as til type. More...
 
#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 udt_member_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 DECLARE_TINFO_HELPERS(decl)
 Macro to declare common tinfo_t related functions. More...
 
#define STRMEM_MASK   0x0007
 
#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_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 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 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 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 VTBL_SUFFIX   "_vtbl"
 
#define VTBL_MEMNAME   "__vftable"
 
#define TPOS_LNNUM   "\x05"
 
#define TVIS_TYPE   0x0001
 new type info is present
 
#define TVIS_NAME   0x0002
 new name is present
 
#define TVIS_CMT   0x0004
 new comment is present
 
#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_LZHEX   0x0020
 print hex numbers with leading zeroes
 
#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.
 
#define PCN_RADIX   0x07
 number base to use
 
#define PCN_DEC   0x00
 decimal
 
#define PCN_HEX   0x01
 hexadecimal
 
#define PCN_OCT   0x02
 octal
 
#define PCN_CHR   0x03
 character
 
#define PCN_UNSIGNED   0x08
 add 'u' suffix
 
#define PCN_LZHEX   0x10
 print leading zeroes for hexdecimal number
 
#define PCN_NEGSIGN   0x20
 print negated value (-N) for negative numbers
 
#define PCN_DECSEXT   0x40
 automatically extend sign of signed decimal numbers
 
Modifiers

Work with type modifiers: const and volatile

#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
 

Typedefs

typedef uchar type_t
 byte sequence used to describe a type in IDA (see Type flags)
 
typedef uchar p_string
 pascal-like string: dt length, characters
 
typedef uchar p_list
 several p_string's
 
typedef uchar bte_t
 Enum type flags.
 
typedef qvector< type_attr_ttype_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 - see Argument location types.
 
typedef qvector< argloc_targlocs_t
 vector of argument locations
 
typedef qvector< argpart_targpartvec_t
 
typedef qvector< comp_tcompvec_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 qvector< tinfo_ttinfovec_t
 vector of tinfo objects
 
typedef qvector< simd_info_tsimd_info_vec_t
 
typedef qvector< funcarg_tfuncargvec_t
 vector of function argument objects
 
typedef qvector< enum_member_tenum_member_vec_t
 vector of enum values
 
typedef qvector< regobj_tregobjvec_t
 
typedef qvector< valstr_tvalstrvec_t
 
typedef qvector< uint32ordvec_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...
 

Enumerations

enum  argreg_policy_t {
  ARGREGS_POLICY_UNDEFINED , ARGREGS_GP_ONLY , ARGREGS_INDEPENDENT , ARGREGS_BY_SLOTS ,
  ARGREGS_FP_CONSUME_GP , ARGREGS_MIPS_O32
}
 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 , sc_type , sc_ext , sc_stat ,
  sc_reg , sc_auto , sc_friend , sc_virt
}
 < storage class More...
 
enum  tinfo_code_t {
  TERR_OK = 0 , TERR_SAVE = -1 , TERR_SERIALIZE = -2 , TERR_WRONGNAME = -3 ,
  TERR_BADSYNC = -4
}
 Error codes for save_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_LAST
}
 IDs for common types. More...
 
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()
 

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()
 
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 deafult CC)
 
THREAD_SAFE bool is_user_cc (cm_t cm)
 Does the calling convention specify argument locations explicitly?
 
THREAD_SAFE bool is_vararg_cc (cm_t cm)
 Does the calling convention use ellipsis?
 
THREAD_SAFE bool is_purging_cc (cm_t cm)
 Does the calling convention clean the stack arguments upon return?. More...
 
bool is_golang_cc (cm_t cc)
 GO language calling convention (return value in stack)?
 
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 (void)
 Get compiler specified by inf.cc.
 
bool is_gcc (void)
 Is the target compiler COMP_GNU?
 
bool is_gcc32 (void)
 Is the target compiler 32 bit gcc?
 
bool is_gcc64 (void)
 Is the target compiler 64 bit gcc?
 
bool gcc_layout (void)
 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 (void)
 is GOLANG calling convention used by default?
 
void switch_to_golang (void)
 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...
 
idaman bool ida_export parse_decl (tinfo_t *tif, qstring *out, til_t *til, const char *decl, int flags)
 Parse ONE declaration. More...
 
THREAD_SAFE int convert_pt_flags_to_hti (int pt_flags)
 Convert Type parsing flags to Type formatting flags. 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 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_qty (const til_t *ti)
 Get number of allocated ordinals. More...
 
idaman tinfo_code_t ida_export set_numbered_type (til_t *ti, uint32 ordinal, int ntf_flags, const char *name, const type_t *type, const p_list *fields=nullptr, const char *cmt=nullptr, const p_list *fldcmts=nullptr, const sclass_t *sclass=nullptr)
 Store a type in the til. 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 int ida_export get_ordinal_from_idb_type (const char *name, const type_t *type)
 Get ordinal number of an idb type (struct/enum). More...
 
bool idaapi is_autosync (const char *name, const type_t *type)
 Is the specified idb type automatically synchronized?
 
bool idaapi is_autosync (const char *name, const tinfo_t &tif)
 Is the specified idb type automatically synchronized? 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 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 (void)
 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 tid_t ida_export import_type (const til_t *til, int idx, const char *name, int flags=0)
 Copy a named type from til to idb. 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 *tif, 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 const til_t *ida_export get_idati (void)
 Pointer to the local type library - this til is private for each IDB file Function that accepts til_t* uses local type library instead of nullptr. More...
 
idaman bool ida_export get_idainfo_by_type (size_t *out_size, flags_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_idainfo64_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 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 inf_pack_stkargs (cm_t cc)
 
bool inf_big_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_tinfos2 (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 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, 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 size_t ida_export format_c_number (char *buf, size_t bufsize, uint128 value, int size, int pcn=0)
 Format a C number. 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...
 

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_BITFIELD = 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_MANUAL = 0x90
 special case for compiler specific (not used)
 
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 uint32 BADORD = uint32(-1)
 invalid type ordinal
 
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.
 

Detailed Description

Describes the type information records in IDA.

The recommended way of using type info is to use the tinfo_t class. The type information is internally kept as an array of bytes terminated by 0.

Items in brackets [] are optional and sometimes are omitted. type_t... means a sequence of type_t bytes which defines a type.

Note
to work with the types of instructions or data in the database, use get_tinfo()/set_tinfo() and similar functions.

Macro Definition Documentation

◆ 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);
Describes an argument location.
Definition: typeinf.hpp:971

Helper to declare common argloc_t related functions.

◆ HTI_PAK_SHIFT

#define HTI_PAK_SHIFT   12

shift for HTI_PAK.

This field should be used if you want to remember an explicit pack value for each structure/union type. See HTI_PAK... definitions

◆ IMPTYPE_LOCAL

#define IMPTYPE_LOCAL   0x0004

the type is local, the struct/enum won't be marked as til type.

there is no need to specify this bit if til==idati, the kernel will set it automatically

◆ SUDT_UNEX

#define SUDT_UNEX   0x0008

references to nonexistent member types are acceptable; in this case it is better to set the corresponding udt_member_t::fda field to the type alignment.

If this field is not set, ida will try to guess the alignment.

◆ DECLARE_TINFO_HELPERS

#define DECLARE_TINFO_HELPERS (   decl)
Value:
decl void ida_export copy_tinfo_t(tinfo_t *_this, const tinfo_t &r); \
decl void ida_export clear_tinfo_t(tinfo_t *_this);\
decl bool ida_export create_tinfo(tinfo_t *_this, type_t bt, type_t bt2, void *ptr);\
decl int ida_export verify_tinfo(uint32 typid);\
decl bool ida_export get_tinfo_details(uint32 typid, type_t bt2, void *buf);\
decl size_t ida_export get_tinfo_size(uint32 *p_effalign, uint32 typid, int gts_code);\
decl size_t ida_export get_tinfo_pdata(void *outptr, uint32 typid, int what);\
decl size_t ida_export get_tinfo_property(uint32 typid, int gta_prop);\
decl size_t ida_export set_tinfo_property(tinfo_t *tif, int sta_prop, size_t x);\
decl bool ida_export serialize_tinfo(qtype *type, qtype *fields, qtype *fldcmts, const tinfo_t *tif, int sudt_flags);\
decl bool ida_export deserialize_tinfo(tinfo_t *tif, const til_t *til, const type_t **ptype, const p_list **pfields, const p_list **pfldcmts);\
decl int ida_export find_tinfo_udt_member(struct udt_member_t *udm, uint32 typid, int strmem_flags);\
decl bool ida_export print_tinfo(qstring *result, const char *prefix, int indent, int cmtindent, int flags, const tinfo_t *tif, const char *name, const char *cmt);\
decl const char *ida_export dstr_tinfo(const tinfo_t *tif);\
decl int ida_export visit_subtypes(struct tinfo_visitor_t *visitor, struct type_mods_t *out, const tinfo_t &tif, const char *name, const char *cmt);\
decl bool ida_export compare_tinfo(uint32 t1, uint32 t2, int tcflags);\
decl int ida_export lexcompare_tinfo(uint32 t1, uint32 t2, int);\
decl bool ida_export get_stock_tinfo(tinfo_t *tif, stock_type_id_t id);\
decl uint64 ida_export read_tinfo_bitfield_value(uint32 typid, uint64 v, int bitoff);\
decl uint64 ida_export write_tinfo_bitfield_value(uint32 typid, uint64 dst, uint64 v, int bitoff);\
decl bool ida_export get_tinfo_attr(uint32 typid, const qstring &key, bytevec_t *bv, bool all_attrs);\
decl bool ida_export set_tinfo_attr(tinfo_t *tif, const type_attr_t &ta, bool may_overwrite);\
decl bool ida_export del_tinfo_attr(tinfo_t *tif, const qstring &key, bool make_copy);\
decl bool ida_export get_tinfo_attrs(uint32 typid, type_attrs_t *tav, bool include_ref_attrs);\
decl bool ida_export set_tinfo_attrs(tinfo_t *tif, type_attrs_t *ta);\
decl uint32 ida_export score_tinfo(const tinfo_t *tif);\
decl tinfo_code_t ida_export save_tinfo(tinfo_t *tif, til_t *til, size_t ord, const char *name, int ntf_flags);\
decl bool ida_export append_tinfo_covered(rangeset_t *out, uint32 typid, uint64 offset);\
decl bool ida_export calc_tinfo_gaps(rangeset_t *out, uint32 typid);\
decl bool ida_export name_requires_qualifier(qstring *out, uint32 typid, const char *name, uint64 offset);\
Reimplementation of the string class from STL.
Definition: pro.h:2956
Vector of bytes (use for dynamic memory)
Definition: pro.h:3628
Reimplementation of vector class from STL.
Definition: pro.h:2202
An ordered set of non-overlapping address ranges.
Definition: range.hpp:144
Primary mechanism for managing type information.
Definition: typeinf.hpp:2562
unsigned int uint32
unsigned 32 bit value
Definition: pro.h:333
Type Information Library.
Definition: typeinf.hpp:625
Visit all subtypes of a type. Derive your visitor from this class and use apply_to()
Definition: typeinf.hpp:3908
Extended type attributes.
Definition: typeinf.hpp:559
Information about how to modify the current type, used by tinfo_visitor_t.
Definition: typeinf.hpp:3878
An object to represent struct or union members.
Definition: typeinf.hpp:3560
stock_type_id_t
IDs for common types.
Definition: typeinf.hpp:2431
tinfo_code_t
Error codes for save_tinfo functions:
Definition: typeinf.hpp:1883

Macro to declare common tinfo_t related functions.

◆ STRMEM_OFFSET

#define STRMEM_OFFSET   0x0000

get member by offset

  • in: udm->offset - is a member offset in bits

◆ STRMEM_INDEX

#define STRMEM_INDEX   0x0001

get member by number

  • in: udm->offset - is a member number

◆ STRMEM_AUTO

#define STRMEM_AUTO   0x0002

get member by offset if struct, or get member by index if union

  • nb: union: index is stored in the udm->offset field!
  • nb: struct: offset is in bytes (not in bits)!

◆ STRMEM_NAME

#define STRMEM_NAME   0x0003

get member by name

  • in: udm->name - the desired member name.

◆ STRMEM_TYPE

#define STRMEM_TYPE   0x0004

get member by type.

  • in: udm->type - the desired member type. member types are compared with tinfo_t::equals_to()

◆ STRMEM_SIZE

#define STRMEM_SIZE   0x0005

get member by size.

  • in: udm->size - the desired member size.

◆ STRMEM_SKIP_EMPTY

#define STRMEM_SKIP_EMPTY   0x20000000

can be combined with STRMEM_OFFSET, STRMEM_AUTO skip empty members (i.e.

having zero size) only last empty member can be returned

◆ STRMEM_ANON

#define STRMEM_ANON   0x80000000

can be combined with STRMEM_NAME: look inside anonymous members too.

◆ 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 '...'

◆ PTV_DEREF

#define PTV_DEREF   0x0001

take value to print from the debugged process.

VT_LONG: the address is specified by idc_value_t::num VT_PVOID: argloc_t is pointed by idc_value_t::pvoid

Typedef Documentation

◆ h2ti_type_cb

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.

Parameters
namevar/func/type name
tiftype info
cmtmain comment
valuesymbol value
cb_datadata passed to callback
Return values
T_CBBRKDEFthe type declaration won't be saved in the til

◆ printer_t

typedef int printer_t(const char *format,...)

Specify a printing callback when parsing types.

See h2ti() and parse_decls().

◆ 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
0skip type
1include

Enumeration Type Documentation

◆ argreg_policy_t

Function argument passing: how GP & FP registers cooperate with each other.

Enumerator
ARGREGS_GP_ONLY 

GP registers used for all arguments.

ARGREGS_INDEPENDENT 

FP/GP registers used separately (like gcc64)

ARGREGS_BY_SLOTS 

fixed FP/GP register per each slot (like vc64)

ARGREGS_FP_CONSUME_GP 

FP register also consumes one or more GP regs but not vice versa (aix ppc ABI)

ARGREGS_MIPS_O32 

MIPS ABI o32.

◆ 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

◆ tinfo_code_t

Error codes for save_tinfo functions:

Enumerator
TERR_OK 

ok

TERR_SAVE 

failed to save

TERR_SERIALIZE 

failed to serialize

TERR_WRONGNAME 

name is not acceptable

TERR_BADSYNC 

failed to synchronize with IDB

◆ 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(int64 x, int64 y)

STI_AEABI_ULCMP 

int __fastcall(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; }

◆ 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]errbuferror message
titarget til
tildirdirectory where specified tils can be found. nullptr means all default til subdirectories.
basescomma separated list of til names
gen_eventsgenerate 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
namefilename of the til. If it's an absolute path, tildir is ignored.
  • NB: the file extension is forced to .til
[out]errbuferror message
tildirdirectory 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
titype library to store
tildirdirectory where to store the til. nullptr means current directory.
namefilename of the til. If it's an absolute path, tildir is ignored.
  • NB: the file extension is forced to .til
Returns
success

◆ verify_argloc()

idaman int ida_export verify_argloc ( const argloc_t vloc,
int  size,
const rangeset_t gaps 
)

Verify argloc_t.

Parameters
vlocargloc to verify
sizetotal size of the variable
gapsif not nullptr, specifies gaps in structure definition. these gaps should not map to any argloc, but everything else must be covered
Returns
0 if ok, otherwise an interr code.

◆ optimize_argloc()

idaman bool ida_export optimize_argloc ( argloc_t vloc,
int  size,
const rangeset_t gaps 
)

Verify and optimize scattered argloc into simple form.

All new arglocs must be processed by this function.

Return values
truesuccess
falsethe input argloc was illegal

◆ is_purging_cc()

THREAD_SAFE bool is_purging_cc ( cm_t  cm)
inline

Does the calling convention clean the stack arguments upon return?.

Note
this function is valid only for x86 code

◆ set_compiler()

idaman bool ida_export set_compiler ( const compiler_info_t cc,
int  flags,
const char *  abiname = nullptr 
)

Change current compiler.

Parameters
cccompiler to switch to
flagsSet compiler flags
abinameABI name
Returns
success

◆ get_abi_name()

idaman ssize_t ida_export get_abi_name ( qstring out)

Get ABI name.

Returns
length of the name (>=0)

◆ append_abi_opts()

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-...

Parameters
abi_opts- ABI options to add/remove in form opt1-opt2-...
user_level- initiated by user if TRUE (==SETCOMP_BY_USER)
Returns
success

◆ set_compiler_string()

idaman bool ida_export set_compiler_string ( const char *  compstr,
bool  user_level 
)
Parameters
compstr- compiler description in form <abbr>:<abiname>
user_level- initiated by user if TRUE
Returns
success

◆ h2ti()

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*.

This is a low level function - use parse_decls() or parse_decl()

Parameters
titype info library
lxinput lexer. may be nullptr. always destroyed by h2ti()
inputfile name or C declaration
flagscombination of Type formatting flags
type_cbcallback - for each type
var_cbcallback - for each var
print_cbmay pass msg() here
_cb_datadata passed to callbacks
_isabsthe expected abstracness of the type declaration(s)
Returns
number of errors (they are displayed using print_cb). zero means ok

◆ parse_decl()

idaman bool ida_export parse_decl ( tinfo_t tif,
qstring out,
til_t til,
const char *  decl,
int  flags 
)

Parse ONE declaration.

If the input string contains more than one declaration, the first complete type declaration (PT_TYP) or the last variable declaration (PT_VAR) will be used.

Note
name & tif may be empty after the call!
Parameters
[out]tiftype info
[out]outdeclared name
tiltype library to use. may be nullptr
declC declaration to parse
flagscombination of Type parsing flags bits
Return values
trueok
falsedeclaration is bad, the error message is displayed if !PT_SIL

◆ convert_pt_flags_to_hti()

THREAD_SAFE int convert_pt_flags_to_hti ( int  pt_flags)
inline

Convert Type parsing flags to Type formatting flags.

Type parsing flags lesser than 0x10 don't have stable meaning and will be ignored (more on these flags can be seen in idc.idc)

◆ parse_decls()

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.

If there are any errors, they will be printed using 'printer'. This function uses default include path and predefined macros from the database settings. It always uses the HTI_DCL bit.

Parameters
tiltype library to store the result
inputinput string or file name (see hti_flags)
printerfunction to output error messages (use msg or nullptr or your own callback)
hti_flagscombination of Type formatting flags
Returns
number of errors, 0 means ok.

◆ print_type()

idaman bool ida_export print_type ( qstring out,
ea_t  ea,
int  prtype_flags 
)

Get type declaration for the specified address.

Parameters
outoutput buffer
eaaddress
prtype_flagscombination of Type printing flags
Returns
success

◆ get_named_type()

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.

The returned pointers are pointers to static storage.
They are valid until free_til(), set_named_type(), del_named_type(),
rename_named_type(), set_numbered_type(), del_numbered_type(),
and idb structure/enum manipulation (in other words, until til_t is changed).

Parameters
tipointer to type information library
namename of type
ntf_flagscombination of Flags for named types
typeptr to ptr to output buffer for the type info
fieldsptr to ptr to the field/args names. may be nullptr
cmtptr to ptr to the main comment. may be nullptr
fieldcmtsptr to ptr to the field/args comments. may be nullptr
sclassptr to storage class
valueptr to symbol value. for types, ptr to the ordinal number
Return values
0can't find the named type (or name==nullptr)
1ok, the buffers are filled with information (if not nullptr)
2ok, found it in a base til

◆ get_named_type64()

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

See get_named_type() above.

Note
If the value in the 'ti' library is 32-bit, it will be sign-extended before being stored in the 'value' pointer.

◆ del_named_type()

idaman bool ida_export del_named_type ( til_t ti,
const char *  name,
int  ntf_flags 
)

Delete information about a symbol.

Parameters
titype library
namename of symbol
ntf_flagscombination of Flags for named types
Returns
success

◆ first_named_type()

idaman const char *ida_export first_named_type ( const til_t ti,
int  ntf_flags 
)

Enumerate types.

Parameters
titype library. nullptr means the local type library for the current database.
ntf_flagscombination of Flags for named types
Returns
Type or symbol names, depending of ntf_flags. Returns mangled names. Never returns anonymous types. To include them, enumerate types by ordinals.

◆ next_named_type()

idaman const char *ida_export next_named_type ( const til_t ti,
const char *  name,
int  ntf_flags 
)

Enumerate types.

Parameters
titype library. nullptr means the local type library for the current database.
ntf_flagscombination of Flags for named types
Returns
Type or symbol names, depending of ntf_flags. Returns mangled names. Never returns anonymous types. To include them, enumerate types by ordinals.
Parameters
namethe current name. the name that follows this one will be returned.

◆ copy_named_type()

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.

This function will copy the specified type and all dependent types from the source type library to the destination library.

Parameters
dsttilDestination til. It must have orginal types enabled
srctilSource til.
namename of the type to copy
Returns
ordinal number of the copied type. 0 means error

◆ decorate_name()

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.

Parameters
outoutput buffer
namename of symbol
mangletrue-mangle, false-unmangle
cccalling convention
typename type (nullptr-unknown)
Returns
success

◆ calc_c_cpp_name()

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.

Parameters
outoutput buffer
nameoriginal (mangled or decorated) name
typename type if known, otherwise nullptr
ccn_flagsone of C/C++ naming flags

◆ enable_numbered_types()

idaman bool ida_export enable_numbered_types ( til_t ti,
bool  enable 
)

Enable the use of numbered types in til.

Currently it is impossible to disable numbered types once they are enabled

◆ alloc_type_ordinals()

idaman uint32 ida_export alloc_type_ordinals ( til_t ti,
int  qty 
)

Allocate a range of ordinal numbers for new types.

Parameters
titype library
qtynumber of ordinals to allocate
Returns
the first ordinal. 0 means failure.

◆ get_ordinal_qty()

idaman uint32 ida_export get_ordinal_qty ( const til_t ti)

Get number of allocated ordinals.

Returns
uint32(-1) if failed

◆ set_numbered_type()

idaman tinfo_code_t ida_export set_numbered_type ( til_t ti,
uint32  ordinal,
int  ntf_flags,
const char *  name,
const type_t type,
const p_list fields = nullptr,
const char *  cmt = nullptr,
const p_list fldcmts = nullptr,
const sclass_t sclass = nullptr 
)

Store a type in the til.

'name' may be nullptr for anonymous types. The specified ordinal must be free (no other type is using it). For ntf_flags, only NTF_REPLACE is consulted.

◆ set_type_alias()

idaman bool ida_export set_type_alias ( til_t ti,
uint32  src_ordinal,
uint32  dst_ordinal 
)

Create a type alias.

Redirects all references to source type to the destination type. This is equivalent to instantaneous replacement all reference to srctype by dsttype.

◆ get_alias_target()

idaman uint32 ida_export get_alias_target ( const til_t ti,
uint32  ordinal 
)

Find the final alias destination.

If the ordinal has not been aliased, return the specified ordinal itself If failed, returns 0.

◆ get_numbered_type_name()

idaman const char *ida_export get_numbered_type_name ( const til_t ti,
uint32  ordinal 
)

Get type name (if exists) by its ordinal.

If the type is anonymous, returns "". If failed, returns nullptr

◆ create_numbered_type_name()

idaman ssize_t ida_export create_numbered_type_name ( qstring buf,
int32  ord 
)

Create anonymous name for numbered type.

This name can be used to reference a numbered type by its ordinal Ordinal names have the following format: '#' + set_de(ord) Returns: -1 if error, otherwise the name length

◆ is_ordinal_name()

idaman bool ida_export is_ordinal_name ( const char *  name,
uint32 ord = nullptr 
)

Check if the name is an ordinal name.

Ordinal names have the following format: '#' + set_de(ord)

◆ get_ordinal_from_idb_type()

idaman int ida_export get_ordinal_from_idb_type ( const char *  name,
const type_t type 
)

Get ordinal number of an idb type (struct/enum).

The 'type' parameter is used only to determine the kind of the type (struct or enum) Use this function to find out the correspondence between idb types and til types

◆ is_autosync()

bool idaapi is_autosync ( const char *  name,
const tinfo_t tif 
)
inline

Is the specified idb type automatically synchronized?

◆ compact_numbered_types()

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.

Parameters
titype library to compact
min_ordminimal ordinal number to start to compact. lower ordinals are not modified
p_ordmapthe resulting mapping (for example, the new ordinal of min_ord will be in ordmap[0])
flagsreserved
Returns
number of freed type slots

◆ get_vftable_ea()

idaman ea_t ida_export get_vftable_ea ( uint32  ordinal)

Get address of a virtual function table.

Parameters
ordinalordinal number of a vftable type.
Returns
address of the corresponding virtual function table in the current database.

◆ get_vftable_ordinal()

idaman uint32 ida_export get_vftable_ordinal ( ea_t  vftable_ea)

Get ordinal number of the virtual function table.

Parameters
vftable_eaaddress of a virtual function table.
Returns
ordinal number of the corresponding vftable type. 0 - failure.

◆ set_vftable_ea()

idaman bool ida_export set_vftable_ea ( uint32  ordinal,
ea_t  vftable_ea 
)

Set the address of a vftable instance for a vftable type.

Parameters
vftable_eaaddress of a virtual function table.
ordinalordinal number of the corresponding vftable type.
Returns
success

◆ del_vftable_ea()

bool del_vftable_ea ( uint32  ordinal)
inline

Delete the address of a vftable instance for a vftable type.

Parameters
ordinalordinal number of a vftable type.
Returns
success

◆ get_default_align()

size_t get_default_align ( void  )
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_sizethe structure size calculated so far
elem_sizesize of the current field. the whole structure should be calculated
algnthe 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_eain/out parameter
  • in: address of the pointer
  • out: the pointed address
tiftype of the pointer
[out]closure_objclosure 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.

◆ import_type()

idaman tid_t ida_export import_type ( const til_t til,
int  idx,
const char *  name,
int  flags = 0 
)

Copy a named type from til to idb.

Parameters
tiltype library
idxthe position of the new type in the list of types (structures or enums). -1 means at the end of the list
namethe type name
flagscombination of Import type flags
Returns
BADNODE on error

◆ 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
nametil name
flagscombination 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
ealinear address
namethe 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
ealinear address
tiftype string in internal format
flagscombination 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
tiltype library
ealinear address
decltype declaration in C form
flagsflags 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
callerlinear address of the calling instruction. must belong to a function.
tiftype 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
outlinear addresses of the instructions that load call arguments
calleraddress 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
dealinear address
tiftype string in the internal format
namenew name for the address
Returns
success

◆ guess_tinfo()

idaman int ida_export guess_tinfo ( tinfo_t tif,
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 const til_t *ida_export get_idati ( void  )

Pointer to the local type library - this til is private for each IDB file Function that accepts til_t* uses local type library instead of nullptr.

◆ get_idainfo_by_type()

idaman bool ida_export get_idainfo_by_type ( size_t *  out_size,
flags_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_sizesize of tif
[out]out_flagsdescription of type using flags_t
[out]out_mtinfo for non-scalar types
tifthe type to inspect
[out]out_alsizealignment

◆ get_idainfo64_by_type()

idaman bool ida_export get_idainfo64_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_sizesize of tif
[out]out_flagsdescription of type using flags64_t
[out]out_mtinfo for non-scalar types
tifthe type to inspect
[out]out_alsizealignment

◆ 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
1removed FTI_HIGH,
2made substantial changes
-1failure

◆ 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
tiltype library to use. may be nullptr.
tiftype to modify (in/out)
Return values
numberof 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
outvecbuffer for the formatted string(s). may be nullptr
idc_valuevalue to format
tiftype of the data to format. if nullptr and PTV_DEREF is specified, take tinfo from idb
vtreemore detailed output info
fdiformatting 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
0ok
-1printing failed, check qerrno
elsecode returned by text_sink_t::print()

◆ print_decls()

idaman int ida_export print_decls ( text_sink_t printer,
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
printera handler for printing text
tilthe type library holding the ordinals
ordinalsordinals of types to export. nullptr means: all ordinals in til
pdf_flagsflags for the algorithm. A combination of PDF_ constants
Return values
>0the number of types exported
0an error occurred
<0the 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
loclocation of the data (ALOC_STATIC or ALOC_CUSTOM)
tiftype info
dont_deref_ptrconsider 'ea' as the ptr value
Return values
0data is not expandable
-1error, see qerrno
elsethe max number of lines

◆ format_c_number()

idaman size_t ida_export format_c_number ( char *  buf,
size_t  bufsize,
uint128  value,
int  size,
int  pcn = 0 
)

Format a C number.

Parameters
bufoutput buffer
bufsizesize of the output buffer
valuenumber to format
sizesize of the number in bytes (1,2,4,8,16)
pcncombination of C Number formatting flags

◆ 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
bufoutput buffer
tifenumeration type
serialwhich enumeration member to use (0 means the first with the given value)
valuevalue to search in the enumeration type. only 32-bit number can be handled yet
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_sympointer to be filled with the chosen type
root_tilpointer to starting til (the function will inspect the base tils if allowed by flags)
titletitle of listbox to display
ntf_flagscombination of Flags for named types
predicatepredicate 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
tipointer to til
titletitle of listbox to display
funcpredicate to select types to display (maybe nullptr)
def_ordordinal to position cursor before choose
uduser 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
deltapointer shift value
tipointer to til
titletitle of listbox to display
funcpredicate to select types to display (maybe nullptr)
def_ordordinal to position cursor before choose
uduser data
Returns
== 0 means nothing is chosen, otherwise an ordinal number

Variable Documentation

◆ TYPE_MODIF_MASK

const type_t TYPE_MODIF_MASK = 0xC0

modifiers.

◆ BTMT_CHAR

const type_t BTMT_CHAR = 0x30

specify char or segment register

  • BT_INT8 - char
  • BT_INT - segment register
  • other BT_INT... - don't use

◆ BTMT_SPECFLT

const type_t BTMT_SPECFLT = 0x30

float (variable size).

if processor_t::use_tbyte() then use processor_t::tbyte_size, otherwise 2 bytes

◆ BT_PTR

const type_t BT_PTR = 0x0A

pointer.

has the following format: [db sizeof(ptr)]; [tah-typeattrs]; type_t...

◆ BTMT_CLOSURE

const type_t BTMT_CLOSURE = 0x30

closure.

  • if ptr to BT_FUNC - __closure. in this case next byte MUST be RESERVED_BYTE, and after it BT_FUNC
  • else the next byte contains sizeof(ptr) allowed values are 1 - ph.max_ptr_size
  • if value is bigger than ph.max_ptr_size, based_ptr_name_and_size() is called to find out the typeinfo

◆ BTMT_NONBASED

const type_t BTMT_NONBASED = 0x10
if set
array base==0
format: dt num_elem; [tah-typeattrs]; type_t...
if num_elem==0 then the array size is unknown
else
format: da num_elem, base; [tah-typeattrs]; type_t...

used only for serialization

◆ BT_FUNC

const type_t BT_FUNC = 0x0C

function.

format:

      optional: CM_CC_SPOILED | num_of_spoiled_regs
                if num_of_spoiled_reg == BFA_FUNC_MARKER:
                  ::bfa_byte
                  if (bfa_byte & BFA_FUNC_EXT_FORMAT) != 0
                   ::fti_bits (only low bits: FTI_SPOILED,...,FTI_VIRTUAL)
                   num_of_spoiled_reg times: spoiled reg info (see extract_spoiledreg)
                  else
                    bfa_byte is function attribute byte (see Function attribute byte...)
                else:
                  num_of_spoiled_reg times: spoiled reg info (see extract_spoiledreg)
      cm_t ... calling convention and memory model
      [tah-typeattrs];
      type_t ... return type;
      [serialized argloc_t of returned value (if CM_CC_SPECIAL{PE} && !return void);
      if !CM_CC_VOIDARG:
        dt N (N=number of parameters)
        if ( N == 0 )
        if CM_CC_ELLIPSIS or CM_CC_SPECIALE
            func(...)
          else
            parameters are unknown
        else
          N records:
            type_t ... (i.e. type of each parameter)
            [serialized argloc_t (if CM_CC_SPECIAL{PE})] (i.e. place of each parameter)
            [FAH_BYTE + de( funcarg_t::flags )] 

◆ BT_COMPLEX

const type_t BT_COMPLEX = 0x0D

struct/union/enum/typedef.

format:

       [dt N (N=field count) if !BTMT_TYPEDEF]
       if N == 0:
         p_string name (unnamed types have names "anon_...")
         [sdacl-typeattrs];
       else, for struct & union:
         if N == 0x7FFE   // Support for high (i.e., > 4095) members count
           N = deserialize_de()
         ALPOW = N & 0x7
         MCNT = N >> 3
         if MCNT == 0
           empty struct
         if ALPOW == 0
           ALIGN = get_default_align()
         else
           ALIGN = (1 << (ALPOW - 1))
         [sdacl-typeattrs];
       else, for enums:
         if N == 0x7FFE   // Support for high enum entries count.
           N = deserialize_de()
         [tah-typeattrs]; 

◆ BTE_SIZE_MASK

const bte_t BTE_SIZE_MASK = 0x07

storage size.

  • if == 0 then inf_get_cc_size_e()
  • else 1 << (n -1) = 1,2,4...64

◆ BTE_BITFIELD

const bte_t BTE_BITFIELD = 0x10

'subarrays'.

In this case ANY record has the following format:

  • 'de' mask (has name)
  • 'dt' cnt
  • cnt records of 'de' values (cnt CAN be 0)
    Note
    delta for ALL subsegment is ONE

◆ CM_CC_SPOILED

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.

if n == BFA_FUNC_MARKER, the next byte is the function attribute byte.