Describes the type information records in IDA. More...
Classes | |
struct | type_attr_t |
struct | til_t |
Type Information Library. More... | |
struct | rrel_t |
Register-relative argument location. More... | |
struct | custloc_desc_t |
Description of a custom argloc. More... | |
class | argloc_t |
Describes an argument location. More... | |
struct | argpart_t |
Subsection of an argument location. More... | |
class | scattered_aloc_t |
Used to manage arguments that are described by multiple locations (also see ALOC_DIST) More... | |
struct | aloc_visitor_t |
Visit all argument locations. More... | |
struct | const_aloc_visitor_t |
Same as aloc_visitor_t, but may not modify the argloc. More... | |
class | callregs_t |
Register allocation calling convention. More... | |
class | tinfo_t |
Primary mechanism for managing type information. More... | |
struct | simd_info_t |
SIMD type info. More... | |
struct | ptr_type_data_t |
Pointer type information (see tinfo_t::get_ptr_details()) More... | |
struct | array_type_data_t |
Array type information (see tinfo_t::get_array_details()) More... | |
struct | funcarg_t |
Information about a single function argument. More... | |
struct | func_type_data_t |
Function type information (see tinfo_t::get_func_details()) More... | |
struct | stkarg_area_info_t |
Some calling conventions foresee special areas on the stack for call arguments. More... | |
struct | edm_t |
This structure describes an enum value. More... | |
struct | enum_type_data_t |
Enum type information (see tinfo_t::get_enum_details()) More... | |
struct | typedef_type_data_t |
Type information for typedefs. More... | |
struct | custom_data_type_info_t |
struct | value_repr_t |
Visual representation of a member of a complex type (struct/union/enum) More... | |
struct | udm_t |
An object to represent struct or union members. More... | |
struct | udtmembervec_t |
vector of udt member objects More... | |
struct | udt_type_data_t |
struct | 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 | DEFMASK64 bmask64_t(-1) |
default bitmask 64bits | |
#define | RESERVED_BYTE 0xFF |
multifunctional purpose | |
#define | TAH_BYTE 0xFE |
type attribute header byte | |
#define | FAH_BYTE 0xFF |
function argument attribute header byte | |
#define | MAX_DECL_ALIGN 0x000F |
#define | TAH_HASATTRS 0x0010 |
has extended attributes | |
#define | TAUDT_UNALIGNED 0x0040 |
struct: unaligned struct | |
#define | TAUDT_MSSTRUCT 0x0020 |
struct: gcc msstruct attribute | |
#define | TAUDT_CPPOBJ 0x0080 |
struct: a c++ object, not simple pod type | |
#define | TAUDT_VFTABLE 0x0100 |
struct: is virtual function table | |
#define | TAFLD_BASECLASS 0x0020 |
field: do not include but inherit from the current field | |
#define | TAFLD_UNALIGNED 0x0040 |
field: unaligned field | |
#define | TAFLD_VIRTBASE 0x0080 |
field: virtual base (not supported yet) | |
#define | TAFLD_VFTABLE 0x0100 |
field: ptr to virtual function table | |
#define | TAFLD_METHOD 0x0200 |
denotes a udt member function | |
#define | TAFLD_GAP 0x0400 |
field: gap member (displayed as padding in type details) | |
#define | TAFLD_REGCMT 0x0800 |
field: the comment is regular (if not set, it is repeatable) | |
#define | TAPTR_PTR32 0x0020 |
ptr: __ptr32 | |
#define | TAPTR_PTR64 0x0040 |
ptr: __ptr64 | |
#define | TAPTR_RESTRICT 0x0060 |
ptr: __restrict | |
#define | TAPTR_SHIFTED 0x0080 |
ptr: __shifted(parent_struct, delta) | |
#define | TAENUM_64BIT 0x0020 |
enum: store 64-bit values | |
#define | TAENUM_UNSIGNED 0x0040 |
enum: unsigned | |
#define | TAENUM_SIGNED 0x0080 |
enum: signed | |
#define | TAENUM_OCT 0x0100 |
enum: octal representation, if BTE_HEX | |
#define | TAENUM_BIN 0x0200 |
enum: binary representation, if BTE_HEX only one of OCT/BIN bits can be set. More... | |
#define | TAENUM_NUMSIGN 0x0400 |
enum: signed representation, if BTE_HEX | |
#define | TAENUM_LZERO 0x0800 |
enum: print numbers with leading zeroes (only for HEX/OCT/BIN) | |
#define | TAH_ALL 0x0FF0 |
all defined bits | |
#define | TA_ORG_TYPEDEF "__org_typedef" |
the original typedef name (simple string) | |
#define | TA_ORG_ARRDIM "__org_arrdim" |
the original array dimension (pack_dd) | |
#define | TA_FORMAT "format" |
info about the 'format' argument. More... | |
#define | TA_VALUE_REPR "\x01" |
serialized value_repr_t (used for scalars and arrays) | |
#define | TIL_ZIP 0x0001 |
pack buckets using zip | |
#define | TIL_MAC 0x0002 |
til has macro table | |
#define | TIL_ESI 0x0004 |
extended sizeof info (short, long, longlong) | |
#define | TIL_UNI 0x0008 |
universal til for any compiler | |
#define | TIL_ORD 0x0010 |
type ordinal numbers are present | |
#define | TIL_ALI 0x0020 |
type aliases are present (this bit is used only on the disk) | |
#define | TIL_MOD 0x0040 |
til has been modified, should be saved | |
#define | TIL_STM 0x0080 |
til has extra streams | |
#define | TIL_SLD 0x0100 |
sizeof(long double) | |
#define | TIL_ADD_FAILED 0 |
see errbuf | |
#define | TIL_ADD_OK 1 |
some tils were added | |
#define | TIL_ADD_ALREADY 2 |
the base til was already added | |
#define | ARGLOC_HELPER_DEFINITIONS(decl) |
Helper to declare common argloc_t related functions. More... | |
#define | PRALOC_VERIFY 0x01 |
interr if illegal argloc | |
#define | PRALOC_STKOFF 0x02 |
print stack offsets | |
#define | SETCOMP_OVERRIDE 0x0001 |
may override old compiler info | |
#define | SETCOMP_ONLY_ID 0x0002 |
cc has only 'id' field; the rest will be set to defaults corresponding to the program bitness | |
#define | SETCOMP_ONLY_ABI 0x0004 |
ignore cc field complete, use only abiname | |
#define | SETCOMP_BY_USER 0x0008 |
invoked by user, cannot be replaced by module/loader | |
#define | MAX_FUNC_ARGS 256 |
max number of function arguments | |
#define | HTI_CPP 0x00000001 |
C++ mode (not implemented) | |
#define | HTI_INT 0x00000002 |
debug: print internal representation of types | |
#define | HTI_EXT 0x00000004 |
debug: print external representation of types | |
#define | HTI_LEX 0x00000008 |
debug: print tokens | |
#define | HTI_UNP 0x00000010 |
debug: check the result by unpacking it | |
#define | HTI_TST 0x00000020 |
test mode: discard the result | |
#define | HTI_FIL 0x00000040 |
"input" is file name, otherwise "input" contains a C declaration | |
#define | HTI_MAC 0x00000080 |
define macros from the base tils | |
#define | HTI_NWR 0x00000100 |
no warning messages | |
#define | HTI_NER 0x00000200 |
ignore all errors but display them | |
#define | HTI_DCL 0x00000400 |
don't complain about redeclarations | |
#define | HTI_NDC 0x00000800 |
don't decorate names | |
#define | HTI_PAK 0x00007000 |
explicit structure pack value (#pragma pack) | |
#define | HTI_PAK_SHIFT 12 |
shift for HTI_PAK. More... | |
#define | HTI_PAKDEF 0x00000000 |
default pack value | |
#define | HTI_PAK1 0x00001000 |
#pragma pack(1) | |
#define | HTI_PAK2 0x00002000 |
#pragma pack(2) | |
#define | HTI_PAK4 0x00003000 |
#pragma pack(4) | |
#define | HTI_PAK8 0x00004000 |
#pragma pack(8) | |
#define | HTI_PAK16 0x00005000 |
#pragma pack(16) | |
#define | HTI_HIGH 0x00008000 |
assume high level prototypes (with hidden args, etc) | |
#define | HTI_LOWER 0x00010000 |
lower the function prototypes | |
#define | HTI_RAWARGS 0x00020000 |
leave argument names unchanged (do not remove underscores) | |
#define | HTI_RELAXED 0x00080000 |
accept references to unknown namespaces | |
#define | HTI_NOBASE 0x00100000 |
do not inspect base tils | |
#define | PT_SIL 0x0001 |
silent, no messages | |
#define | PT_NDC 0x0002 |
don't decorate names | |
#define | PT_TYP 0x0004 |
return declared type information | |
#define | PT_VAR 0x0008 |
return declared object information | |
#define | PT_PACKMASK 0x0070 |
mask for pack alignment values | |
#define | PT_HIGH 0x0080 |
assume high level prototypes (with hidden args, etc) | |
#define | PT_LOWER 0x0100 |
lower the function prototypes | |
#define | PT_REPLACE 0x0200 |
replace the old type (used in idc) | |
#define | PT_RAWARGS 0x0400 |
leave argument names unchanged (do not remove underscores) | |
#define | PT_RELAXED 0x1000 |
accept references to unknown namespaces | |
#define | 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 | PRTYPE_1LINCMT 0x2000 |
print comments even in the one line mode | |
#define | PRTYPE_HEADER 0x4000 |
print only type header (only for definitions) | |
#define | PRTYPE_MAXSTR 0x8000 |
limit the output length to 1024 bytes (the output may be slightly longer) | |
#define | NTF_TYPE 0x0001 |
type name | |
#define | NTF_SYMU 0x0008 |
symbol, name is unmangled ('func') | |
#define | NTF_SYMM 0x0000 |
symbol, name is mangled ('_func'); only one of NTF_TYPE and NTF_SYMU, NTF_SYMM can be used | |
#define | NTF_NOBASE 0x0002 |
don't inspect base tils (for get_named_type) | |
#define | NTF_REPLACE 0x0004 |
replace original type (for set_named_type) | |
#define | NTF_UMANGLED 0x0008 |
name is unmangled (don't use this flag) | |
#define | NTF_NOCUR 0x0020 |
don't inspect current til file (for get_named_type) | |
#define | NTF_64BIT 0x0040 |
value is 64bit | |
#define | NTF_FIXNAME 0x0080 |
force-validate the name of the type when setting (set_named_type, set_numbered_type only) | |
#define | NTF_IDBENC 0x0100 |
the name is given in the IDB encoding; non-ASCII bytes will be decoded accordingly (set_named_type, set_numbered_type only) | |
#define | NTF_CHKSYNC 0x0200 |
check that synchronization to IDB passed OK (set_numbered_type, set_named_type) | |
#define | NTF_NO_NAMECHK 0x0400 |
do not validate type name (set_numbered_type, set_named_type) | |
#define | NTF_NOSYNC 0x0800 |
do not sync type to IDB *- (set_named_type, set_numbered_type only) *- | |
#define | NTF_COPY 0x1000 |
save a new type definition, not a typeref (tinfo_t::set_numbered_type, tinfo_t::set_named_type) | |
#define | CCN_C 0x00 |
#define | CCN_CPP 0x01 |
#define | 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 udm_t::fda field to the type alignment. More... | |
#define | SUDT_FAST 0x0010 |
serialize without verifying offsets and alignments | |
#define | SUDT_CONST 0x0040 |
only for serialize_udt: make type const | |
#define | SUDT_VOLATILE 0x0080 |
only for serialize_udt: make type volatile | |
#define | SUDT_TRUNC 0x0100 |
serialize: truncate useless strings from fields, fldcmts | |
#define | SUDT_SERDEF 0x0200 |
serialize: if a typeref, serialize its definition | |
#define | DECLARE_TINFO_HELPERS(decl) |
Macro to declare common tinfo_t related functions. | |
#define | STRMEM_MASK 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 | TCMP_EQUAL 0x0000 |
are types equal? | |
#define | TCMP_IGNMODS 0x0001 |
ignore const/volatile modifiers | |
#define | TCMP_AUTOCAST 0x0002 |
can t1 be cast into t2 automatically? | |
#define | TCMP_MANCAST 0x0004 |
can t1 be cast into t2 manually? | |
#define | TCMP_CALL 0x0008 |
can t1 be called with t2 type? | |
#define | TCMP_DELPTR 0x0010 |
remove pointer from types before comparing | |
#define | TCMP_DECL 0x0020 |
compare declarations without resolving them | |
#define | TCMP_ANYBASE 0x0040 |
accept any base class when casting | |
#define | TCMP_SKIPTHIS 0x0080 |
skip the first function argument in comparison | |
#define | FAI_HIDDEN 0x0001 |
hidden argument | |
#define | FAI_RETPTR 0x0002 |
pointer to return value. implies hidden | |
#define | FAI_STRUCT 0x0004 |
was initially a structure | |
#define | FAI_ARRAY 0x0008 |
was initially an array; see "__org_typedef" or "__org_arrdim" type attributes to determine the original type | |
#define | FAI_UNUSED 0x0010 |
argument is not used by the function | |
#define | FTI_SPOILED 0x0001 |
information about spoiled registers is present | |
#define | FTI_NORET 0x0002 |
noreturn | |
#define | FTI_PURE 0x0004 |
__pure | |
#define | FTI_HIGH 0x0008 |
high level prototype (with possibly hidden args) | |
#define | FTI_STATIC 0x0010 |
static | |
#define | FTI_VIRTUAL 0x0020 |
virtual | |
#define | FTI_CALLTYPE 0x00C0 |
mask for FTI_*CALL | |
#define | FTI_DEFCALL 0x0000 |
default call | |
#define | FTI_NEARCALL 0x0040 |
near call | |
#define | FTI_FARCALL 0x0080 |
far call | |
#define | FTI_INTCALL 0x00C0 |
interrupt call | |
#define | FTI_ARGLOCS 0x0100 |
info about argument locations has been calculated (stkargs and retloc too) | |
#define | FTI_EXPLOCS 0x0200 |
all arglocs are specified explicitly | |
#define | FTI_CONST 0x0400 |
const member function | |
#define | FTI_CTOR 0x0800 |
constructor | |
#define | FTI_DTOR 0x1000 |
destructor | |
#define | FTI_ALL 0x1FFF |
all defined bits | |
#define | CC_CDECL_OK 0x01 |
can use __cdecl calling convention? | |
#define | CC_ALLOW_ARGPERM 0x02 |
disregard argument order? | |
#define | CC_ALLOW_REGHOLES 0x04 |
allow holes in register argument list? | |
#define | CC_HAS_ELLIPSIS 0x08 |
function has a variable list of arguments? | |
#define | CC_GOLANG_OK 0x10 |
can use __golang calling convention | |
#define | FRB_MASK 0xF |
Mask for the value type (* means requires additional info): | |
#define | FRB_UNK 0x0 |
Unknown. | |
#define | FRB_NUMB 0x1 |
Binary number. | |
#define | FRB_NUMO 0x2 |
Octal number. | |
#define | FRB_NUMH 0x3 |
Hexadecimal number. | |
#define | FRB_NUMD 0x4 |
Decimal number. | |
#define | FRB_FLOAT 0x5 |
Floating point number (for interpreting an integer type as a floating value) | |
#define | FRB_CHAR 0x6 |
Char. | |
#define | FRB_SEG 0x7 |
Segment. | |
#define | FRB_ENUM 0x8 |
*Enumeration | |
#define | FRB_OFFSET 0x9 |
*Offset | |
#define | FRB_STRLIT 0xA |
*String literal (used for arrays) | |
#define | FRB_STROFF 0xB |
*Struct offset | |
#define | FRB_CUSTOM 0xC |
*Custom data type | |
#define | FRB_INVSIGN 0x0100 |
Invert sign (0x01 is represented as -0xFF) | |
#define | FRB_INVBITS 0x0200 |
Invert bits (0x01 is represented as ~0xFE) | |
#define | FRB_SIGNED 0x0400 |
Force signed representation. | |
#define | FRB_LZERO 0x0800 |
Toggle leading zeroes (used for integers) | |
#define | FRB_TABFORM 0x1000 |
has additional tabular parameters | |
#define | VTBL_SUFFIX "_vtbl" |
#define | VTBL_MEMNAME "__vftable" |
#define | TPOS_LNNUM "\x05" |
#define | TPOS_REGCMT '\x06' |
#define | TVIS_TYPE 0x0001 |
new type info is present | |
#define | TVIS_NAME 0x0002 |
new name is present (only for funcargs and udt members) | |
#define | TVIS_CMT 0x0004 |
new comment is present (only for udt members) | |
#define | TVIS_RPTCMT 0x0008 |
the new comment is repeatable | |
#define | TVST_PRUNE 0x01 |
don't visit children of current type | |
#define | TVST_DEF 0x02 |
visit type definition (meaningful for typerefs) | |
#define | TVST_LEVEL 0x04 |
#define | PIO_NOATTR_FAIL 0x0004 |
missing attributes are not ok | |
#define | PIO_IGNORE_PTRS 0x0008 |
do not follow pointers | |
#define | PTV_DEREF 0x0001 |
take value to print from the debugged process. More... | |
#define | PTV_QUEST 0x0002 |
print '?' for uninited data | |
#define | PTV_EMPTY 0x0004 |
return empty string for uninited data; should not specify PTV_QUEST and PTV_EMPTY together | |
#define | PTV_CSTR 0x0008 |
print constant strings inline | |
#define | PTV_EXPAND 0x0010 |
print only top level on separate lines; max_length applies to separate lines; margin is ignored | |
#define | PTV_LZERO 0x0020 |
print numbers with leading zeroes (only for hex/oct/bin) | |
#define | PTV_STPFLT 0x0040 |
fail on bad floating point numbers (if not set, just print ?flt for them) | |
#define | PTV_SPACE 0x0080 |
add spaces after commas and around braces | |
#define | PTV_DEBUG 0x0100 |
format output for debugger | |
#define | PTV_NOPTR 0x0200 |
prevent pointer values from appearing in the output | |
#define | PTV_NTOP 0x40000000 |
internal flag, do not use | |
#define | PTV_KEEP 0x80000000 |
internal flag, do not use | |
#define | VALSTR_OPEN 0x01 |
printed opening curly brace '{' | |
#define | PDF_INCL_DEPS 0x1 |
Include all type dependencies. | |
#define | PDF_DEF_FWD 0x2 |
Allow forward declarations. | |
#define | PDF_DEF_BASE 0x4 |
Include base types: __int8, __int16, etc.. | |
#define | PDF_HEADER_CMT 0x8 |
Prepend output with a descriptive comment. | |
Typedefs | |
typedef uchar | type_t |
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 uint64 | bmask64_t |
unsigned value that describes a bitmask | |
typedef uchar | bte_t |
Enum type flags. | |
typedef qvector< type_attr_t > | type_attrs_t |
this vector must be sorted by keys | |
typedef int | type_sign_t |
type signedness | |
typedef int | argloc_type_t |
Specifies the location type of a function argument - 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< edm_t > | edmvec_t |
vector of enum values. More... | |
typedef qvector< regobj_t > | regobjvec_t |
typedef qvector< valstr_t > | valstrvec_t |
typedef qvector< uint32 > | ordvec_t |
typedef int idaapi | local_tinfo_predicate_t(uint32 ord, const tinfo_t &type, void *ud) |
Controls which types are displayed/selected when choosing local types. More... | |
using | enum_type_visitor_t = std::function< ssize_t(const struct enum_type_data_t &ei, size_t idx, uint64 value, uint64 bmask)> |
Callback for visit_edms. More... | |
Functions | |
THREAD_SAFE bool | is_type_const (type_t t) |
See BTM_CONST. | |
THREAD_SAFE bool | is_type_volatile (type_t t) |
See BTM_VOLATILE. | |
THREAD_SAFE type_t | get_base_type (type_t t) |
Get get basic type bits (TYPE_BASE_MASK) | |
THREAD_SAFE type_t | get_type_flags (type_t t) |
Get type flags (TYPE_FLAGS_MASK) | |
THREAD_SAFE type_t | get_full_type (type_t t) |
Get basic type bits + type flags (TYPE_FULL_MASK) | |
THREAD_SAFE bool | is_typeid_last (type_t t) |
Is the type_t the last byte of type declaration? (there are no additional bytes after a basic type, see _BT_LAST_BASIC) | |
THREAD_SAFE bool | is_type_partial (type_t t) |
Identifies an unknown or void type with a known size (see Basic type: unknown & void) | |
THREAD_SAFE bool | is_type_void (type_t t) |
See BTF_VOID. | |
THREAD_SAFE bool | is_type_unknown (type_t t) |
See BT_UNKNOWN. | |
THREAD_SAFE bool | is_type_ptr (type_t t) |
See BT_PTR. | |
THREAD_SAFE bool | is_type_complex (type_t t) |
See BT_COMPLEX. | |
THREAD_SAFE bool | is_type_func (type_t t) |
See BT_FUNC. | |
THREAD_SAFE bool | is_type_array (type_t t) |
See BT_ARRAY. | |
THREAD_SAFE bool | is_type_typedef (type_t t) |
See BTF_TYPEDEF. | |
THREAD_SAFE bool | is_type_sue (type_t t) |
Is the type a struct/union/enum? | |
THREAD_SAFE bool | is_type_struct (type_t t) |
See BTF_STRUCT. | |
THREAD_SAFE bool | is_type_union (type_t t) |
See BTF_UNION. | |
THREAD_SAFE bool | is_type_struni (type_t t) |
Is the type a struct or union? | |
THREAD_SAFE bool | is_type_enum (type_t t) |
See BTF_ENUM. | |
THREAD_SAFE bool | is_type_bitfld (type_t t) |
See BT_BITFIELD. | |
THREAD_SAFE bool | is_type_int (type_t bt) |
Does the type_t specify one of the basic types in Basic type: integer? | |
THREAD_SAFE bool | is_type_int128 (type_t t) |
Does the type specify a 128-bit value? (signed or unsigned, see Basic type: integer) | |
THREAD_SAFE bool | is_type_int64 (type_t t) |
Does the type specify a 64-bit value? (signed or unsigned, see Basic type: integer) | |
THREAD_SAFE bool | is_type_int32 (type_t t) |
Does the type specify a 32-bit value? (signed or unsigned, see Basic type: integer) | |
THREAD_SAFE bool | is_type_int16 (type_t t) |
Does the type specify a 16-bit value? (signed or unsigned, see Basic type: integer) | |
THREAD_SAFE bool | is_type_char (type_t t) |
Does the type specify a char value? (signed or unsigned, see Basic type: integer) | |
THREAD_SAFE bool | is_type_paf (type_t t) |
Is the type a pointer, array, or function type? | |
THREAD_SAFE bool | is_type_ptr_or_array (type_t t) |
Is the type a pointer or array type? | |
THREAD_SAFE bool | is_type_floating (type_t t) |
Is the type a floating point type? | |
THREAD_SAFE bool | is_type_integral (type_t t) |
Is the type an integral type (char/short/int/long/bool)? | |
THREAD_SAFE bool | is_type_ext_integral (type_t t) |
Is the type an extended integral type? (integral or enum) | |
THREAD_SAFE bool | is_type_arithmetic (type_t t) |
Is the type an arithmetic type? (floating or integral) | |
THREAD_SAFE bool | is_type_ext_arithmetic (type_t t) |
Is the type an extended arithmetic type? (arithmetic or enum) | |
THREAD_SAFE bool | is_type_uint (type_t t) |
See BTF_UINT. | |
THREAD_SAFE bool | is_type_uchar (type_t t) |
See BTF_UCHAR. | |
THREAD_SAFE bool | is_type_uint16 (type_t t) |
See BTF_UINT16. | |
THREAD_SAFE bool | is_type_uint32 (type_t t) |
See BTF_UINT32. | |
THREAD_SAFE bool | is_type_uint64 (type_t t) |
See BTF_UINT64. | |
THREAD_SAFE bool | is_type_uint128 (type_t t) |
See BTF_UINT128. | |
THREAD_SAFE bool | is_type_ldouble (type_t t) |
See BTF_LDOUBLE. | |
THREAD_SAFE bool | is_type_double (type_t t) |
See BTF_DOUBLE. | |
THREAD_SAFE bool | is_type_float (type_t t) |
See BTF_FLOAT. | |
THREAD_SAFE bool | is_type_tbyte (type_t t) |
See BTF_FLOAT. | |
THREAD_SAFE bool | is_type_bool (type_t t) |
See BTF_BOOL. | |
THREAD_SAFE bool | is_tah_byte (type_t t) |
The TAH byte (type attribute header byte) denotes the start of type attributes. More... | |
THREAD_SAFE bool | is_sdacl_byte (type_t t) |
Identify an sdacl byte. More... | |
THREAD_SAFE bool | operator< (const bytevec_t &v1, const bytevec_t &v2) |
Compare two bytevecs with '<'. More... | |
idaman bool ida_export | append_argloc (qtype *out, const argloc_t &vloc) |
Serialize argument location. | |
idaman bool ida_export | extract_argloc (argloc_t *vloc, const type_t **ptype, bool forbid_stkoff) |
Deserialize an argument location. More... | |
idaman const type_t *ida_export | resolve_typedef (const til_t *til, const type_t *type) |
bool | is_restype_void (const til_t *til, const type_t *type) |
bool | is_restype_enum (const til_t *til, const type_t *type) |
bool | is_restype_struni (const til_t *til, const type_t *type) |
bool | is_restype_struct (const til_t *til, const type_t *type) |
idaman type_t ida_export | get_scalar_bt (int size) |
idaman til_t *ida_export | new_til (const char *name, const char *desc) |
Initialize a til. | |
idaman int ida_export | add_base_tils (qstring *errbuf, til_t *ti, const char *tildir, const char *bases, bool gen_events) |
Add multiple base tils. More... | |
idaman til_t *ida_export | load_til (const char *name, qstring *errbuf, const char *tildir=nullptr) |
Load til from a file without adding it to the database list (see also add_til). More... | |
idaman bool ida_export | sort_til (til_t *ti) |
Sort til (use after modifying it). More... | |
idaman bool ida_export | compact_til (til_t *ti) |
Collect garbage in til. More... | |
idaman bool ida_export | store_til (til_t *ti, const char *tildir, const char *name) |
Store til to a file. More... | |
idaman void ida_export | free_til (til_t *ti) |
Free memory allocated by til. | |
idaman til_t *ida_export | load_til_header (const char *tildir, const char *name, qstring *errbuf) |
Get human-readable til description. | |
THREAD_SAFE bool | is_code_far (cm_t cm) |
Does the given model specify far code?. | |
THREAD_SAFE bool | is_data_far (cm_t cm) |
Does the given model specify far data?. | |
idaman int ida_export | install_custom_argloc (const custloc_desc_t *custloc) |
Save a custom argloc. | |
idaman bool ida_export | remove_custom_argloc (int idx) |
Delete the custom argloc at the given index. | |
idaman const custloc_desc_t *ida_export | retrieve_custom_argloc (int idx) |
Retrieve the custom argloc at the given index. | |
idaman int ida_export | verify_argloc (const argloc_t &vloc, int size, const rangeset_t *gaps) |
Verify argloc_t. More... | |
idaman bool ida_export | optimize_argloc (argloc_t *vloc, int size, const rangeset_t *gaps) |
Verify and optimize scattered argloc into simple form. More... | |
idaman size_t ida_export | print_argloc (char *buf, size_t bufsize, const argloc_t &vloc, int size=0, int vflags=0) |
Convert an argloc to human readable form. | |
idaman int ida_export | for_all_arglocs (aloc_visitor_t &vv, argloc_t &vloc, int size, int off=0) |
Compress larger argloc types and initiate the aloc visitor. | |
int idaapi | for_all_const_arglocs (const_aloc_visitor_t &vv, const argloc_t &vloc, int size, int off=0) |
See for_all_arglocs() | |
constexpr THREAD_SAFE cm_t | get_cc (cm_t cm) |
Get the calling convention. | |
cm_t | get_effective_cc (cm_t cm) |
Get effective calling convention (with respect to default CC) | |
constexpr THREAD_SAFE bool | is_user_cc (cm_t cm) |
Does the calling convention specify argument locations explicitly? | |
constexpr THREAD_SAFE bool | is_vararg_cc (cm_t cm) |
Does the calling convention use ellipsis? | |
constexpr THREAD_SAFE bool | is_purging_cc (cm_t cm) |
Does the calling convention clean the stack arguments upon return?. More... | |
constexpr bool | is_golang_cc (cm_t cc) |
GO language calling convention (return value in stack)? | |
constexpr bool | is_swift_cc (cm_t cc) |
Swift calling convention (arguments and return values in registers)? | |
THREAD_SAFE comp_t | get_comp (comp_t comp) |
Get compiler bits. | |
idaman const char *ida_export | get_compiler_name (comp_t id) |
Get full compiler name. | |
idaman const char *ida_export | get_compiler_abbr (comp_t id) |
Get abbreviated compiler name. | |
idaman void ida_export | get_compilers (compvec_t *ids, qstrvec_t *names, qstrvec_t *abbrs) |
Get names of all built-in compilers. | |
THREAD_SAFE comp_t | is_comp_unsure (comp_t comp) |
See COMP_UNSURE. | |
comp_t | default_compiler () |
Get compiler specified by inf.cc. | |
bool | is_gcc () |
Is the target compiler COMP_GNU? | |
bool | is_gcc32 () |
Is the target compiler 32 bit gcc? | |
bool | is_gcc64 () |
Is the target compiler 64 bit gcc? | |
bool | gcc_layout () |
Should use the struct/union layout as done by gcc? | |
idaman bool ida_export | set_compiler (const compiler_info_t &cc, int flags, const char *abiname=nullptr) |
Change current compiler. More... | |
bool idaapi | set_compiler_id (comp_t id, const char *abiname=nullptr) |
Set the compiler id (see Compiler IDs) | |
bool idaapi | set_abi_name (const char *abiname, bool user_level=false) |
Set abi name (see Compiler IDs) | |
idaman ssize_t ida_export | get_abi_name (qstring *out) |
Get ABI name. More... | |
idaman bool ida_export | append_abi_opts (const char *abi_opts, bool user_level=false) |
Add/remove/check ABI option General form of full abi name: abiname-opt1-opt2-... or -opt1-opt2-... More... | |
idaman bool ida_export | remove_abi_opts (const char *abi_opts, bool user_level=false) |
idaman bool ida_export | set_compiler_string (const char *compstr, bool user_level) |
bool | use_golang_cc () |
is GOLANG calling convention used by default? | |
void | switch_to_golang () |
switch to GOLANG calling convention (to be used as default CC) | |
idaman int ida_export | h2ti (til_t *ti, lexer_t *lx, const char *input, int flags=HTI_HIGH, h2ti_type_cb *type_cb=nullptr, h2ti_type_cb *var_cb=nullptr, printer_t *print_cb=nullptr, void *_cb_data=nullptr, abs_t _isabs=ABS_UNK) |
Convert declarations to type_t*. More... | |
THREAD_SAFE int | convert_pt_flags_to_hti (int pt_flags) |
Convert Type parsing flags to Type formatting flags. More... | |
idaman bool ida_export | parse_decl (tinfo_t *out_tif, qstring *out_name, til_t *til, const char *decl, int pt_flags) |
Parse ONE declaration. More... | |
idaman int ida_export | parse_decls (til_t *til, const char *input, printer_t *printer, int hti_flags) |
Parse many declarations and store them in a til. More... | |
idaman bool ida_export | print_type (qstring *out, ea_t ea, int prtype_flags) |
Get type declaration for the specified address. More... | |
idaman int ida_export | get_named_type (const til_t *ti, const char *name, int ntf_flags, const type_t **type=nullptr, const p_list **fields=nullptr, const char **cmt=nullptr, const p_list **fieldcmts=nullptr, sclass_t *sclass=nullptr, uint32 *value=nullptr) |
Get named typeinfo. More... | |
int idaapi | get_named_type64 (const til_t *ti, const char *name, int ntf_flags, const type_t **type=nullptr, const p_list **fields=nullptr, const char **cmt=nullptr, const p_list **fieldcmts=nullptr, sclass_t *sclass=nullptr, uint64 *value=nullptr) |
See get_named_type() above. More... | |
idaman const char *ida_export | tinfo_errstr (tinfo_code_t code) |
Helper function to convert an error code into a printable string. More... | |
idaman bool ida_export | del_named_type (til_t *ti, const char *name, int ntf_flags) |
Delete information about a symbol. More... | |
idaman const char *ida_export | first_named_type (const til_t *ti, int ntf_flags) |
Enumerate types. More... | |
idaman const char *ida_export | next_named_type (const til_t *ti, const char *name, int ntf_flags) |
Enumerate types. More... | |
idaman uint32 ida_export | copy_named_type (til_t *dsttil, const til_t *srctil, const char *name) |
Copy a named type from one til to another. More... | |
idaman bool ida_export | decorate_name (qstring *out, const char *name, bool mangle, cm_t cc=CM_CC_UNKNOWN, const tinfo_t *type=nullptr) |
Decorate/undecorate a C symbol name. More... | |
idaman bool ida_export | gen_decorate_name (qstring *out, const char *name, bool mangle, cm_t cc, const tinfo_t *type) |
Generic function for decorate_name() (may be used in IDP modules) | |
idaman ssize_t ida_export | calc_c_cpp_name (qstring *out, const char *name, const tinfo_t *type, int ccn_flags) |
Get C or C++ form of the name. More... | |
idaman bool ida_export | enable_numbered_types (til_t *ti, bool enable) |
Enable the use of numbered types in til. More... | |
idaman bool ida_export | get_numbered_type (const til_t *ti, uint32 ordinal, const type_t **type=nullptr, const p_list **fields=nullptr, const char **cmt=nullptr, const p_list **fieldcmts=nullptr, sclass_t *sclass=nullptr) |
Retrieve a type by its ordinal number. | |
idaman uint32 ida_export | alloc_type_ordinals (til_t *ti, int qty) |
Allocate a range of ordinal numbers for new types. More... | |
uint32 | alloc_type_ordinal (til_t *ti) |
alloc_type_ordinals(ti, 1) | |
idaman uint32 ida_export | get_ordinal_limit (const til_t *ti=nullptr) |
Get number of allocated ordinals + 1. More... | |
uint32 | get_ordinal_count (const til_t *ti=nullptr) |
Get number of allocated ordinals. More... | |
idaman 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 bool ida_export | is_type_choosable (const til_t *ti, uint32 ordinal) |
Check if a struct/union type is choosable. More... | |
idaman void ida_export | set_type_choosable (til_t *ti, uint32 ordinal, bool value) |
Enable/disable 'choosability' flag for a struct/union type. More... | |
idaman ea_t ida_export | get_vftable_ea (uint32 ordinal) |
Get address of a virtual function table. More... | |
idaman uint32 ida_export | get_vftable_ordinal (ea_t vftable_ea) |
Get ordinal number of the virtual function table. More... | |
idaman bool ida_export | set_vftable_ea (uint32 ordinal, ea_t vftable_ea) |
Set the address of a vftable instance for a vftable type. More... | |
bool | del_vftable_ea (uint32 ordinal) |
Delete the address of a vftable instance for a vftable type. More... | |
size_t | get_default_align () |
Get default alignment for structure fields. More... | |
THREAD_SAFE void | align_size (size_t &cur_tot_size, size_t elem_size, size_t algn) |
Get alignment delta for the a structure field. More... | |
idaman bool ida_export | deref_ptr (ea_t *ptr_ea, const tinfo_t &tif, ea_t *closure_obj=nullptr) |
Dereference a pointer. More... | |
idaman bool ida_export | remove_tinfo_pointer (tinfo_t *tif, const char **pname, const til_t *til=nullptr) |
Remove pointer of a type. More... | |
idaman 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 *out, tid_t id) |
Generate a type information about the id from the disassembly. More... | |
void | set_c_header_path (const char *incdir) |
Set include directory path the target compiler. | |
ssize_t | get_c_header_path (qstring *buf) |
Get the include directory path of the target compiler. | |
void | set_c_macros (const char *macros) |
Set predefined macros for the target compiler. | |
ssize_t | get_c_macros (qstring *buf) |
Get predefined macros for the target compiler. | |
idaman til_t *ida_export | get_idati () |
Pointer to the local type library - this til is private for each IDB file Functions that accept til_t* default to `idati` when is nullptr provided. More... | |
idaman bool ida_export | get_idainfo_by_type (size_t *out_size, 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 bool ida_export | get_tinfo_by_flags (tinfo_t *out, flags64_t flags) |
Get tinfo object that corresponds to data flags. More... | |
idaman cm_t ida_export | guess_func_cc (const func_type_data_t &fti, int npurged, int cc_flags) |
Use func_type_data_t::guess_cc() | |
idaman bool ida_export | dump_func_type_data (qstring *out, const func_type_data_t &fti, int praloc_bits) |
Use func_type_data_t::dump() | |
bool | inf_pack_stkargs (cm_t cc) |
bool | inf_big_arg_align (cm_t cc) |
bool | inf_huge_arg_align (cm_t cc) |
int | get_arg_align (int type_align, int slotsize, cm_t cc=CM_CC_UNKNOWN) |
int | get_arg_align (const tinfo_t &tif, int slotsize, cm_t cc=CM_CC_UNKNOWN) |
sval_t | align_stkarg_up (sval_t spoff, int type_align, int slotsize, cm_t cc=CM_CC_UNKNOWN) |
sval_t | align_stkarg_up (sval_t spoff, const tinfo_t &tif, int slotsize, cm_t cc=CM_CC_UNKNOWN) |
tinfo_t | remove_pointer (const tinfo_t &tif) |
BT_PTR: If the current type is a pointer, return the pointed object. More... | |
idaman error_t ida_export | unpack_idcobj_from_idb (idc_value_t *obj, const tinfo_t &tif, ea_t ea, const bytevec_t *off0, int pio_flags=0) |
Collection of register objects. More... | |
idaman error_t ida_export | unpack_idcobj_from_bv (idc_value_t *obj, const tinfo_t &tif, const bytevec_t &bytes, int pio_flags=0) |
Read a typed idc object from the byte vector. | |
idaman error_t ida_export | pack_idcobj_to_idb (const idc_value_t *obj, const tinfo_t &tif, ea_t ea, int pio_flags=0) |
Write a typed idc object to the database. | |
idaman error_t ida_export | pack_idcobj_to_bv (const idc_value_t *obj, const tinfo_t &tif, relobj_t *bytes, void *objoff, int pio_flags=0) |
Write a typed idc object to the byte vector. More... | |
idaman bool ida_export | apply_tinfo_to_stkarg (const insn_t &insn, const op_t &x, uval_t v, const tinfo_t &tif, const char *name) |
Helper function for the processor modules. More... | |
idaman void ida_export | gen_use_arg_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 tid_t ida_export | get_named_type_tid (const char *name) |
Get named local type TID. More... | |
idaman bool ida_export | get_tid_name (qstring *out, tid_t tid) |
Get a type name for the specified TID. More... | |
idaman uint32 ida_export | get_tid_ordinal (tid_t tid) |
Get type ordinal number for TID. More... | |
idaman ssize_t ida_export | get_udm_by_fullname (udm_t *udm, const char *fullname) |
Get udt member by full name. More... | |
tid_t | create_enum_type (const char *enum_name, enum_type_data_t &ei, int enum_width, type_sign_t sign, bool convert_to_bitmask, const char *enum_cmt=nullptr) |
Create type enum. More... | |
idaman bool ida_export | format_cdata (qstrvec_t *outvec, const idc_value_t &idc_value, const tinfo_t *tif, valstr_t *vtree=nullptr, const format_data_info_t *fdi=nullptr) |
Format a data value as a C initializer. More... | |
idaman int ida_export | print_cdata (text_sink_t &printer, const idc_value_t &idc_value, const tinfo_t *tif, const format_data_info_t *fdi=nullptr) |
The same as format_cdata(), but instead of returning the answer in a vector, print it. More... | |
idaman int ida_export | print_decls (text_sink_t &printer, til_t *til, const ordvec_t *ordinals, uint32 pdf_flags) |
Print types (and possibly their dependencies) in a format suitable for using in a header file. More... | |
idaman int ida_export | calc_number_of_children (const argloc_t &loc, const tinfo_t &tif, bool dont_deref_ptr=false) |
Calculate max number of lines of a formatted c data, when expanded (PTV_EXPAND). More... | |
idaman bool ida_export | get_enum_member_expr (qstring *buf, const tinfo_t &tif, int serial, uint64 value) |
Return a C expression that can be used to represent an enum member. More... | |
idaman bool ida_export | choose_named_type (til_symbol_t *out_sym, const til_t *root_til, const char *title, int ntf_flags, predicate_t *predicate=nullptr) |
Choose a type from a type library. More... | |
idaman uint32 ida_export | choose_local_tinfo (const til_t *ti, const char *title, local_tinfo_predicate_t *func=nullptr, uint32 def_ord=0, void *ud=nullptr) |
Choose a type from the local type library. More... | |
idaman uint32 ida_export | choose_local_tinfo_and_delta (int32 *delta, const til_t *ti, const char *title, local_tinfo_predicate_t *func=nullptr, uint32 def_ord=0, void *ud=nullptr) |
Choose a type from the local type library and specify the pointer shift value. More... | |
idaman ssize_t ida_export | visit_edms (const tinfo_t &tif, uint64 value, int nbytes, uchar serial, const enum_type_visitor_t &visitor) |
Visit enum members having the specified value. More... | |
Variables | |
const type_t | TYPE_BASE_MASK = 0x0F |
the low 4 bits define the basic type | |
const type_t | TYPE_FLAGS_MASK = 0x30 |
type flags - they have different meaning depending on the basic type | |
const type_t | TYPE_MODIF_MASK = 0xC0 |
modifiers. More... | |
const type_t | TYPE_FULL_MASK = (TYPE_BASE_MASK | TYPE_FLAGS_MASK) |
basic type with type flags | |
const type_t | BT_UNK = 0x00 |
unknown | |
const type_t | BT_VOID = 0x01 |
void | |
const type_t | BTMT_SIZE0 = 0x00 |
BT_VOID - normal void; BT_UNK - don't use | |
const type_t | BTMT_SIZE12 = 0x10 |
size = 1 byte if BT_VOID; 2 if BT_UNK | |
const type_t | BTMT_SIZE48 = 0x20 |
size = 4 bytes if BT_VOID; 8 if BT_UNK | |
const type_t | BTMT_SIZE128 = 0x30 |
size = 16 bytes if BT_VOID; unknown if BT_UNK (IN struct alignment - see below) | |
const type_t | BT_INT8 = 0x02 |
__int8 | |
const type_t | BT_INT16 = 0x03 |
__int16 | |
const type_t | BT_INT32 = 0x04 |
__int32 | |
const type_t | BT_INT64 = 0x05 |
__int64 | |
const type_t | BT_INT128 = 0x06 |
__int128 (for alpha & future use) | |
const type_t | BT_INT = 0x07 |
natural int. (size provided by idp module) | |
const type_t | BTMT_UNKSIGN = 0x00 |
unknown signedness | |
const type_t | BTMT_SIGNED = 0x10 |
signed | |
const type_t | BTMT_USIGNED = 0x20 |
unsigned | |
const type_t | BTMT_UNSIGNED = BTMT_USIGNED |
const type_t | BTMT_CHAR = 0x30 |
specify char or segment register More... | |
const type_t | BT_BOOL = 0x08 |
bool | |
const type_t | BTMT_DEFBOOL = 0x00 |
size is model specific or unknown(?) | |
const type_t | BTMT_BOOL1 = 0x10 |
size 1byte | |
const type_t | BTMT_BOOL2 = 0x20 |
size 2bytes - !inf_is_64bit() | |
const type_t | BTMT_BOOL8 = 0x20 |
size 8bytes - inf_is_64bit() | |
const type_t | BTMT_BOOL4 = 0x30 |
size 4bytes | |
const type_t | BT_FLOAT = 0x09 |
float | |
const type_t | BTMT_FLOAT = 0x00 |
float (4 bytes) | |
const type_t | BTMT_DOUBLE = 0x10 |
double (8 bytes) | |
const type_t | BTMT_LNGDBL = 0x20 |
long double (compiler specific) | |
const type_t | BTMT_SPECFLT = 0x30 |
float (variable size). More... | |
const type_t | _BT_LAST_BASIC = BT_FLOAT |
the last basic type, all basic types may be followed by [tah-typeattrs] | |
const type_t | BT_PTR = 0x0A |
pointer. More... | |
const type_t | BTMT_DEFPTR = 0x00 |
default for model | |
const type_t | BTMT_NEAR = 0x10 |
near | |
const type_t | BTMT_FAR = 0x20 |
far | |
const type_t | BTMT_CLOSURE = 0x30 |
closure. More... | |
const type_t | BT_ARRAY = 0x0B |
array | |
const type_t | BTMT_NONBASED = 0x10 |
const type_t | BTMT_ARRESERV = 0x20 |
reserved bit | |
const type_t | BT_FUNC = 0x0C |
function. More... | |
const type_t | BTMT_DEFCALL = 0x00 |
call method - default for model or unknown | |
const type_t | BTMT_NEARCALL = 0x10 |
function returns by retn | |
const type_t | BTMT_FARCALL = 0x20 |
function returns by retf | |
const type_t | BTMT_INTCALL = 0x30 |
function returns by iret in this case cc MUST be 'unknown' | |
const type_t | BT_COMPLEX = 0x0D |
struct/union/enum/typedef. More... | |
const type_t | BTMT_STRUCT = 0x00 |
struct: MCNT records: type_t; [sdacl-typeattrs]; | |
const type_t | BTMT_UNION = 0x10 |
union: MCNT records: type_t... | |
const type_t | BTMT_ENUM = 0x20 |
enum: next byte bte_t (see below) N records: de delta(s) OR blocks (see below) | |
const type_t | BTMT_TYPEDEF = 0x30 |
named reference always p_string name | |
const type_t | BT_BITFIELD = 0x0E |
bitfield (only in struct) ['bitmasked' enum see below] next byte is dt ((size in bits << 1) | (unsigned ? 1 : 0)) | |
const type_t | BTMT_BFLDI8 = 0x00 |
__int8 | |
const type_t | BTMT_BFLDI16 = 0x10 |
__int16 | |
const type_t | BTMT_BFLDI32 = 0x20 |
__int32 | |
const type_t | BTMT_BFLDI64 = 0x30 |
__int64 | |
const type_t | BT_RESERVED = 0x0F |
RESERVED. | |
const type_t | BTM_CONST = 0x40 |
const | |
const type_t | BTM_VOLATILE = 0x80 |
volatile | |
const bte_t | BTE_SIZE_MASK = 0x07 |
storage size. More... | |
const bte_t | BTE_RESERVED = 0x08 |
must be 0, in order to distinguish from a tah-byte | |
const bte_t | BTE_BITMASK = 0x10 |
'subarrays'. More... | |
const bte_t | BTE_OUT_MASK = 0x60 |
output style mask | |
const bte_t | BTE_HEX = 0x00 |
hex | |
const bte_t | BTE_CHAR = 0x20 |
char or hex | |
const bte_t | BTE_SDEC = 0x40 |
signed decimal | |
const bte_t | BTE_UDEC = 0x60 |
unsigned decimal | |
const bte_t | BTE_ALWAYS = 0x80 |
this bit MUST be present | |
const type_t | BT_SEGREG = (BT_INT | BTMT_CHAR) |
segment register | |
const type_t | BT_UNK_BYTE = (BT_VOID | BTMT_SIZE12) |
1 byte | |
const type_t | BT_UNK_WORD = (BT_UNK | BTMT_SIZE12) |
2 bytes | |
const type_t | BT_UNK_DWORD = (BT_VOID | BTMT_SIZE48) |
4 bytes | |
const type_t | BT_UNK_QWORD = (BT_UNK | BTMT_SIZE48) |
8 bytes | |
const type_t | BT_UNK_OWORD = (BT_VOID | BTMT_SIZE128) |
16 bytes | |
const type_t | BT_UNKNOWN = (BT_UNK | BTMT_SIZE128) |
unknown size - for parameters | |
const type_t | BTF_BYTE = BT_UNK_BYTE |
byte | |
const type_t | BTF_UNK = BT_UNKNOWN |
unknown | |
const type_t | BTF_VOID = BT_VOID | BTMT_SIZE0 |
void | |
const type_t | BTF_INT8 = BT_INT8 | BTMT_SIGNED |
signed byte | |
const type_t | BTF_CHAR = BT_INT8 | BTMT_CHAR |
signed char | |
const type_t | BTF_UCHAR = BT_INT8 | BTMT_USIGNED |
unsigned char | |
const type_t | BTF_UINT8 = BT_INT8 | BTMT_USIGNED |
unsigned byte | |
const type_t | BTF_INT16 = BT_INT16 | BTMT_SIGNED |
signed short | |
const type_t | BTF_UINT16 = BT_INT16 | BTMT_USIGNED |
unsigned short | |
const type_t | BTF_INT32 = BT_INT32 | BTMT_SIGNED |
signed int | |
const type_t | BTF_UINT32 = BT_INT32 | BTMT_USIGNED |
unsigned int | |
const type_t | BTF_INT64 = BT_INT64 | BTMT_SIGNED |
signed long | |
const type_t | BTF_UINT64 = BT_INT64 | BTMT_USIGNED |
unsigned long | |
const type_t | BTF_INT128 = BT_INT128 | BTMT_SIGNED |
signed 128-bit value | |
const type_t | BTF_UINT128 = BT_INT128 | BTMT_USIGNED |
unsigned 128-bit value | |
const type_t | BTF_INT = BT_INT | BTMT_UNKSIGN |
int, unknown signedness | |
const type_t | BTF_UINT = BT_INT | BTMT_USIGNED |
unsigned int | |
const type_t | BTF_SINT = BT_INT | BTMT_SIGNED |
singed int | |
const type_t | BTF_BOOL = BT_BOOL |
boolean | |
const type_t | BTF_FLOAT = BT_FLOAT | BTMT_FLOAT |
float | |
const type_t | BTF_DOUBLE = BT_FLOAT | BTMT_DOUBLE |
double | |
const type_t | BTF_LDOUBLE = BT_FLOAT | BTMT_LNGDBL |
long double | |
const type_t | BTF_TBYTE = BT_FLOAT | BTMT_SPECFLT |
see BTMT_SPECFLT | |
const type_t | BTF_STRUCT = BT_COMPLEX | BTMT_STRUCT |
struct | |
const type_t | BTF_UNION = BT_COMPLEX | BTMT_UNION |
union | |
const type_t | BTF_ENUM = BT_COMPLEX | BTMT_ENUM |
enum | |
const type_t | BTF_TYPEDEF = BT_COMPLEX | BTMT_TYPEDEF |
typedef | |
const type_sign_t | no_sign = 0 |
no sign, or unknown | |
const type_sign_t | type_signed = 1 |
signed type | |
const type_sign_t | type_unsigned = 2 |
unsigned type | |
const cm_t | CM_MASK = 0x03 |
const cm_t | CM_UNKNOWN = 0x00 |
unknown | |
const cm_t | CM_N8_F16 = 0x01 |
if sizeof(int)<=2: near 1 byte, far 2 bytes | |
const cm_t | CM_N64 = 0x01 |
if sizeof(int)>2: near 8 bytes, far 8 bytes | |
const cm_t | CM_N16_F32 = 0x02 |
near 2 bytes, far 4 bytes | |
const cm_t | CM_N32_F48 = 0x03 |
near 4 bytes, far 6 bytes | |
const cm_t | CM_M_MASK = 0x0C |
const cm_t | CM_M_NN = 0x00 |
small: code=near, data=near (or unknown if CM_UNKNOWN) | |
const cm_t | CM_M_FF = 0x04 |
large: code=far, data=far | |
const cm_t | CM_M_NF = 0x08 |
compact: code=near, data=far | |
const cm_t | CM_M_FN = 0x0C |
medium: code=far, data=near | |
const cm_t | CM_CC_MASK = 0xF0 |
const cm_t | CM_CC_INVALID = 0x00 |
this value is invalid | |
const cm_t | CM_CC_UNKNOWN = 0x10 |
unknown calling convention | |
const cm_t | CM_CC_VOIDARG = 0x20 |
function without arguments if has other cc and argnum == 0, represent as f() - unknown list | |
const cm_t | CM_CC_CDECL = 0x30 |
stack | |
const cm_t | CM_CC_ELLIPSIS = 0x40 |
cdecl + ellipsis | |
const cm_t | CM_CC_STDCALL = 0x50 |
stack, purged | |
const cm_t | CM_CC_PASCAL = 0x60 |
stack, purged, reverse order of args | |
const cm_t | CM_CC_FASTCALL = 0x70 |
stack, purged (x86), first args are in regs (compiler-dependent) | |
const cm_t | CM_CC_THISCALL = 0x80 |
stack, purged (x86), first arg is in reg (compiler-dependent) | |
const cm_t | CM_CC_SWIFT = 0x90 |
(Swift) arguments and return values in registers (compiler-dependent) | |
const cm_t | CM_CC_SPOILED = 0xA0 |
This is NOT a cc! Mark of __spoil record the low nibble is count and after n {spoilreg_t} present real cm_t byte. More... | |
const cm_t | CM_CC_GOLANG = 0xB0 |
(Go) arguments and return value in stack | |
const cm_t | CM_CC_RESERVE3 = 0xC0 |
const cm_t | CM_CC_SPECIALE = 0xD0 |
CM_CC_SPECIAL with ellipsis | |
const cm_t | CM_CC_SPECIALP = 0xE0 |
Equal to CM_CC_SPECIAL, but with purged stack. | |
const cm_t | CM_CC_SPECIAL = 0xF0 |
usercall: locations of all arguments and the return value are explicitly specified | |
const type_t | BFA_NORET = 0x01 |
__noreturn | |
const type_t | BFA_PURE = 0x02 |
__pure | |
const type_t | BFA_HIGH = 0x04 |
high level prototype (with possibly hidden args) | |
const type_t | BFA_STATIC = 0x08 |
static | |
const type_t | BFA_VIRTUAL = 0x10 |
virtual | |
const cm_t | BFA_FUNC_MARKER = 0x0F |
This is NOT a cc! (used internally as a marker) | |
const type_t | BFA_FUNC_EXT_FORMAT = 0x80 |
This is NOT a real attribute (used internally as marker for extended format) | |
const argloc_type_t | ALOC_NONE = 0 |
none | |
const argloc_type_t | ALOC_STACK = 1 |
stack offset | |
const argloc_type_t | ALOC_DIST = 2 |
distributed (scattered) | |
const argloc_type_t | ALOC_REG1 = 3 |
one register (and offset within it) | |
const argloc_type_t | ALOC_REG2 = 4 |
register pair | |
const argloc_type_t | ALOC_RREL = 5 |
register relative | |
const argloc_type_t | ALOC_STATIC = 6 |
global address | |
const argloc_type_t | ALOC_CUSTOM = 7 |
custom argloc (7 or higher) | |
const cm_t | C_PC_TINY = (CM_N16_F32 | CM_M_NN) |
const cm_t | C_PC_SMALL = (CM_N16_F32 | CM_M_NN) |
const cm_t | C_PC_COMPACT = (CM_N16_F32 | CM_M_NF) |
const cm_t | C_PC_MEDIUM = (CM_N16_F32 | CM_M_FN) |
const cm_t | C_PC_LARGE = (CM_N16_F32 | CM_M_FF) |
const cm_t | C_PC_HUGE = (CM_N16_F32 | CM_M_FF) |
const cm_t | C_PC_FLAT = (CM_N32_F48 | CM_M_NN) |
const comp_t | COMP_MASK = 0x0F |
const comp_t | COMP_UNK = 0x00 |
Unknown. | |
const comp_t | COMP_MS = 0x01 |
Visual C++. | |
const comp_t | COMP_BC = 0x02 |
Borland C++. | |
const comp_t | COMP_WATCOM = 0x03 |
Watcom C++. | |
const comp_t | COMP_GNU = 0x06 |
GNU C++. | |
const comp_t | COMP_VISAGE = 0x07 |
Visual Age C++. | |
const comp_t | COMP_BP = 0x08 |
Delphi. | |
const comp_t | COMP_UNSURE = 0x80 |
uncertain compiler id | |
const size_t | BADSIZE = size_t(-1) |
bad type size | |
const int | FIRST_NONTRIVIAL_TYPID = 0x100 |
Denotes the first bit describing a nontrivial type. | |
const int | TYPID_ISREF = 0x100 |
Identifies that a type that is a typeref. | |
const int | TYPID_SHIFT = 9 |
First type detail bit. | |
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
◆ TA_FORMAT
#define TA_FORMAT "format" |
info about the 'format' argument.
3 times pack_dd: format_functype_t, argument number of 'format', argument number of '...'
◆ ARGLOC_HELPER_DEFINITIONS
#define ARGLOC_HELPER_DEFINITIONS | ( | decl | ) |
Typedef Documentation
◆ edmvec_t
vector of enum values.
for regular enums, no sorting order is defined. for bitmasks, the vector consists of bitmask groups. each non-trivial group (having more than one member or more than one bit in the value) starts with a mask member, the rest of the group has no defined sorting order.
◆ local_tinfo_predicate_t
Controls which types are displayed/selected when choosing local types.
- Return values
-
0 skip type 1 include
◆ enum_type_visitor_t
using enum_type_visitor_t = std::function<ssize_t(const struct enum_type_data_t &ei, size_t idx, uint64 value, uint64 bmask)> |
Callback for visit_edms.
- Parameters
-
ei enum type details idx constant index value applied value bmask group bitmask
- Returns
- 0 to continue, stop visiting enum members otherwise
Enumeration Type Documentation
◆ sclass_t
enum sclass_t |
◆ 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
◆ 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 til_t *ida_export get_idati | ( | ) |
Pointer to the local type library - this til is private for each IDB file Functions that accept til_t* default to `idati` when is nullptr provided.
◆ get_idainfo_by_type()
idaman bool ida_export get_idainfo_by_type | ( | size_t * | out_size, |
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
◆ get_tinfo_by_flags()
Get tinfo object that corresponds to data flags.
- Parameters
-
[out] out type info flags simple flags (byte, word, ..., zword)
◆ 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
◆ get_enum_member_expr()
idaman bool ida_export get_enum_member_expr | ( | qstring * | buf, |
const tinfo_t & | tif, | ||
int | serial, | ||
uint64 | value | ||
) |
Return a C expression that can be used to represent an enum member.
If the value does not correspond to any single enum member, this function tries to find a bitwise combination of enum members that correspond to it. If more than half of value bits do not match any enum members, it fails.
- Parameters
-
buf output buffer tif enumeration type serial which enumeration member to use (0 means the first with the given value) value value to search in the enumeration type
- Returns
- success
◆ choose_named_type()
idaman bool ida_export choose_named_type | ( | til_symbol_t * | out_sym, |
const til_t * | root_til, | ||
const char * | title, | ||
int | ntf_flags, | ||
predicate_t * | predicate = nullptr |
||
) |
Choose a type from a type library.
- Parameters
-
out_sym pointer to be filled with the chosen type root_til pointer to starting til (the function will inspect the base tils if allowed by flags) title title of listbox to display ntf_flags combination of Flags for named types predicate predicate to select types to display (maybe nullptr)
- Returns
- false if nothing is chosen, otherwise true
◆ choose_local_tinfo()
idaman uint32 ida_export choose_local_tinfo | ( | const til_t * | ti, |
const char * | title, | ||
local_tinfo_predicate_t * | func = nullptr , |
||
uint32 | def_ord = 0 , |
||
void * | ud = nullptr |
||
) |
Choose a type from the local type library.
- Parameters
-
ti pointer to til title title of listbox to display func predicate to select types to display (maybe nullptr) def_ord ordinal to position cursor before choose ud user data
- Returns
- == 0 means nothing is chosen, otherwise an ordinal number
◆ choose_local_tinfo_and_delta()
idaman uint32 ida_export choose_local_tinfo_and_delta | ( | int32 * | delta, |
const til_t * | ti, | ||
const char * | title, | ||
local_tinfo_predicate_t * | func = nullptr , |
||
uint32 | def_ord = 0 , |
||
void * | ud = nullptr |
||
) |
Choose a type from the local type library and specify the pointer shift value.
- Parameters
-
delta pointer shift value ti pointer to til title title of listbox to display func predicate to select types to display (maybe nullptr) def_ord ordinal to position cursor before choose ud user data
- Returns
- == 0 means nothing is chosen, otherwise an ordinal number
◆ visit_edms()
idaman ssize_t ida_export visit_edms | ( | const tinfo_t & | tif, |
uint64 | value, | ||
int | nbytes, | ||
uchar | serial, | ||
const enum_type_visitor_t & | visitor | ||
) |
Visit enum members having the specified value.
- Parameters
-
tif enum type value value to visit nbytes size of value in bytes serial use the enum constant with the specified serial; if it does not exist, use serial 0 visitor the visitor function
- Returns
- -1 if TIF is not a enum type; code from VISITOR or 0 if no member was visited
- Note
- 1. For ordinary enums, two values are checked for equality: * the zero-extended VALUE * the sign-extended VALUE 2. For bitmask enums, the following members are visited: * the regular member of the bitmask group * the bitmask itself 3. Enum constant with value 0 is acceptable
Generated by 1.9.3