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_t > | type_attrs_t |
this vector must be sorted by keys | |
typedef int | type_sign_t |
type signedness | |
typedef int | argloc_type_t |
Specifies the location type of a function argument - see Argument location types. | |
typedef qvector< argloc_t > | arglocs_t |
vector of argument locations | |
typedef qvector< argpart_t > | argpartvec_t |
typedef qvector< comp_t > | compvec_t |
Collection of compiler descriptions. | |
typedef int idaapi | h2ti_type_cb(const char *name, const tinfo_t &tif, const char *cmt, const uint64 *value, void *cb_data) |
This callback will be called for each type/variable declaration. More... | |
typedef int | printer_t(const char *format,...) |
Specify a printing callback when parsing types. More... | |
typedef qvector< tinfo_t > | tinfovec_t |
vector of tinfo objects | |
typedef qvector< simd_info_t > | simd_info_vec_t |
typedef qvector< funcarg_t > | funcargvec_t |
vector of function argument objects | |
typedef qvector< enum_member_t > | enum_member_vec_t |
vector of enum values | |
typedef qvector< regobj_t > | regobjvec_t |
typedef qvector< valstr_t > | valstrvec_t |
typedef qvector< uint32 > | ordvec_t |
typedef int idaapi | local_tinfo_predicate_t(uint32 ord, const tinfo_t &type, void *ud) |
Controls which types are displayed/selected when choosing local types. More... | |
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 | ) |
◆ HTI_PAK_SHIFT
#define HTI_PAK_SHIFT 12 |
◆ 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 | ) |
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
-
name var/func/type name tif type info cmt main comment value symbol value cb_data data passed to callback
- Return values
-
T_CBBRKDEF the 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
Controls which types are displayed/selected when choosing local types.
- Return values
-
0 skip type 1 include
Enumeration Type Documentation
◆ argreg_policy_t
enum argreg_policy_t |
Function argument passing: how GP & FP registers cooperate with each other.
◆ sclass_t
enum sclass_t |
◆ tinfo_code_t
enum tinfo_code_t |
◆ stock_type_id_t
enum stock_type_id_t |
IDs for common types.
◆ gtd_udt_t
enum gtd_udt_t |
◆ gtd_func_t
enum gtd_func_t |
◆ gts_code_t
enum gts_code_t |
Function Documentation
◆ is_tah_byte()
|
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()
|
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<()
|
inline |
Compare two bytevecs with '<'.
v1 is considered less than v2 if either:
- v1.size() < v2.size()
- there is some i such that v1[i] < v2[i]
◆ extract_argloc()
idaman bool ida_export extract_argloc | ( | argloc_t * | vloc, |
const type_t ** | ptype, | ||
bool | forbid_stkoff | ||
) |
Deserialize an argument location.
Argument FORBID_STKOFF checks location type. It can be used, for example, to check the return location of a function that cannot return a value in the stack
◆ add_base_tils()
idaman int ida_export add_base_tils | ( | qstring * | errbuf, |
til_t * | ti, | ||
const char * | tildir, | ||
const char * | bases, | ||
bool | gen_events | ||
) |
Add multiple base tils.
- Parameters
-
[out] errbuf error message ti target til tildir directory where specified tils can be found. nullptr means all default til subdirectories. bases comma separated list of til names gen_events generate corresponding IDB events
- Returns
- one of Add TIL result codes
◆ load_til()
idaman til_t *ida_export load_til | ( | const char * | name, |
qstring * | errbuf, | ||
const char * | tildir = nullptr |
||
) |
Load til from a file without adding it to the database list (see also add_til).
Failure to load base tils are reported into 'errbuf'. They do not prevent loading of the main til.
- Parameters
-
name filename of the til. If it's an absolute path, tildir is ignored. - NB: the file extension is forced to .til
[out] errbuf error message tildir directory where to load the til from. nullptr means default til subdirectories.
- Returns
- pointer to resulting til, nullptr if failed and error message is in errbuf
◆ sort_til()
idaman bool ida_export sort_til | ( | til_t * | ti | ) |
Sort til (use after modifying it).
- Returns
- false if no memory or bad parameter
◆ compact_til()
idaman bool ida_export compact_til | ( | til_t * | ti | ) |
Collect garbage in til.
Must be called before storing the til.
- Returns
- true if any memory was freed
◆ store_til()
idaman bool ida_export store_til | ( | til_t * | ti, |
const char * | tildir, | ||
const char * | name | ||
) |
Store til to a file.
If the til contains garbage, it will be collected before storing the til. Your plugin should call compact_til() before calling store_til().
- Parameters
-
ti type library to store tildir directory where to store the til. nullptr means current directory. name filename of the til. If it's an absolute path, tildir is ignored. - NB: the file extension is forced to .til
- Returns
- success
◆ verify_argloc()
idaman int ida_export verify_argloc | ( | const argloc_t & | vloc, |
int | size, | ||
const rangeset_t * | gaps | ||
) |
Verify argloc_t.
- Parameters
-
vloc argloc to verify size total size of the variable gaps if 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
-
true success false the input argloc was illegal
◆ is_purging_cc()
|
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
-
cc compiler to switch to flags Set compiler flags abiname ABI name
- Returns
- success
◆ get_abi_name()
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
-
ti type info library lx input lexer. may be nullptr. always destroyed by h2ti() input file name or C declaration flags combination of Type formatting flags type_cb callback - for each type var_cb callback - for each var print_cb may pass msg() here _cb_data data passed to callbacks _isabs the 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] tif type info [out] out declared name til type library to use. may be nullptr decl C declaration to parse flags combination of Type parsing flags bits
- Return values
-
true ok false declaration is bad, the error message is displayed if !PT_SIL
◆ convert_pt_flags_to_hti()
|
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
-
til type library to store the result input input string or file name (see hti_flags) printer function to output error messages (use msg or nullptr or your own callback) hti_flags combination 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
-
out output buffer ea address prtype_flags combination 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
-
ti pointer to type information library name name of type ntf_flags combination of Flags for named types type ptr to ptr to output buffer for the type info fields ptr to ptr to the field/args names. may be nullptr cmt ptr to ptr to the main comment. may be nullptr fieldcmts ptr to ptr to the field/args comments. may be nullptr sclass ptr to storage class value ptr to symbol value. for types, ptr to the ordinal number
- Return values
-
0 can't find the named type (or name==nullptr) 1 ok, the buffers are filled with information (if not nullptr) 2 ok, found it in a base til
◆ get_named_type64()
|
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
-
ti type library name name of symbol ntf_flags combination 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
-
ti type library. nullptr means the local type library for the current database. ntf_flags combination 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
-
ti type library. nullptr means the local type library for the current database. ntf_flags combination 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
-
name the 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
-
dsttil Destination til. It must have orginal types enabled srctil Source til. name name 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
-
out output buffer name name of symbol mangle true-mangle, false-unmangle cc calling convention type name 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
-
out output buffer name original (mangled or decorated) name type name type if known, otherwise nullptr ccn_flags one 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()
Allocate a range of ordinal numbers for new types.
- Parameters
-
ti type library qty number of ordinals to allocate
- Returns
- the first ordinal. 0 means failure.
◆ get_ordinal_qty()
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()
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()
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()
Get type name (if exists) by its ordinal.
If the type is anonymous, returns "". If failed, returns nullptr
◆ create_numbered_type_name()
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()
|
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
-
ti type library to compact min_ord minimal ordinal number to start to compact. lower ordinals are not modified p_ordmap the resulting mapping (for example, the new ordinal of min_ord will be in ordmap[0]) flags reserved
- 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
-
ordinal ordinal 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_ea address 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_ea address of a virtual function table. ordinal ordinal number of the corresponding vftable type.
- Returns
- success
◆ del_vftable_ea()
|
inline |
Delete the address of a vftable instance for a vftable type.
- Parameters
-
ordinal ordinal number of a vftable type.
- Returns
- success
◆ get_default_align()
|
inline |
Get default alignment for structure fields.
- Returns
- one of 1,2,4,8,...
◆ align_size()
|
inline |
Get alignment delta for the a structure field.
- Parameters
-
cur_tot_size the structure size calculated so far elem_size size of the current field. the whole structure should be calculated algn the structure alignment (0,1,2,4,8...)
◆ deref_ptr()
idaman bool ida_export deref_ptr | ( | ea_t * | ptr_ea, |
const tinfo_t & | tif, | ||
ea_t * | closure_obj = nullptr |
||
) |
Dereference a pointer.
- Parameters
-
[out] ptr_ea in/out parameter - in: address of the pointer
- out: the pointed address
tif type of the pointer [out] closure_obj closure object (not used yet)
- Returns
- success
◆ remove_tinfo_pointer()
idaman bool ida_export remove_tinfo_pointer | ( | tinfo_t * | tif, |
const char ** | pname, | ||
const til_t * | til = nullptr |
||
) |
Remove pointer of a type.
(i.e. convert "char *" into "char"). Optionally remove the "lp" (or similar) prefix of the input name. If the input type is not a pointer, then fail.
◆ 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
-
til type library idx the position of the new type in the list of types (structures or enums). -1 means at the end of the list name the type name flags combination 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
-
name til name flags combination of Load TIL flags
- Returns
- one of Load TIL result codes
◆ apply_named_type()
idaman bool ida_export apply_named_type | ( | ea_t | ea, |
const char * | name | ||
) |
Apply the specified named type to the address.
- Parameters
-
ea linear address name the type name, e.g. "FILE"
- Returns
- success
◆ apply_tinfo()
Apply the specified type to the specified address.
This function sets the type and tries to convert the item at the specified address to conform the type.
- Parameters
-
ea linear address tif type string in internal format flags combination of Apply tinfo flags
- Returns
- success
◆ apply_cdecl()
idaman bool ida_export apply_cdecl | ( | til_t * | til, |
ea_t | ea, | ||
const char * | decl, | ||
int | flags = 0 |
||
) |
Apply the specified type to the address.
This function parses the declaration and calls apply_tinfo()
- Parameters
-
til type library ea linear address decl type declaration in C form flags flags to pass to apply_tinfo (TINFO_DEFINITE is always passed)
- Returns
- success
◆ apply_callee_tinfo()
idaman bool ida_export apply_callee_tinfo | ( | ea_t | caller, |
const tinfo_t & | tif | ||
) |
Apply the type of the called function to the calling instruction.
This function will append parameter comments and rename the local variables of the calling function. It also stores information about the instructions that initialize call arguments in the database. Use get_arg_addrs() to retrieve it if necessary. Alternatively it is possible to hook to processor_t::arg_addrs_ready event.
- Parameters
-
caller linear address of the calling instruction. must belong to a function. tif type info
- Returns
- success
◆ get_arg_addrs()
idaman bool ida_export get_arg_addrs | ( | eavec_t * | out, |
ea_t | caller | ||
) |
Retrieve argument initialization addresses.
This function retrieves information about argument addresses. This information is stored in the database by apply_callee_tinfo().
- Parameters
-
out linear addresses of the instructions that load call arguments caller address of the call instruction
- Returns
- success
◆ apply_once_tinfo_and_name()
idaman bool ida_export apply_once_tinfo_and_name | ( | ea_t | dea, |
const tinfo_t & | tif, | ||
const char * | name | ||
) |
Apply the specified type and name to the address.
This function checks if the address already has a type. If the old type
does not exist or the new type is 'better' than the old type, then the
new type will be applied. A type is considered better if it has more
information (e.g. BTMT_STRUCT is better than BT_INT).
The same logic is with the name: if the address already have a meaningful
name, it will be preserved. Only if the old name does not exist or it
is a dummy name like byte_123, it will be replaced by the new name.
- Parameters
-
dea linear address tif type string in the internal format name new name for the address
- Returns
- success
◆ guess_tinfo()
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_size size of tif [out] out_flags description of type using flags_t [out] out_mt info for non-scalar types tif the type to inspect [out] out_alsize alignment
◆ 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_size size of tif [out] out_flags description of type using flags64_t [out] out_mt info for non-scalar types tif the type to inspect [out] out_alsize alignment
◆ remove_pointer()
BT_PTR: If the current type is a pointer, return the pointed object.
If the current type is not a pointer, return the current type. See also get_ptrarr_object() and get_pointed_object()
◆ unpack_idcobj_from_idb()
idaman error_t ida_export unpack_idcobj_from_idb | ( | idc_value_t * | obj, |
const tinfo_t & | tif, | ||
ea_t | ea, | ||
const bytevec_t * | off0, | ||
int | pio_flags = 0 |
||
) |
Collection of register objects.
Read a typed idc object from the database
◆ pack_idcobj_to_bv()
idaman error_t ida_export pack_idcobj_to_bv | ( | const idc_value_t * | obj, |
const tinfo_t & | tif, | ||
relobj_t * | bytes, | ||
void * | objoff, | ||
int | pio_flags = 0 |
||
) |
Write a typed idc object to the byte vector.
Byte vector may be non-empty, this function will append data to it
◆ apply_tinfo_to_stkarg()
idaman bool ida_export apply_tinfo_to_stkarg | ( | const insn_t & | insn, |
const op_t & | x, | ||
uval_t | v, | ||
const tinfo_t & | tif, | ||
const char * | name | ||
) |
Helper function for the processor modules.
to be called from processor_t::use_stkarg_type
◆ func_has_stkframe_hole()
idaman bool ida_export func_has_stkframe_hole | ( | ea_t | ea, |
const func_type_data_t & | fti | ||
) |
Looks for a hole at the beginning of the stack arguments.
Will make use of the IDB's func_t function at that place (if present) to help determine the presence of such a hole.
◆ lower_type()
idaman int ida_export lower_type | ( | til_t * | til, |
tinfo_t * | tif, | ||
const char * | name = nullptr , |
||
lowertype_helper_t * | _helper = nullptr |
||
) |
Lower type.
Inspect the type and lower all function subtypes using lower_func_type().
We call the prototypes usually encountered in source files "high level"
They may have implicit arguments, array arguments, big structure retvals, etc
We introduce explicit arguments (i.e. 'this' pointer) and call the result
"low level prototype". See FTI_HIGH.
In order to improve heuristics for recognition of big structure retvals,
it is recommended to pass a helper that will be used to make decisions.
That helper will be used only for lowering 'tif', and not for the children
types walked through by recursion.
- Return values
-
1 removed FTI_HIGH, 2 made substantial changes -1 failure
◆ replace_ordinal_typerefs()
Replace references to ordinal types by name references.
This function 'unties' the type from the current local type library and makes it easier to export it.
- Parameters
-
til type library to use. may be nullptr. tif type to modify (in/out)
- Return values
-
number of replaced subtypes, -1 on failure
◆ begin_type_updating()
idaman void ida_export begin_type_updating | ( | update_type_t | utp | ) |
Mark the beginning of a large update operation on the types.
Can be used with add_enum_member(), add_struc_member, etc... Also see end_type_updating()
◆ format_cdata()
idaman bool ida_export format_cdata | ( | qstrvec_t * | outvec, |
const idc_value_t & | idc_value, | ||
const tinfo_t * | tif, | ||
valstr_t * | vtree = nullptr , |
||
const format_data_info_t * | fdi = nullptr |
||
) |
Format a data value as a C initializer.
- Parameters
-
outvec buffer for the formatted string(s). may be nullptr idc_value value to format tif type of the data to format. if nullptr and PTV_DEREF is specified, take tinfo from idb vtree more detailed output info fdi formatting options
- Returns
- success. if failed, see qerrno for more info
◆ print_cdata()
idaman int ida_export print_cdata | ( | text_sink_t & | printer, |
const idc_value_t & | idc_value, | ||
const tinfo_t * | tif, | ||
const format_data_info_t * | fdi = nullptr |
||
) |
The same as format_cdata(), but instead of returning the answer in a vector, print it.
This function can handle very huge data volume without using too much memory. As soon as the output text becomes too long, the function prints it and flushes its internal buffers.
- Return values
-
0 ok -1 printing failed, check qerrno else code returned by text_sink_t::print()
◆ print_decls()
idaman int ida_export print_decls | ( | text_sink_t & | printer, |
til_t * | til, | ||
const ordvec_t * | ordinals, | ||
uint32 | pdf_flags | ||
) |
Print types (and possibly their dependencies) in a format suitable for using in a header file.
This is the reverse parse_decls().
- Parameters
-
printer a handler for printing text til the type library holding the ordinals ordinals ordinals of types to export. nullptr means: all ordinals in til pdf_flags flags for the algorithm. A combination of PDF_ constants
- Return values
-
>0 the number of types exported 0 an error occurred <0 the negated number of types exported. There were minor errors and the resulting output might not be compilable.
◆ calc_number_of_children()
idaman int ida_export calc_number_of_children | ( | const argloc_t & | loc, |
const tinfo_t & | tif, | ||
bool | dont_deref_ptr = false |
||
) |
Calculate max number of lines of a formatted c data, when expanded (PTV_EXPAND).
- Parameters
-
loc location of the data (ALOC_STATIC or ALOC_CUSTOM) tif type info dont_deref_ptr consider 'ea' as the ptr value
- Return values
-
0 data is not expandable -1 error, see qerrno else the max number of lines
◆ 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
-
buf output buffer bufsize size of the output buffer value number to format size size of the number in bytes (1,2,4,8,16) pcn combination 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
-
buf output buffer tif enumeration type serial which enumeration member to use (0 means the first with the given value) value value to search in the enumeration type. 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_sym pointer to be filled with the chosen type root_til pointer to starting til (the function will inspect the base tils if allowed by flags) title title of listbox to display ntf_flags combination of Flags for named types predicate predicate to select types to display (maybe nullptr)
- Returns
- false if nothing is chosen, otherwise true
◆ choose_local_tinfo()
idaman uint32 ida_export choose_local_tinfo | ( | const til_t * | ti, |
const char * | title, | ||
local_tinfo_predicate_t * | func = nullptr , |
||
uint32 | def_ord = 0 , |
||
void * | ud = nullptr |
||
) |
Choose a type from the local type library.
- Parameters
-
ti pointer to til title title of listbox to display func predicate to select types to display (maybe nullptr) def_ord ordinal to position cursor before choose ud user data
- Returns
- == 0 means nothing is chosen, otherwise an ordinal number
◆ choose_local_tinfo_and_delta()
idaman uint32 ida_export choose_local_tinfo_and_delta | ( | int32 * | delta, |
const til_t * | ti, | ||
const char * | title, | ||
local_tinfo_predicate_t * | func = nullptr , |
||
uint32 | def_ord = 0 , |
||
void * | ud = nullptr |
||
) |
Choose a type from the local type library and specify the pointer shift value.
- Parameters
-
delta pointer shift value ti pointer to til title title of listbox to display func predicate to select types to display (maybe nullptr) def_ord ordinal to position cursor before choose ud user data
- Returns
- == 0 means nothing is chosen, otherwise an ordinal number
Variable Documentation
◆ TYPE_MODIF_MASK
const type_t TYPE_MODIF_MASK = 0xC0 |
modifiers.
- for BT_ARRAY see Derived type: array
- BT_VOID can have them ONLY in 'void *'
◆ BTMT_CHAR
const type_t BTMT_CHAR = 0x30 |
◆ 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 |
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.
Generated by