Latest available version: IDA and decompilers v8.1.221006 see all releases
 Login to the shop
Hex-Rays logo State-of-the-art binary code analysis tools
email icon
hexrays.hpp File Reference

HexRays SDK header file. More...

Go to the source code of this file.

Classes

class  valrng_t
 
struct  operand_locator_t
 Operand locator. More...
 
struct  number_format_t
 Number representation. More...
 
struct  vd_printer_t
 Base helper class to convert binary data structures into text. More...
 
struct  vc_printer_t
 Helper class to convert cfunc_t into text. More...
 
struct  file_printer_t
 Helper class to convert binary data structures into text and put into a file. More...
 
struct  qstring_printer_t
 Helper class to convert cfunc_t into a text string. More...
 
class  vdloc_t
 
struct  lvar_locator_t
 Local variable locator. More...
 
class  lvar_t
 Definition of a local variable (register or stack) #var #lvar. More...
 
struct  lvars_t
 Vector of local variables. More...
 
struct  lvar_saved_info_t
 Saved user settings for local variables: name, type, comment. More...
 
struct  lvar_uservec_t
 All user-defined information about local variables. More...
 
struct  user_lvar_modifier_t
 Helper class to modify saved local variable settings. More...
 
struct  udcall_t
 User-defined function calls. More...
 
struct  microcode_filter_t
 Generic microcode generator class. More...
 
class  udc_filter_t
 Abstract class: User-defined call generator derived classes should implement method 'match'. More...
 
class  bitset_t
 Bit set class. See https://en.wikipedia.org/wiki/Bit_array. More...
 
class  bitset_t::iterator
 
struct  ivl_tpl< T >
 
struct  ivl_t
 
struct  ivl_with_name_t
 
class  ivlset_tpl< Ivl, T >
 
struct  ivlset_t
 
class  rlist_t
 
struct  mlist_t
 
struct  optinsn_t
 User defined callback to optimize individual microcode instructions. More...
 
struct  optblock_t
 User defined callback to optimize microcode blocks. More...
 
class  simple_graph_t
 
struct  op_parent_info_t
 The context info used by visitors. More...
 
struct  minsn_visitor_t
 Micro instruction visitor. More...
 
struct  mop_visitor_t
 Micro operand visitor. More...
 
struct  scif_visitor_t
 Scattered mop: visit each of the scattered locations as a separate mop. More...
 
struct  mlist_mop_visitor_t
 
struct  lvar_ref_t
 Reference to a local variable. Used by mop_l. More...
 
struct  stkvar_ref_t
 Reference to a stack variable. Used for mop_S. More...
 
struct  scif_t
 Scattered operand info. Used for mop_sc. More...
 
struct  mnumber_t
 An integer constant. More...
 
struct  fnumber_t
 Floating point constant. More...
 
class  mop_t
 A microinstruction operand. More...
 
class  mop_pair_t
 Pair of operands. More...
 
class  mop_addr_t
 Address of an operand (mop_l, mop_v, mop_S, mop_r) More...
 
class  mcallarg_t
 A call argument. More...
 
class  mcallinfo_t
 Information about a call. More...
 
class  mcases_t
 List of switch cases and targets. More...
 
struct  voff_t
 Value offset (microregister number or stack offset) More...
 
struct  vivl_t
 Value interval (register or stack range) More...
 
class  chain_t
 ud (use->def) and du (def->use) chain. More...
 
class  block_chains_t
 Chains of one block. More...
 
struct  chain_visitor_t
 Chain visitor class. More...
 
class  graph_chains_t
 
class  minsn_t
 Microinstruction class #insn. More...
 
class  mblock_t
 Microcode of one basic block. More...
 
struct  hexwarn_t
 Warning instances. More...
 
struct  mba_ranges_t
 Ranges to decompile. Either a function or an explicit vector of ranges. More...
 
struct  range_item_iterator_t
 Item iterator of arbitrary rangevec items. More...
 
struct  mba_item_iterator_t
 Item iterator for mba_ranges_t. More...
 
struct  range_chunk_iterator_t
 Chunk iterator of arbitrary rangevec items. More...
 
struct  mba_range_iterator_t
 Chunk iterator for mba_ranges_t. More...
 
class  mba_t
 Micro block array (internal representation of the decompiled code). More...
 
class  chain_keeper_t
 Convenience class to release graph chains automatically. More...
 
class  mbl_graph_t
 Control flow graph of microcode. More...
 
struct  cdg_insn_iterator_t
 
class  codegen_t
 Helper class to generate the initial microcode. More...
 
struct  hexrays_failure_t
 Exception object: decompiler failure information. More...
 
struct  vd_failure_t
 Exception object: decompiler exception. More...
 
struct  vd_interr_t
 Exception object: decompiler internal error. More...
 
struct  gco_info_t
 Result of get_current_operand() More...
 
struct  cnumber_t
 An immediate number. More...
 
struct  var_ref_t
 Reference to a local variable. More...
 
struct  ctree_visitor_t
 A generic helper class that is used for ctree traversal. More...
 
struct  ctree_parentee_t
 A helper ctree traversal class that maintains parent information. More...
 
struct  cfunc_parentee_t
 Class to traverse the whole function. More...
 
struct  treeloc_t
 Ctree location. Used to denote comment locations. More...
 
struct  citem_cmt_t
 Ctree item comment. More...
 
struct  citem_locator_t
 Generic ctree item locator. More...
 
struct  bit_bound_t
 
struct  citem_t
 Basic ctree item. More...
 
struct  cexpr_t
 Ctree item: expression. More...
 
struct  ceinsn_t
 Statement with an expression. More...
 
struct  cif_t
 If statement. More...
 
struct  cloop_t
 Base class for loop statements. More...
 
struct  cfor_t
 For-loop. More...
 
struct  cwhile_t
 While-loop. More...
 
struct  cdo_t
 Do-loop. More...
 
struct  creturn_t
 Return statement. More...
 
struct  cgoto_t
 Goto statement. More...
 
struct  casm_t
 asm statement More...
 
struct  cinsn_t
 Ctree item: statement. More...
 
struct  cblock_t
 Compound statement (curly braces) More...
 
struct  carg_t
 Function argument. More...
 
struct  carglist_t
 Function argument list. More...
 
struct  ccase_t
 Switch case. Usually cinsn_t is a block. More...
 
struct  ccases_t
 Vector of switch cases. More...
 
struct  cswitch_t
 Switch statement. More...
 
struct  ctree_anchor_t
 Invisible COLOR_ADDR tags in the output text are used to refer to ctree items and variables. More...
 
struct  ctree_item_t
 Cursor item. More...
 
struct  cfunc_t
 Decompiled function. Decompilation result is kept here. More...
 
struct  ctext_position_t
 Cursor position in the output text (pseudocode). More...
 
struct  history_item_t
 Navigation history item. More...
 
struct  vdui_t
 Information about the pseudocode window. More...
 
struct  ui_stroff_op_t
 Select UDT for the operands using "Select offsets" widget. More...
 
struct  ui_stroff_applicator_t
 Callback to apply the selection. More...
 
struct  user_numforms_iterator_t
 Iterator class for user_numforms_t. More...
 
struct  lvar_mapping_iterator_t
 
struct  udcall_map_iterator_t
 
struct  user_cmts_iterator_t
 Iterator class for user_cmts_t. More...
 
struct  user_iflags_iterator_t
 
struct  user_unions_iterator_t
 
struct  user_labels_iterator_t
 Iterator class for user_labels_t. More...
 
struct  eamap_iterator_t
 
struct  boundaries_iterator_t
 
struct  block_chains_iterator_t
 

Macros

#define hexapi
 Public functions are marked with this keyword. More...
 
#define MAX_SUPPORTED_STACK_SIZE   0x100000
 
#define HEXRAYS_PLACEMENT_DELETE   void operator delete(void *, void *) {}
 
#define HEXRAYS_MEMORY_ALLOCATION_FUNCS()
 
#define VLR_TYPE   0x0F
 
#define VLR_NONE   0x00
 
#define VLR_ALL   0x01
 
#define VLR_IVLS   0x02
 
#define VLR_RANGE   0x03
 
#define VLR_SRANGE   0x04
 
#define VLR_BITS   0x05
 
#define VLR_SECT   0x06
 
#define VLR_UNION   0x07
 
#define VLR_UNK   0x08
 
#define m_max   0x49
 
#define NF_FIXED   0x01
 number format has been defined by the user More...
 
#define NF_NEGDONE   0x02
 temporary internal bit: negation has been performed More...
 
#define NF_BINVDONE   0x04
 temporary internal bit: inverting bits is done More...
 
#define NF_NEGATE   0x08
 The user asked to negate the constant. More...
 
#define NF_BITNOT   0x10
 The user asked to invert bits of the constant. More...
 
#define NF_VALID   0x20
 internal bit: stroff or enum is valid for enums: this bit is set immediately for stroffs: this bit is set at the end of decompilation More...
 
#define CVAR_USED   0x00000001
 is used in the code? More...
 
#define CVAR_TYPE   0x00000002
 the type is defined? More...
 
#define CVAR_NAME   0x00000004
 has nice name? More...
 
#define CVAR_MREG   0x00000008
 corresponding mregs were replaced? More...
 
#define CVAR_NOWD   0x00000010
 width is unknown More...
 
#define CVAR_UNAME   0x00000020
 user-defined name More...
 
#define CVAR_UTYPE   0x00000040
 user-defined type More...
 
#define CVAR_RESULT   0x00000080
 function result variable More...
 
#define CVAR_ARG   0x00000100
 function argument More...
 
#define CVAR_FAKE   0x00000200
 fake variable (return var or va_list) More...
 
#define CVAR_OVER   0x00000400
 overlapping variable More...
 
#define CVAR_FLOAT   0x00000800
 used in a fpu insn More...
 
#define CVAR_SPOILED   0x00001000
 internal flag, do not use: spoiled var More...
 
#define CVAR_MAPDST   0x00002000
 other variables are mapped to this var More...
 
#define CVAR_PARTIAL   0x00004000
 variable type is partialy defined More...
 
#define CVAR_THISARG   0x00008000
 'this' argument of c++ member functions More...
 
#define CVAR_FORCED   0x00010000
 variable was created by an explicit request otherwise we could reuse an existing var More...
 
#define CVAR_REGNAME   0x00020000
 has a register name (like _RAX): if lvar is used by an m_ext instruction More...
 
#define CVAR_NOPTR   0x00040000
 variable cannot be a pointer (user choice) More...
 
#define CVAR_DUMMY   0x00080000
 dummy argument (added to fill a hole in the argument list) More...
 
#define CVAR_NOTARG   0x00100000
 variable cannot be an input argument More...
 
#define CVAR_AUTOMAP   0x00200000
 variable was automatically mapped More...
 
#define CVAR_BYREF   0x00400000
 the address of the variable was taken More...
 
#define CVAR_INASM   0x00800000
 variable is used in instructions translated into __asm {...} More...
 
#define CVAR_UNUSED   0x01000000
 user-defined __unused attribute meaningful only if: is_arg_var() && !mba->final_type More...
 
#define CVAR_SHARED   0x02000000
 variable is mapped to several chains More...
 
#define SVW_INT   0x00
 
#define SVW_FLOAT   0x01
 
#define SVW_SOFT   0x02
 
#define LVINF_KEEP   0x0001
 preserve saved user settings regardless of vars for example, if a var loses all its user-defined attributes or even gets destroyed, keep its lvar_saved_info_t. More...
 
#define LVINF_FORCE   0x0002
 force allocation of a new variable. More...
 
#define LVINF_NOPTR   0x0004
 variable type should not be a pointer More...
 
#define LVINF_NOMAP   0x0008
 forbid automatic mapping of the variable More...
 
#define LVINF_UNUSED   0x0010
 unused argument, corresponds to CVAR_UNUSED More...
 
#define ULV_PRECISE_DEFEA   0x0001
 Use precise defea's for lvar locations. More...
 
#define MLI_NAME   0x01
 apply lvar name More...
 
#define MLI_TYPE   0x02
 apply lvar type More...
 
#define MLI_CMT   0x04
 apply lvar comment More...
 
#define MLI_SET_FLAGS   0x08
 set LVINF_... bits More...
 
#define MLI_CLR_FLAGS   0x10
 clear LVINF_... bits More...
 
#define ALLMEM   ivl_t::allmem
 
#define SHINS_NUMADDR   0x01
 display definition addresses for numbers More...
 
#define SHINS_VALNUM   0x02
 display value numbers More...
 
#define SHINS_SHORT   0x04
 do not display use-def chains and other attrs More...
 
#define SHINS_LDXEA   0x08
 display address of ldx expressions (not used) More...
 
#define OPROP_IMPDONE   0x01
 imported operand (a pointer) has been dereferenced More...
 
#define OPROP_UDT   0x02
 a struct or union More...
 
#define OPROP_FLOAT   0x04
 possibly floating value More...
 
#define OPROP_CCFLAGS   0x08
 mop_n: a pc-relative value else: value of a condition code register (like mr_cc) More...
 
#define OPROP_UDEFVAL   0x10
 uses undefined value More...
 
#define OPROP_LOWADDR   0x20
 a low address offset More...
 
#define FUNC_NAME_MEMCPY   "memcpy"
 
#define FUNC_NAME_WMEMCPY   "wmemcpy"
 
#define FUNC_NAME_MEMSET   "memset"
 
#define FUNC_NAME_WMEMSET   "wmemset"
 
#define FUNC_NAME_MEMSET32   "memset32"
 
#define FUNC_NAME_MEMSET64   "memset64"
 
#define FUNC_NAME_STRCPY   "strcpy"
 
#define FUNC_NAME_WCSCPY   "wcscpy"
 
#define FUNC_NAME_STRLEN   "strlen"
 
#define FUNC_NAME_WCSLEN   "wcslen"
 
#define FUNC_NAME_STRCAT   "strcat"
 
#define FUNC_NAME_WCSCAT   "wcscat"
 
#define FUNC_NAME_TAIL   "tail"
 
#define FUNC_NAME_VA_ARG   "va_arg"
 
#define FUNC_NAME_EMPTY   "$empty"
 
#define FUNC_NAME_PRESENT   "$present"
 
#define FUNC_NAME_CONTAINING_RECORD   "CONTAINING_RECORD"
 
#define MAX_FUNC_ARGS   64
 
#define FCI_PROP   0x001
 call has been propagated More...
 
#define FCI_DEAD   0x002
 some return registers were determined dead More...
 
#define FCI_FINAL   0x004
 call type is final, should not be changed More...
 
#define FCI_NORET   0x008
 call does not return More...
 
#define FCI_PURE   0x010
 pure function More...
 
#define FCI_NOSIDE   0x020
 call does not have side effects More...
 
#define FCI_SPLOK   0x040
 spoiled/visible_memory lists have been optimized. More...
 
#define FCI_HASCALL   0x080
 A function is an synthetic helper combined from several instructions and at least one of them was a call to a real functions. More...
 
#define FCI_HASFMT   0x100
 A variadic function with recognized printf- or scanf-style format string. More...
 
#define FCI_EXPLOCS   0x400
 all arglocs are specified explicitly More...
 
#define CHF_INITED   0x01
 is chain initialized? (valid only after lvar allocation) More...
 
#define CHF_REPLACED   0x02
 chain operands have been replaced? More...
 
#define CHF_OVER   0x04
 overlapped chain More...
 
#define CHF_FAKE   0x08
 fake chain created by widen_chains() More...
 
#define CHF_PASSTHRU   0x10
 pass-thru chain, must use the input variable to the block More...
 
#define CHF_TERM   0x20
 terminating chain; the variable does not survive across the block More...
 
#define SIZEOF_BLOCK_CHAINS   56
 
#define GCA_EMPTY   0x01
 include empty chains More...
 
#define GCA_SPEC   0x02
 include chains for special registers More...
 
#define GCA_ALLOC   0x04
 enumerate only allocated chains More...
 
#define GCA_NALLOC   0x08
 enumerate only non-allocated chains More...
 
#define GCA_OFIRST   0x10
 consider only chains of the first block More...
 
#define GCA_OLAST   0x20
 consider only chains of the last block More...
 
#define IPROP_OPTIONAL   0x0001
 optional instruction More...
 
#define IPROP_PERSIST   0x0002
 persistent insn; they are not destroyed More...
 
#define IPROP_WILDMATCH   0x0004
 match multiple insns More...
 
#define IPROP_CLNPOP   0x0008
 the purpose of the instruction is to clean stack (e.g. More...
 
#define IPROP_FPINSN   0x0010
 floating point insn More...
 
#define IPROP_FARCALL   0x0020
 call of a far function using push cs/call sequence More...
 
#define IPROP_TAILCALL   0x0040
 tail call More...
 
#define IPROP_ASSERT   0x0080
 assertion: usually mov #val, op. More...
 
#define IPROP_SPLIT   0x0700
 the instruction has been split: More...
 
#define IPROP_SPLIT1   0x0100
 into 1 byte More...
 
#define IPROP_SPLIT2   0x0200
 into 2 bytes More...
 
#define IPROP_SPLIT4   0x0300
 into 4 bytes More...
 
#define IPROP_SPLIT8   0x0400
 into 8 bytes More...
 
#define IPROP_COMBINED   0x0800
 insn has been modified because of a partial reference More...
 
#define IPROP_EXTSTX   0x1000
 this is m_ext propagated into m_stx More...
 
#define IPROP_IGNLOWSRC   0x2000
 low part of the instruction source operand has been created artificially (this bit is used only for 'and x, 80...') More...
 
#define IPROP_INV_JX   0x4000
 inverted conditional jump More...
 
#define IPROP_WAS_NORET   0x8000
 was noret icall More...
 
#define IPROP_MULTI_MOV   0x10000
 the minsn was generated as part of insn that moves multiple registers (example: STM on ARM may transfer multiple registers) More...
 
#define IPROP_DONT_PROP   0x20000
 may not propagate More...
 
#define IPROP_DONT_COMB   0x40000
 may not combine this instruction with others More...
 
#define IPROP_MBARRIER   0x80000
 this instruction acts as a memory barrier (instructions accessing memory may not be reordered past it) More...
 
#define IPROP_UNMERGED   0x100000
 'goto' instruction was transformed info 'call' More...
 
#define OPTI_ADDREXPRS   0x0001
 optimize all address expressions (&x+N; &x-&y) More...
 
#define OPTI_MINSTKREF   0x0002
 may update minstkref More...
 
#define OPTI_COMBINSNS   0x0004
 may combine insns (only for optimize_insn) More...
 
#define OPTI_NO_LDXOPT   0x0008
 the function is called after the propagation attempt, we do not optimize low/high(ldx) in this case More...
 
#define EQ_IGNSIZE   0x0001
 ignore source operand sizes More...
 
#define EQ_IGNCODE   0x0002
 ignore instruction opcodes More...
 
#define EQ_CMPDEST   0x0004
 compare instruction destinations More...
 
#define EQ_OPTINSN   0x0008
 optimize mop_d operands More...
 
#define NORET_IGNORE_WAS_NORET_ICALL   0x01
 
#define NORET_FORBID_ANALYSIS   0x02
 
#define MAXRANGE   bitrange_t(0, USHRT_MAX)
 
#define MBL_PRIV   0x0001
 private block - no instructions except the specified are accepted (used in patterns) More...
 
#define MBL_NONFAKE   0x0000
 regular block More...
 
#define MBL_FAKE   0x0002
 fake block More...
 
#define MBL_GOTO   0x0004
 this block is a goto target More...
 
#define MBL_TCAL   0x0008
 aritifical call block for tail calls More...
 
#define MBL_PUSH   0x0010
 needs "convert push/pop instructions" More...
 
#define MBL_DMT64   0x0020
 needs "demote 64bits" More...
 
#define MBL_COMB   0x0040
 needs "combine" pass More...
 
#define MBL_PROP   0x0080
 needs 'propagation' pass More...
 
#define MBL_DEAD   0x0100
 needs "eliminate deads" pass More...
 
#define MBL_LIST   0x0200
 use/def lists are ready (not dirty) More...
 
#define MBL_INCONST   0x0400
 inconsistent lists: we are building them More...
 
#define MBL_CALL   0x0800
 call information has been built More...
 
#define MBL_BACKPROP   0x1000
 performed backprop_cc More...
 
#define MBL_NORET   0x2000
 dead end block: doesn't return execution control More...
 
#define MBL_DSLOT   0x4000
 block for delay slot More...
 
#define MBL_VALRANGES   0x8000
 should optimize using value ranges More...
 
#define MBL_KEEP   0x10000
 do not remove even if unreachable More...
 
#define FD_BACKWARD   0x0000
 search direction More...
 
#define FD_FORWARD   0x0001
 search direction More...
 
#define FD_USE   0x0000
 look for use More...
 
#define FD_DEF   0x0002
 look for definition More...
 
#define FD_DIRTY   0x0004
 ignore possible implicit definitions by function calls and indirect memory access More...
 
#define VR_AT_START   0x0000
 get value ranges before the instruction or at the block start (if M is nullptr) More...
 
#define VR_AT_END   0x0001
 get value ranges after the instruction or at the block end, just after the last instruction (if M is nullptr) More...
 
#define VR_EXACT   0x0002
 find exact match. More...
 
#define MBA_PRCDEFS   0x00000001
 use precise defeas for chain-allocated lvars More...
 
#define MBA_NOFUNC   0x00000002
 function is not present, addresses might be wrong More...
 
#define MBA_PATTERN   0x00000004
 microcode pattern, callinfo is present More...
 
#define MBA_LOADED   0x00000008
 loaded gdl, no instructions (debugging) More...
 
#define MBA_RETFP   0x00000010
 function returns floating point value More...
 
#define MBA_SPLINFO   0x00000020
 (final_type ? idb_spoiled : spoiled_regs) is valid More...
 
#define MBA_PASSREGS   0x00000040
 has mcallinfo_t::pass_regs More...
 
#define MBA_THUNK   0x00000080
 thunk function More...
 
#define MBA_CMNSTK   0x00000100
 stkvars+stkargs should be considered as one area More...
 
#define MBA_PREOPT   0x00000200
 preoptimization stage complete More...
 
#define MBA_CMBBLK   0x00000400
 request to combine blocks More...
 
#define MBA_ASRTOK   0x00000800
 assertions have been generated More...
 
#define MBA_CALLS   0x00001000
 callinfo has been built More...
 
#define MBA_ASRPROP   0x00002000
 assertion have been propagated More...
 
#define MBA_SAVRST   0x00004000
 save-restore analysis has been performed More...
 
#define MBA_RETREF   0x00008000
 return type has been refined More...
 
#define MBA_GLBOPT   0x00010000
 microcode has been optimized globally More...
 
#define MBA_LVARS0   0x00040000
 lvar pre-allocation has been performed More...
 
#define MBA_LVARS1   0x00080000
 lvar real allocation has been performed More...
 
#define MBA_DELPAIRS   0x00100000
 pairs have been deleted once More...
 
#define MBA_CHVARS   0x00200000
 can verify chain varnums More...
 
#define MBA_SHORT   0x00400000
 use short display More...
 
#define MBA_COLGDL   0x00800000
 display graph after each reduction More...
 
#define MBA_INSGDL   0x01000000
 display instruction in graphs More...
 
#define MBA_NICE   0x02000000
 apply transformations to c code More...
 
#define MBA_REFINE   0x04000000
 may refine return value size More...
 
#define MBA_WINGR32   0x10000000
 use wingraph32 More...
 
#define MBA_NUMADDR   0x20000000
 display definition addresses for numbers More...
 
#define MBA_VALNUM   0x40000000
 display value numbers More...
 
#define MBA_INITIAL_FLAGS
 
#define MBA2_LVARNAMES_OK   0x00000001
 may verify lvar_names? More...
 
#define MBA2_LVARS_RENAMED   0x00000002
 accept empty names now? More...
 
#define MBA2_OVER_CHAINS   0x00000004
 has overlapped chains? More...
 
#define MBA2_VALRNG_DONE   0x00000008
 calculated valranges? More...
 
#define MBA2_IS_CTR   0x00000010
 is constructor? More...
 
#define MBA2_IS_DTR   0x00000020
 is destructor? More...
 
#define MBA2_ARGIDX_OK   0x00000040
 may verify input argument list? More...
 
#define MBA2_NO_DUP_CALLS   0x00000080
 forbid multiple calls with the same ea More...
 
#define MBA2_NO_DUP_LVARS   0x00000100
 forbid multiple lvars with the same ea More...
 
#define MBA2_UNDEF_RETVAR   0x00000200
 return value is undefined More...
 
#define MBA2_ARGIDX_SORTED   0x00000400
 args finally sorted according to ABI (e.g. More...
 
#define MBA2_CODE16_BIT   0x00000800
 the code16 bit removed More...
 
#define MBA2_STACK_RETVAL   0x00001000
 the return value is on the stack More...
 
#define MBA2_HAS_OUTLINES   0x00002000
 calls to outlined code have been inlined More...
 
#define MBA2_NO_FRAME   0x00004000
 do not use function frame info (only snippet mode) More...
 
#define MBA2_DONT_VERIFY   0x80000000
 Do not verify microcode. More...
 
#define MBA2_INITIAL_FLAGS   (MBA2_LVARNAMES_OK|MBA2_LVARS_RENAMED)
 
#define MBA2_ALL_FLAGS   0x00007FFF
 
#define NALT_VD   2
 this index is not used by ida More...
 
#define LOCOPT_ALL   0x0001
 redo optimization for all blocks. More...
 
#define LOCOPT_REFINE   0x0002
 refine return type, ok to fail More...
 
#define LOCOPT_REFINE2   0x0004
 refine return type, try harder More...
 
#define ACFL_LOCOPT   0x01
 perform local propagation (requires ACFL_BLKOPT) More...
 
#define ACFL_BLKOPT   0x02
 perform interblock transformations More...
 
#define ACFL_GLBPROP   0x04
 perform global propagation More...
 
#define ACFL_GLBDEL   0x08
 perform dead code eliminition More...
 
#define ACFL_GUESS   0x10
 may guess calling conventions More...
 
#define CPBLK_FAST   0x0000
 do not update minbstkref and minbargref More...
 
#define CPBLK_MINREF   0x0001
 update minbstkref and minbargref More...
 
#define CPBLK_OPTJMP   0x0002
 del the jump insn at the end of the block if it becomes useless More...
 
#define OPF_REUSE   0x00
 reuse existing window More...
 
#define OPF_NEW_WINDOW   0x01
 open new window More...
 
#define OPF_REUSE_ACTIVE   0x02
 reuse existing window, only if the currently active widget is a pseudocode view More...
 
#define OPF_NO_WAIT   0x08
 do not display waitbox if decompilation happens More...
 
#define OPF_WINDOW_MGMT_MASK   0x07
 
#define VDRUN_NEWFILE   0x00000000
 Create a new file or overwrite existing file. More...
 
#define VDRUN_APPEND   0x00000001
 Create a new file or append to existing file. More...
 
#define VDRUN_ONLYNEW   0x00000002
 Fail if output file already exists. More...
 
#define VDRUN_SILENT   0x00000004
 Silent decompilation. More...
 
#define VDRUN_SENDIDB   0x00000008
 Send problematic databases to hex-rays.com. More...
 
#define VDRUN_MAYSTOP   0x00000010
 The user can cancel decompilation. More...
 
#define VDRUN_CMDLINE   0x00000020
 Called from ida's command line. More...
 
#define VDRUN_STATS   0x00000040
 Print statistics into vd_stats.txt. More...
 
#define VDRUN_LUMINA   0x00000080
 Use lumina server. More...
 
#define GCO_STK   0x0000
 a stack variable More...
 
#define GCO_REG   0x0001
 is register? otherwise a stack variable More...
 
#define GCO_USE   0x0002
 is source operand? More...
 
#define GCO_DEF   0x0004
 is destination operand? More...
 
#define CV_FAST   0x0000
 do not maintain parent information More...
 
#define CV_PRUNE   0x0001
 this bit is set by visit...() to prune the walk More...
 
#define CV_PARENTS   0x0002
 maintain parent information More...
 
#define CV_POST   0x0004
 call the leave...() functions More...
 
#define CV_RESTART   0x0008
 restart enumeration at the top expr (apply_to_exprs) More...
 
#define CV_INSNS   0x0010
 visit only statements, prune all expressions do not use before the final ctree maturity because expressions may contain statements at intermediate stages (see cot_insn). More...
 
#define EXFL_CPADONE   0x0001
 pointer arithmetic correction done More...
 
#define EXFL_LVALUE   0x0002
 expression is lvalue even if it doesn't look like it More...
 
#define EXFL_FPOP   0x0004
 floating point operation More...
 
#define EXFL_ALONE   0x0008
 standalone helper More...
 
#define EXFL_CSTR   0x0010
 string literal More...
 
#define EXFL_PARTIAL   0x0020
 type of the expression is considered partial More...
 
#define EXFL_UNDEF   0x0040
 expression uses undefined value More...
 
#define EXFL_JUMPOUT   0x0080
 jump out-of-function More...
 
#define EXFL_VFTABLE   0x0100
 is ptr to vftable (used for cot_memptr, cot_memref) More...
 
#define EXFL_ALL   0x01FF
 all currently defined bits More...
 
#define CFL_FINAL   0x0001
 call type is final, should not be changed More...
 
#define CFL_HELPER   0x0002
 created from a decompiler helper function More...
 
#define CFL_NORET   0x0004
 call does not return More...
 
#define ANCHOR_INDEX   0x1FFFFFFF
 
#define ANCHOR_MASK   0xC0000000
 
#define ANCHOR_CITEM   0x00000000
 c-tree item More...
 
#define ANCHOR_LVAR   0x40000000
 declaration of local variable More...
 
#define ANCHOR_ITP   0x80000000
 item type preciser More...
 
#define ANCHOR_BLKCMT   0x20000000
 block comment (for ctree items) More...
 
#define GLN_CURRENT   0x01
 get label of the current item More...
 
#define GLN_GOTO_TARGET   0x02
 get goto target More...
 
#define GLN_ALL   0x03
 get both More...
 
#define INS_EPILOG   ((cinsn_t *)1)
 
#define CIT_COLLAPSED   0x0001
 display ctree item in collapsed form More...
 
#define CFS_BOUNDS   0x0001
 'eamap' and 'boundaries' are ready More...
 
#define CFS_TEXT   0x0002
 'sv' is ready (and hdrlines) More...
 
#define CFS_LVARS_HIDDEN   0x0004
 local variable definitions are collapsed More...
 
#define CFS_LOCKED   0x0008
 cfunc is temporarily locked More...
 
#define DECOMP_NO_WAIT   0x0001
 do not display waitbox More...
 
#define DECOMP_NO_CACHE   0x0002
 do not use decompilation cache More...
 
#define DECOMP_NO_FRAME   0x0004
 do not use function frame info (only snippet mode) More...
 
#define DECOMP_WARNINGS   0x0008
 display warnings in the output window More...
 
#define DECOMP_ALL_BLKS   0x0010
 generate microcode for unreachable blocks More...
 
#define DECOMP_NO_HIDE   0x0020
 do not close display waitbox. see close_hexrays_waitboxes() More...
 
#define DECOMP_NO_XREFS   0x0040
 do not update global xrefs cache More...
 
#define VDUI_VISIBLE   0x0001
 is visible? More...
 
#define VDUI_VALID   0x0002
 is valid? More...
 

Typedefs

typedef std::set< voff_tvoff_set_t
 
typedef int mreg_t
 Micro register. More...
 
typedef std::set< ea_t > easet_t
 
typedef std::set< minsn_t * > minsn_ptr_set_t
 
typedef std::set< qstring > strings_t
 
typedef qvector< minsn_t * > minsnptrs_t
 
typedef qvector< mop_t * > mopptrs_t
 
typedef qvector< mop_tmopvec_t
 
typedef qvector< uint64 > uint64vec_t
 
typedef qvector< mreg_tmregvec_t
 
typedef qrefcnt_t< cfunc_tcfuncptr_t
 
typedef uint64 uvlr_t
 
typedef int64 svlr_t
 
typedef int maymust_t
 
typedef std::map< operand_locator_t, number_format_tuser_numforms_t
 
typedef qvector< lvar_saved_info_tlvar_saved_infos_t
 
typedef std::map< lvar_locator_t, lvar_locator_tlvar_mapping_t
 Local variable mapping (is used to merge variables) More...
 
typedef std::map< ea_t, udcall_tudcall_map_t
 
typedef size_t mbitmap_t
 
typedef qvector< bitset_tarray_of_bitsets
 
typedef ivl_tpl< uval_t > uval_ivl_t
 
typedef ivlset_tpl< ivl_t, uval_t > uval_ivl_ivlset_t
 Set of address intervals. More...
 
typedef qvector< ivlset_tarray_of_ivlsets
 
typedef qvector< mlist_tmlistvec_t
 
typedef uint8 mopt_t
 Instruction operand types. More...
 
typedef qvector< mcallarg_tmcallargs_t
 
typedef qvector< block_chains_tblock_chains_vec_t
 Graph chains. More...
 
typedef qvector< hexwarn_thexwarns_t
 
using mbl_array_t = mba_t
 
typedef qvector< citem_t * > ctree_items_t
 Vector of parents. More...
 
typedef ctree_items_t parents_t
 
typedef std::map< treeloc_t, citem_cmt_tuser_cmts_t
 
typedef std::map< citem_locator_t, int32 > user_iflags_t
 
typedef std::map< ea_t, intvec_t > user_unions_t
 
typedef qvector< cinsn_t * > cinsnptrvec_t
 Vector of pointers to statements. More...
 
typedef qlist< cinsn_tcinsn_list_t
 
typedef std::map< int, qstring > user_labels_t
 
typedef std::map< ea_t, cinsnptrvec_teamap_t
 
typedef std::map< cinsn_t *, rangeset_t > boundaries_t
 
typedef qvector< cfuncptr_t > cfuncptrs_t
 
typedef void * hexdsp_t(int code,...)
 Hex-Rays decompiler dispatcher. More...
 
typedef ssize_t hexrays_cb_t(void *ud, hexrays_event_t event, va_list va)
 Handler of decompiler events. More...
 
typedef qstack< history_item_thistory_t
 Navigation history. More...
 
typedef int cmt_type_t
 Comment types. More...
 
typedef qvector< ui_stroff_op_tui_stroff_ops_t
 
typedef size_t iterator_word
 

Enumerations

enum  { MAX_VLR_SIZE = sizeof(uvlr_t) }
 
enum  cmpop_t {
  CMP_NZ , CMP_Z , CMP_AE , CMP_B ,
  CMP_A , CMP_BE , CMP_GT , CMP_GE ,
  CMP_LT , CMP_LE
}
 
enum  merror_t {
  MERR_OK = 0 , MERR_BLOCK = 1 , MERR_INTERR = -1 , MERR_INSN = -2 ,
  MERR_MEM = -3 , MERR_BADBLK = -4 , MERR_BADSP = -5 , MERR_PROLOG = -6 ,
  MERR_SWITCH = -7 , MERR_EXCEPTION = -8 , MERR_HUGESTACK = -9 , MERR_LVARS = -10 ,
  MERR_BITNESS = -11 , MERR_BADCALL = -12 , MERR_BADFRAME = -13 , MERR_UNKTYPE = -14 ,
  MERR_BADIDB = -15 , MERR_SIZEOF = -16 , MERR_REDO = -17 , MERR_CANCELED = -18 ,
  MERR_RECDEPTH = -19 , MERR_OVERLAP = -20 , MERR_PARTINIT = -21 , MERR_COMPLEX = -22 ,
  MERR_LICENSE = -23 , MERR_ONLY32 = -24 , MERR_ONLY64 = -25 , MERR_BUSY = -26 ,
  MERR_FARPTR = -27 , MERR_EXTERN = -28 , MERR_FUNCSIZE = -29 , MERR_BADRANGES = -30 ,
  MERR_BADARCH = -31 , MERR_DSLOT = -32 , MERR_STOP = -33 , MERR_CLOUD = -34 ,
  MERR_MAX_ERR = 34 , MERR_LOOP = -35
}
 
enum  mcode_t {
  m_nop = 0x00 , m_stx = 0x01 , m_ldx = 0x02 , m_ldc = 0x03 ,
  m_mov = 0x04 , m_neg = 0x05 , m_lnot = 0x06 , m_bnot = 0x07 ,
  m_xds = 0x08 , m_xdu = 0x09 , m_low = 0x0A , m_high = 0x0B ,
  m_add = 0x0C , m_sub = 0x0D , m_mul = 0x0E , m_udiv = 0x0F ,
  m_sdiv = 0x10 , m_umod = 0x11 , m_smod = 0x12 , m_or = 0x13 ,
  m_and = 0x14 , m_xor = 0x15 , m_shl = 0x16 , m_shr = 0x17 ,
  m_sar = 0x18 , m_cfadd = 0x19 , m_ofadd = 0x1A , m_cfshl = 0x1B ,
  m_cfshr = 0x1C , m_sets = 0x1D , m_seto = 0x1E , m_setp = 0x1F ,
  m_setnz = 0x20 , m_setz = 0x21 , m_setae = 0x22 , m_setb = 0x23 ,
  m_seta = 0x24 , m_setbe = 0x25 , m_setg = 0x26 , m_setge = 0x27 ,
  m_setl = 0x28 , m_setle = 0x29 , m_jcnd = 0x2A , m_jnz = 0x2B ,
  m_jz = 0x2C , m_jae = 0x2D , m_jb = 0x2E , m_ja = 0x2F ,
  m_jbe = 0x30 , m_jg = 0x31 , m_jge = 0x32 , m_jl = 0x33 ,
  m_jle = 0x34 , m_jtbl = 0x35 , m_ijmp = 0x36 , m_goto = 0x37 ,
  m_call = 0x38 , m_icall = 0x39 , m_ret = 0x3A , m_push = 0x3B ,
  m_pop = 0x3C , m_und = 0x3D , m_ext = 0x3E , m_f2i = 0x3F ,
  m_f2u = 0x40 , m_i2f = 0x41 , m_u2f = 0x42 , m_f2f = 0x43 ,
  m_fneg = 0x44 , m_fadd = 0x45 , m_fsub = 0x46 , m_fmul = 0x47 ,
  m_fdiv = 0x48
}
 
enum  type_source_t {
  GUESSED_NONE , GUESSED_WEAK , GUESSED_FUNC , GUESSED_DATA ,
  TS_NOELL = 0x8000000 , TS_SHRINK = 0x4000000 , TS_DONTREF = 0x2000000 , TS_MASK = 0xE000000
}
 Type source (where the type information comes from) More...
 
enum  side_effect_t {
  NO_SIDEFF , WITH_SIDEFF , ONLY_SIDEFF , ANY_REGSIZE = 0x80 ,
  ANY_FPSIZE = 0x100
}
 How to handle side effect of change_size() Sometimes we need to create a temporary operand and change its size in order to check some hypothesis. More...
 
enum  funcrole_t {
  ROLE_UNK , ROLE_EMPTY , ROLE_MEMSET , ROLE_MEMSET32 ,
  ROLE_MEMSET64 , ROLE_MEMCPY , ROLE_STRCPY , ROLE_STRLEN ,
  ROLE_STRCAT , ROLE_TAIL , ROLE_BUG , ROLE_ALLOCA ,
  ROLE_BSWAP , ROLE_PRESENT , ROLE_CONTAINING_RECORD , ROLE_FASTFAIL ,
  ROLE_READFLAGS , ROLE_IS_MUL_OK , ROLE_SATURATED_MUL , ROLE_BITTEST ,
  ROLE_BITTESTANDSET , ROLE_BITTESTANDRESET , ROLE_BITTESTANDCOMPLEMENT , ROLE_VA_ARG ,
  ROLE_VA_COPY , ROLE_VA_START , ROLE_VA_END , ROLE_ROL ,
  ROLE_ROR , ROLE_CFSUB3 , ROLE_OFSUB3 , ROLE_ABS ,
  ROLE_3WAYCMP0 , ROLE_3WAYCMP1 , ROLE_WMEMCPY , ROLE_WMEMSET ,
  ROLE_WCSCPY , ROLE_WCSLEN , ROLE_WCSCAT , ROLE_SSE_CMP4 ,
  ROLE_SSE_CMP8
}
 Function roles. More...
 
enum  mblock_type_t {
  BLT_NONE = 0 , BLT_STOP = 1 , BLT_0WAY = 2 , BLT_1WAY = 3 ,
  BLT_2WAY = 4 , BLT_NWAY = 5 , BLT_XTRN = 6
}
 Basic block types. More...
 
enum  warnid_t {
  WARN_VARARG_REGS , WARN_ILL_PURGED , WARN_ILL_FUNCTYPE , WARN_VARARG_TCAL ,
  WARN_VARARG_NOSTK , WARN_VARARG_MANY , WARN_ADDR_OUTARGS , WARN_DEP_UNK_CALLS ,
  WARN_ILL_ELLIPSIS , WARN_GUESSED_TYPE , WARN_EXP_LINVAR , WARN_WIDEN_CHAINS ,
  WARN_BAD_PURGED , WARN_CBUILD_LOOPS , WARN_NO_SAVE_REST , WARN_ODD_INPUT_REG ,
  WARN_ODD_ADDR_USE , WARN_MUST_RET_FP , WARN_ILL_FPU_STACK , WARN_SELFREF_PROP ,
  WARN_WOULD_OVERLAP , WARN_ARRAY_INARG , WARN_MAX_ARGS , WARN_BAD_FIELD_TYPE ,
  WARN_WRITE_CONST , WARN_BAD_RETVAR , WARN_FRAG_LVAR , WARN_HUGE_STKOFF ,
  WARN_UNINITED_REG , WARN_FIXED_MACRO , WARN_WRONG_VA_OFF , WARN_CR_NOFIELD ,
  WARN_CR_BADOFF , WARN_BAD_STROFF , WARN_BAD_VARSIZE , WARN_UNSUPP_REG ,
  WARN_UNALIGNED_ARG , WARN_BAD_STD_TYPE , WARN_BAD_CALL_SP , WARN_MISSED_SWITCH ,
  WARN_BAD_SP , WARN_BAD_STKPNT , WARN_UNDEF_LVAR , WARN_JUMPOUT ,
  WARN_BAD_VALRNG , WARN_BAD_SHADOW , WARN_OPT_VALRNG , WARN_RET_LOCREF ,
  WARN_BAD_MAPDST , WARN_BAD_INSN , WARN_ODD_ABI , WARN_UNBALANCED_STACK ,
  WARN_OPT_VALRNG2 , WARN_OPT_VALRNG3 , WARN_OPT_USELESS_JCND , WARN_MAX
}
 Warning ids. More...
 
enum  mba_maturity_t {
  MMAT_ZERO , MMAT_GENERATED , MMAT_PREOPTIMIZED , MMAT_LOCOPT ,
  MMAT_CALLS , MMAT_GLBOPT1 , MMAT_GLBOPT2 , MMAT_GLBOPT3 ,
  MMAT_LVARS
}
 Microcode maturity levels. More...
 
enum  memreg_index_t {
  MMIDX_GLBLOW , MMIDX_LVARS , MMIDX_RETADDR , MMIDX_SHADOW ,
  MMIDX_ARGS , MMIDX_GLBHIGH
}
 < memory region types More...
 
enum  gctype_t {
  GC_REGS_AND_STKVARS , GC_ASR , GC_XDSU , GC_END ,
  GC_DIRTY_ALL = (1 << (2*GC_END))-1
}
 Kind of use-def and def-use chains. More...
 
enum  ctype_t {
  cot_empty = 0 , cot_comma = 1 , cot_asg = 2 , cot_asgbor = 3 ,
  cot_asgxor = 4 , cot_asgband = 5 , cot_asgadd = 6 , cot_asgsub = 7 ,
  cot_asgmul = 8 , cot_asgsshr = 9 , cot_asgushr = 10 , cot_asgshl = 11 ,
  cot_asgsdiv = 12 , cot_asgudiv = 13 , cot_asgsmod = 14 , cot_asgumod = 15 ,
  cot_tern = 16 , cot_lor = 17 , cot_land = 18 , cot_bor = 19 ,
  cot_xor = 20 , cot_band = 21 , cot_eq = 22 , cot_ne = 23 ,
  cot_sge = 24 , cot_uge = 25 , cot_sle = 26 , cot_ule = 27 ,
  cot_sgt = 28 , cot_ugt = 29 , cot_slt = 30 , cot_ult = 31 ,
  cot_sshr = 32 , cot_ushr = 33 , cot_shl = 34 , cot_add = 35 ,
  cot_sub = 36 , cot_mul = 37 , cot_sdiv = 38 , cot_udiv = 39 ,
  cot_smod = 40 , cot_umod = 41 , cot_fadd = 42 , cot_fsub = 43 ,
  cot_fmul = 44 , cot_fdiv = 45 , cot_fneg = 46 , cot_neg = 47 ,
  cot_cast = 48 , cot_lnot = 49 , cot_bnot = 50 , cot_ptr = 51 ,
  cot_ref = 52 , cot_postinc = 53 , cot_postdec = 54 , cot_preinc = 55 ,
  cot_predec = 56 , cot_call = 57 , cot_idx = 58 , cot_memref = 59 ,
  cot_memptr = 60 , cot_num = 61 , cot_fnum = 62 , cot_str = 63 ,
  cot_obj = 64 , cot_var = 65 , cot_insn = 66 , cot_sizeof = 67 ,
  cot_helper = 68 , cot_type = 69 , cot_last = cot_type , cit_empty = 70 ,
  cit_block = 71 , cit_expr = 72 , cit_if = 73 , cit_for = 74 ,
  cit_while = 75 , cit_do = 76 , cit_switch = 77 , cit_break = 78 ,
  cit_continue = 79 , cit_return = 80 , cit_goto = 81 , cit_asm = 82 ,
  cit_end
}
 Ctree item code. More...
 
enum  ctree_maturity_t {
  CMAT_ZERO , CMAT_BUILT , CMAT_TRANS1 , CMAT_NICE ,
  CMAT_TRANS2 , CMAT_CPA , CMAT_TRANS3 , CMAT_CASTED ,
  CMAT_FINAL
}
 Ctree maturity level. More...
 
enum  item_preciser_t {
  ITP_EMPTY , ITP_ARG1 , ITP_ARG64 = ITP_ARG1+63 , ITP_BRACE1 ,
  ITP_INNER_LAST = ITP_BRACE1 , ITP_ASM , ITP_ELSE , ITP_DO ,
  ITP_SEMI , ITP_CURLY1 , ITP_CURLY2 , ITP_BRACE2 ,
  ITP_COLON , ITP_BLOCK1 , ITP_BLOCK2 , ITP_CASE = 0x40000000 ,
  ITP_SIGN = 0x20000000
}
 Comment item preciser. More...
 
enum  cmt_retrieval_type_t { RETRIEVE_ONCE , RETRIEVE_ALWAYS }
 Comment retrieval type. More...
 
enum  use_curly_t { CALC_CURLY_BRACES , NO_CURLY_BRACES , USE_CURLY_BRACES }
 Should curly braces be printed? More...
 
enum  cursor_item_type_t {
  VDI_NONE , VDI_EXPR , VDI_LVAR , VDI_FUNC ,
  VDI_TAIL
}
 Type of the cursor item. More...
 
enum  allow_unused_labels_t { FORBID_UNUSED_LABELS = 0 , ALLOW_UNUSED_LABELS = 1 }
 Unused label disposition. More...
 
enum  input_device_t { USE_KEYBOARD = 0 , USE_MOUSE = 1 }
 Type of the input device. More...
 
enum  hexcall_t {
  hx_user_numforms_begin , hx_user_numforms_end , hx_user_numforms_next , hx_user_numforms_prev ,
  hx_user_numforms_first , hx_user_numforms_second , hx_user_numforms_find , hx_user_numforms_insert ,
  hx_user_numforms_erase , hx_user_numforms_clear , hx_user_numforms_size , hx_user_numforms_free ,
  hx_user_numforms_new , hx_lvar_mapping_begin , hx_lvar_mapping_end , hx_lvar_mapping_next ,
  hx_lvar_mapping_prev , hx_lvar_mapping_first , hx_lvar_mapping_second , hx_lvar_mapping_find ,
  hx_lvar_mapping_insert , hx_lvar_mapping_erase , hx_lvar_mapping_clear , hx_lvar_mapping_size ,
  hx_lvar_mapping_free , hx_lvar_mapping_new , hx_udcall_map_begin , hx_udcall_map_end ,
  hx_udcall_map_next , hx_udcall_map_prev , hx_udcall_map_first , hx_udcall_map_second ,
  hx_udcall_map_find , hx_udcall_map_insert , hx_udcall_map_erase , hx_udcall_map_clear ,
  hx_udcall_map_size , hx_udcall_map_free , hx_udcall_map_new , hx_user_cmts_begin ,
  hx_user_cmts_end , hx_user_cmts_next , hx_user_cmts_prev , hx_user_cmts_first ,
  hx_user_cmts_second , hx_user_cmts_find , hx_user_cmts_insert , hx_user_cmts_erase ,
  hx_user_cmts_clear , hx_user_cmts_size , hx_user_cmts_free , hx_user_cmts_new ,
  hx_user_iflags_begin , hx_user_iflags_end , hx_user_iflags_next , hx_user_iflags_prev ,
  hx_user_iflags_first , hx_user_iflags_second , hx_user_iflags_find , hx_user_iflags_insert ,
  hx_user_iflags_erase , hx_user_iflags_clear , hx_user_iflags_size , hx_user_iflags_free ,
  hx_user_iflags_new , hx_user_unions_begin , hx_user_unions_end , hx_user_unions_next ,
  hx_user_unions_prev , hx_user_unions_first , hx_user_unions_second , hx_user_unions_find ,
  hx_user_unions_insert , hx_user_unions_erase , hx_user_unions_clear , hx_user_unions_size ,
  hx_user_unions_free , hx_user_unions_new , hx_user_labels_begin , hx_user_labels_end ,
  hx_user_labels_next , hx_user_labels_prev , hx_user_labels_first , hx_user_labels_second ,
  hx_user_labels_find , hx_user_labels_insert , hx_user_labels_erase , hx_user_labels_clear ,
  hx_user_labels_size , hx_user_labels_free , hx_user_labels_new , hx_eamap_begin ,
  hx_eamap_end , hx_eamap_next , hx_eamap_prev , hx_eamap_first ,
  hx_eamap_second , hx_eamap_find , hx_eamap_insert , hx_eamap_erase ,
  hx_eamap_clear , hx_eamap_size , hx_eamap_free , hx_eamap_new ,
  hx_boundaries_begin , hx_boundaries_end , hx_boundaries_next , hx_boundaries_prev ,
  hx_boundaries_first , hx_boundaries_second , hx_boundaries_find , hx_boundaries_insert ,
  hx_boundaries_erase , hx_boundaries_clear , hx_boundaries_size , hx_boundaries_free ,
  hx_boundaries_new , hx_block_chains_begin , hx_block_chains_end , hx_block_chains_next ,
  hx_block_chains_prev , hx_block_chains_get , hx_block_chains_find , hx_block_chains_insert ,
  hx_block_chains_erase , hx_block_chains_clear , hx_block_chains_size , hx_block_chains_free ,
  hx_block_chains_new , hx_valrng_t_clear , hx_valrng_t_copy , hx_valrng_t_assign ,
  hx_valrng_t_compare , hx_valrng_t_set_eq , hx_valrng_t_set_cmp , hx_valrng_t_reduce_size ,
  hx_valrng_t_intersect_with , hx_valrng_t_unite_with , hx_valrng_t_inverse , hx_valrng_t_has ,
  hx_valrng_t_print , hx_valrng_t_dstr , hx_valrng_t_cvt_to_single_value , hx_valrng_t_cvt_to_cmp ,
  hx_get_merror_desc , hx_reg2mreg , hx_mreg2reg , hx_install_optinsn_handler ,
  hx_remove_optinsn_handler , hx_install_optblock_handler , hx_remove_optblock_handler , hx_must_mcode_close_block ,
  hx_is_mcode_propagatable , hx_negate_mcode_relation , hx_swap_mcode_relation , hx_get_signed_mcode ,
  hx_get_unsigned_mcode , hx_mcode_modifies_d , hx_operand_locator_t_compare , hx_vd_printer_t_print ,
  hx_file_printer_t_print , hx_qstring_printer_t_print , hx_dstr , hx_is_type_correct ,
  hx_is_small_udt , hx_is_nonbool_type , hx_is_bool_type , hx_partial_type_num ,
  hx_get_float_type , hx_get_int_type_by_width_and_sign , hx_get_unk_type , hx_dummy_ptrtype ,
  hx_get_member_type , hx_make_pointer , hx_create_typedef , hx_get_type ,
  hx_set_type , hx_vdloc_t_dstr , hx_vdloc_t_compare , hx_vdloc_t_is_aliasable ,
  hx_print_vdloc , hx_arglocs_overlap , hx_lvar_locator_t_compare , hx_lvar_locator_t_dstr ,
  hx_lvar_t_dstr , hx_lvar_t_is_promoted_arg , hx_lvar_t_accepts_type , hx_lvar_t_set_lvar_type ,
  hx_lvar_t_set_width , hx_lvar_t_append_list_ , hx_lvars_t_find_stkvar , hx_lvars_t_find ,
  hx_lvars_t_find_lvar , hx_restore_user_lvar_settings , hx_save_user_lvar_settings , hx_modify_user_lvars ,
  hx_restore_user_defined_calls , hx_save_user_defined_calls , hx_parse_user_call , hx_convert_to_user_call ,
  hx_install_microcode_filter , hx_udc_filter_t_init , hx_udc_filter_t_apply , hx_bitset_t_bitset_t ,
  hx_bitset_t_copy , hx_bitset_t_add , hx_bitset_t_add_ , hx_bitset_t_add__ ,
  hx_bitset_t_sub , hx_bitset_t_sub_ , hx_bitset_t_sub__ , hx_bitset_t_cut_at ,
  hx_bitset_t_shift_down , hx_bitset_t_has , hx_bitset_t_has_all , hx_bitset_t_has_any ,
  hx_bitset_t_dstr , hx_bitset_t_empty , hx_bitset_t_count , hx_bitset_t_count_ ,
  hx_bitset_t_last , hx_bitset_t_fill_with_ones , hx_bitset_t_has_common , hx_bitset_t_intersect ,
  hx_bitset_t_is_subset_of , hx_bitset_t_compare , hx_bitset_t_goup , hx_ivl_t_dstr ,
  hx_ivl_t_compare , hx_ivlset_t_add , hx_ivlset_t_add_ , hx_ivlset_t_addmasked ,
  hx_ivlset_t_sub , hx_ivlset_t_sub_ , hx_ivlset_t_has_common , hx_ivlset_t_print ,
  hx_ivlset_t_dstr , hx_ivlset_t_count , hx_ivlset_t_has_common_ , hx_ivlset_t_contains ,
  hx_ivlset_t_includes , hx_ivlset_t_intersect , hx_ivlset_t_compare , hx_get_mreg_name ,
  hx_rlist_t_print , hx_rlist_t_dstr , hx_mlist_t_addmem , hx_mlist_t_print ,
  hx_mlist_t_dstr , hx_mlist_t_compare , hx_lvar_ref_t_compare , hx_lvar_ref_t_var ,
  hx_stkvar_ref_t_compare , hx_stkvar_ref_t_get_stkvar , hx_fnumber_t_print , hx_fnumber_t_dstr ,
  hx_mop_t_copy , hx_mop_t_assign , hx_mop_t_swap , hx_mop_t_erase ,
  hx_mop_t_print , hx_mop_t_dstr , hx_mop_t_create_from_mlist , hx_mop_t_create_from_ivlset ,
  hx_mop_t_create_from_vdloc , hx_mop_t_create_from_scattered_vdloc , hx_mop_t_create_from_insn , hx_mop_t_make_number ,
  hx_mop_t_make_fpnum , hx_mop_t_make_reg_pair , hx_mop_t_make_helper , hx_mop_t_is_bit_reg ,
  hx_mop_t_may_use_aliased_memory , hx_mop_t_is01 , hx_mop_t_is_sign_extended_from , hx_mop_t_is_zero_extended_from ,
  hx_mop_t_equal_mops , hx_mop_t_lexcompare , hx_mop_t_for_all_ops , hx_mop_t_for_all_scattered_submops ,
  hx_mop_t_is_constant , hx_mop_t_get_stkoff , hx_mop_t_make_low_half , hx_mop_t_make_high_half ,
  hx_mop_t_make_first_half , hx_mop_t_make_second_half , hx_mop_t_shift_mop , hx_mop_t_change_size ,
  hx_mop_t_preserve_side_effects , hx_mop_t_apply_ld_mcode , hx_mcallarg_t_print , hx_mcallarg_t_dstr ,
  hx_mcallarg_t_set_regarg , hx_mcallinfo_t_lexcompare , hx_mcallinfo_t_set_type , hx_mcallinfo_t_get_type ,
  hx_mcallinfo_t_print , hx_mcallinfo_t_dstr , hx_mcases_t_compare , hx_mcases_t_print ,
  hx_mcases_t_dstr , hx_vivl_t_extend_to_cover , hx_vivl_t_intersect , hx_vivl_t_print ,
  hx_vivl_t_dstr , hx_chain_t_print , hx_chain_t_dstr , hx_chain_t_append_list_ ,
  hx_block_chains_t_get_chain , hx_block_chains_t_print , hx_block_chains_t_dstr , hx_graph_chains_t_for_all_chains ,
  hx_graph_chains_t_release , hx_minsn_t_init , hx_minsn_t_copy , hx_minsn_t_swap ,
  hx_minsn_t_print , hx_minsn_t_dstr , hx_minsn_t_setaddr , hx_minsn_t_optimize_subtree ,
  hx_minsn_t_for_all_ops , hx_minsn_t_for_all_insns , hx_minsn_t__make_nop , hx_minsn_t_equal_insns ,
  hx_minsn_t_lexcompare , hx_minsn_t_is_noret_call , hx_minsn_t_is_helper , hx_minsn_t_find_call ,
  hx_minsn_t_has_side_effects , hx_minsn_t_find_opcode , hx_minsn_t_find_ins_op , hx_minsn_t_find_num_op ,
  hx_minsn_t_modifies_d , hx_minsn_t_is_between , hx_minsn_t_may_use_aliased_memory , hx_getf_reginsn ,
  hx_getb_reginsn , hx_mblock_t_init , hx_mblock_t_print , hx_mblock_t_dump ,
  hx_mblock_t_vdump_block , hx_mblock_t_insert_into_block , hx_mblock_t_remove_from_block , hx_mblock_t_for_all_insns ,
  hx_mblock_t_for_all_ops , hx_mblock_t_for_all_uses , hx_mblock_t_optimize_insn , hx_mblock_t_optimize_block ,
  hx_mblock_t_build_lists , hx_mblock_t_append_use_list , hx_mblock_t_append_def_list , hx_mblock_t_build_use_list ,
  hx_mblock_t_build_def_list , hx_mblock_t_find_first_use , hx_mblock_t_find_redefinition , hx_mblock_t_is_rhs_redefined ,
  hx_mblock_t_find_access , hx_mblock_t_get_valranges , hx_mba_t_idaloc2vd , hx_mba_t_vd2idaloc ,
  hx_mba_t_term , hx_mba_t_optimize_local , hx_mba_t_build_graph , hx_mba_t_get_graph ,
  hx_mba_t_analyze_calls , hx_mba_t_optimize_global , hx_mba_t_alloc_lvars , hx_mba_t_dump ,
  hx_mba_t_vdump_mba , hx_mba_t_print , hx_mba_t_verify , hx_mba_t_mark_chains_dirty ,
  hx_mba_t_insert_block , hx_mba_t_remove_block , hx_mba_t_remove_empty_and_unreachable_blocks , hx_mba_t_combine_blocks ,
  hx_mba_t_for_all_ops , hx_mba_t_for_all_insns , hx_mba_t_for_all_topinsns , hx_mba_t_find_mop ,
  hx_mba_t_arg , hx_mba_t_serialize , hx_mba_t_deserialize , hx_mbl_graph_t_is_accessed_globally ,
  hx_mbl_graph_t_get_ud , hx_mbl_graph_t_get_du , hx_codegen_t_emit , hx_codegen_t_emit_ ,
  hx_is_kreg , hx_get_temp_regs , hx_get_hexrays_version , hx_open_pseudocode ,
  hx_close_pseudocode , hx_get_widget_vdui , hx_decompile_many , hx_hexrays_failure_t_desc ,
  hx_send_database , hx_gco_info_t_append_to_list , hx_get_current_operand , hx_remitem ,
  hx_negated_relation , hx_swapped_relation , hx_get_op_signness , hx_asgop ,
  hx_asgop_revert , hx_cnumber_t_print , hx_cnumber_t_value , hx_cnumber_t_assign ,
  hx_cnumber_t_compare , hx_var_ref_t_compare , hx_ctree_visitor_t_apply_to , hx_ctree_visitor_t_apply_to_exprs ,
  hx_ctree_parentee_t_recalc_parent_types , hx_cfunc_parentee_t_calc_rvalue_type , hx_citem_locator_t_compare , hx_citem_t_contains_expr ,
  hx_citem_t_contains_label , hx_citem_t_find_parent_of , hx_citem_t_find_closest_addr , hx_cexpr_t_assign ,
  hx_cexpr_t_compare , hx_cexpr_t_replace_by , hx_cexpr_t_cleanup , hx_cexpr_t_put_number ,
  hx_cexpr_t_print1 , hx_cexpr_t_calc_type , hx_cexpr_t_equal_effect , hx_cexpr_t_is_child_of ,
  hx_cexpr_t_contains_operator , hx_cexpr_t_get_high_nbit_bound , hx_cexpr_t_get_low_nbit_bound , hx_cexpr_t_requires_lvalue ,
  hx_cexpr_t_has_side_effects , hx_cif_t_assign , hx_cif_t_compare , hx_cloop_t_assign ,
  hx_cfor_t_compare , hx_cwhile_t_compare , hx_cdo_t_compare , hx_creturn_t_compare ,
  hx_cgoto_t_compare , hx_casm_t_compare , hx_cinsn_t_assign , hx_cinsn_t_compare ,
  hx_cinsn_t_replace_by , hx_cinsn_t_cleanup , hx_cinsn_t_new_insn , hx_cinsn_t_create_if ,
  hx_cinsn_t_print , hx_cinsn_t_print1 , hx_cinsn_t_is_ordinary_flow , hx_cinsn_t_contains_insn ,
  hx_cinsn_t_collect_free_breaks , hx_cinsn_t_collect_free_continues , hx_cblock_t_compare , hx_carglist_t_compare ,
  hx_ccase_t_compare , hx_ccases_t_compare , hx_cswitch_t_compare , hx_ctree_item_t_get_memptr ,
  hx_ctree_item_t_get_lvar , hx_ctree_item_t_get_ea , hx_ctree_item_t_get_label_num , hx_lnot ,
  hx_new_block , hx_vcreate_helper , hx_vcall_helper , hx_make_num ,
  hx_make_ref , hx_dereference , hx_save_user_labels , hx_save_user_cmts ,
  hx_save_user_numforms , hx_save_user_iflags , hx_save_user_unions , hx_restore_user_labels ,
  hx_restore_user_cmts , hx_restore_user_numforms , hx_restore_user_iflags , hx_restore_user_unions ,
  hx_cfunc_t_build_c_tree , hx_cfunc_t_verify , hx_cfunc_t_print_dcl , hx_cfunc_t_print_func ,
  hx_cfunc_t_get_func_type , hx_cfunc_t_get_lvars , hx_cfunc_t_get_stkoff_delta , hx_cfunc_t_find_label ,
  hx_cfunc_t_remove_unused_labels , hx_cfunc_t_get_user_cmt , hx_cfunc_t_set_user_cmt , hx_cfunc_t_get_user_iflags ,
  hx_cfunc_t_set_user_iflags , hx_cfunc_t_has_orphan_cmts , hx_cfunc_t_del_orphan_cmts , hx_cfunc_t_get_user_union_selection ,
  hx_cfunc_t_set_user_union_selection , hx_cfunc_t_get_line_item , hx_cfunc_t_get_warnings , hx_cfunc_t_get_eamap ,
  hx_cfunc_t_get_boundaries , hx_cfunc_t_get_pseudocode , hx_cfunc_t_gather_derefs , hx_cfunc_t_find_item_coords ,
  hx_cfunc_t_cleanup , hx_decompile , hx_gen_microcode , hx_mark_cfunc_dirty ,
  hx_clear_cached_cfuncs , hx_has_cached_cfunc , hx_get_ctype_name , hx_create_field_name ,
  hx_install_hexrays_callback , hx_remove_hexrays_callback , hx_vdui_t_set_locked , hx_vdui_t_refresh_view ,
  hx_vdui_t_refresh_ctext , hx_vdui_t_switch_to , hx_vdui_t_get_number , hx_vdui_t_get_current_label ,
  hx_vdui_t_clear , hx_vdui_t_refresh_cpos , hx_vdui_t_get_current_item , hx_vdui_t_ui_rename_lvar ,
  hx_vdui_t_rename_lvar , hx_vdui_t_ui_set_call_type , hx_vdui_t_ui_set_lvar_type , hx_vdui_t_set_lvar_type ,
  hx_vdui_t_ui_edit_lvar_cmt , hx_vdui_t_set_lvar_cmt , hx_vdui_t_ui_map_lvar , hx_vdui_t_ui_unmap_lvar ,
  hx_vdui_t_map_lvar , hx_vdui_t_set_strmem_type , hx_vdui_t_rename_strmem , hx_vdui_t_set_global_type ,
  hx_vdui_t_rename_global , hx_vdui_t_rename_label , hx_vdui_t_jump_enter , hx_vdui_t_ctree_to_disasm ,
  hx_vdui_t_calc_cmt_type , hx_vdui_t_edit_cmt , hx_vdui_t_edit_func_cmt , hx_vdui_t_del_orphan_cmts ,
  hx_vdui_t_set_num_radix , hx_vdui_t_set_num_enum , hx_vdui_t_set_num_stroff , hx_vdui_t_invert_sign ,
  hx_vdui_t_invert_bits , hx_vdui_t_collapse_item , hx_vdui_t_collapse_lvars , hx_vdui_t_split_item ,
  hx_hexrays_alloc , hx_hexrays_free , hx_vdui_t_set_noptr_lvar , hx_select_udt_by_offset ,
  hx_mblock_t_get_valranges_ , hx_cfunc_t_refresh_func_ctext , hx_checkout_hexrays_license , hx_mba_t_copy_block ,
  hx_mblock_t_optimize_useless_jump , hx_mblock_t_get_reginsn_qty , hx_modify_user_lvar_info , hx_cdg_insn_iterator_t_next ,
  hx_restore_user_labels2 , hx_save_user_labels2 , hx_mba_ranges_t_range_contains , hx_close_hexrays_waitbox ,
  hx_mba_t_map_fict_ea , hx_mba_t_alloc_fict_ea , hx_mba_t_alloc_kreg , hx_mba_t_free_kreg ,
  hx_mba_t_idaloc2vd_ , hx_mba_t_vd2idaloc_ , hx_bitset_t_fill_gaps , hx_cfunc_t_save_user_labels ,
  hx_cfunc_t_save_user_cmts , hx_cfunc_t_save_user_numforms , hx_cfunc_t_save_user_iflags , hx_cfunc_t_save_user_unions ,
  hx_minsn_t_set_combined , hx_mba_t_save_snapshot , hx_create_cfunc , hx_mba_t_set_maturity ,
  hx_rename_lvar , hx_locate_lvar , hx_mba_t_create_helper_call , hx_lvar_t_append_list ,
  hx_chain_t_append_list , hx_udc_filter_t_cleanup , hx_mba_t_get_curfunc , hx_mop_t__make_gvar ,
  hx_mop_t_make_gvar , hx_cexpr_t_maybe_ptr
}
 API call numbers. More...
 

Functions

void * hexrays_alloc (size_t size)
 
void hexrays_free (void *ptr)
 
 DECLARE_TYPE_AS_MOVABLE (valrng_t)
 
THREAD_SAFE bool is_may_access (maymust_t maymust)
 
ea_t get_merror_desc (qstring *out, merror_t code, mba_t *mba)
 Get textual description of an error code. More...
 
THREAD_SAFE bool must_mcode_close_block (mcode_t mcode, bool including_calls)
 Must an instruction with the given opcode be the last one in a block? Such opcodes are called closing opcodes. More...
 
THREAD_SAFE bool is_mcode_propagatable (mcode_t mcode)
 May opcode be propagated? Such opcodes can be used in sub-instructions (nested instructions) There is a handful of non-propagatable opcodes, like jumps, ret, nop, etc All other regular opcodes are propagatable and may appear in a nested instruction. More...
 
THREAD_SAFE bool is_mcode_addsub (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_xdsu (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_set (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_set1 (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_j1 (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_jcond (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_convertible_to_jmp (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_convertible_to_set (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_call (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_fpu (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_commutative (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_shift (mcode_t mcode)
 
THREAD_SAFE bool is_mcode_divmod (mcode_t op)
 
THREAD_SAFE bool has_mcode_seloff (mcode_t op)
 
THREAD_SAFE mcode_t set2jcnd (mcode_t code)
 
THREAD_SAFE mcode_t jcnd2set (mcode_t code)
 
THREAD_SAFE mcode_t negate_mcode_relation (mcode_t code)
 
THREAD_SAFE mcode_t swap_mcode_relation (mcode_t code)
 
THREAD_SAFE mcode_t get_signed_mcode (mcode_t code)
 
THREAD_SAFE mcode_t get_unsigned_mcode (mcode_t code)
 
THREAD_SAFE bool is_signed_mcode (mcode_t code)
 
THREAD_SAFE bool is_unsigned_mcode (mcode_t code)
 
THREAD_SAFE bool mcode_modifies_d (mcode_t mcode)
 
const char * dstr (const tinfo_t *tif)
 Print the specified type info. More...
 
bool is_type_correct (const type_t *ptr)
 Verify a type string. More...
 
bool is_small_udt (const tinfo_t &tif)
 Is a small structure or union? More...
 
bool is_nonbool_type (const tinfo_t &type)
 Is definitely a non-boolean type? More...
 
bool is_bool_type (const tinfo_t &type)
 Is a boolean type? More...
 
THREAD_SAFE bool is_ptr_or_array (type_t t)
 Is a pointer or array type? More...
 
THREAD_SAFE bool is_paf (type_t t)
 Is a pointer, array, or function type? More...
 
THREAD_SAFE bool is_inplace_def (const tinfo_t &type)
 Is struct/union/enum definition (not declaration)? More...
 
int partial_type_num (const tinfo_t &type)
 Calculate number of partial subtypes. More...
 
tinfo_t get_float_type (int width)
 Get a type of a floating point value with the specified width. More...
 
tinfo_t get_int_type_by_width_and_sign (int srcwidth, type_sign_t sign)
 Create a type info by width and sign. More...
 
tinfo_t get_unk_type (int size)
 Create a partial type info by width. More...
 
tinfo_t dummy_ptrtype (int ptrsize, bool isfp)
 Generate a dummy pointer type. More...
 
bool get_member_type (const member_t *mptr, tinfo_t *type)
 Get type of a structure field. More...
 
tinfo_t make_pointer (const tinfo_t &type)
 Create a pointer type. More...
 
tinfo_t create_typedef (const char *name)
 Create a reference to a named type. More...
 
tinfo_t create_typedef (int n)
 Create a reference to an ordinal type. More...
 
bool get_type (uval_t id, tinfo_t *tif, type_source_t guess)
 Get a global type. More...
 
bool set_type (uval_t id, const tinfo_t &tif, type_source_t source, bool force=false)
 Set a global type. More...
 
void print_vdloc (qstring *vout, const vdloc_t &loc, int nbytes)
 Print vdloc. More...
 
bool arglocs_overlap (const vdloc_t &loc1, size_t w1, const vdloc_t &loc2, size_t w2)
 Do two arglocs overlap? More...
 
 DECLARE_TYPE_AS_MOVABLE (lvar_t)
 
 DECLARE_TYPE_AS_MOVABLE (lvar_saved_info_t)
 
bool restore_user_lvar_settings (lvar_uservec_t *lvinf, ea_t func_ea)
 Restore user defined local variable settings in the database. More...
 
void save_user_lvar_settings (ea_t func_ea, const lvar_uservec_t &lvinf)
 Save user defined local variable settings into the database. More...
 
bool modify_user_lvars (ea_t entry_ea, user_lvar_modifier_t &mlv)
 Modify saved local variable settings. More...
 
bool modify_user_lvar_info (ea_t func_ea, uint mli_flags, const lvar_saved_info_t &info)
 Modify saved local variable settings of one variable. More...
 
bool locate_lvar (lvar_locator_t *out, ea_t func_ea, const char *varname)
 Find a variable by name. More...
 
bool rename_lvar (ea_t func_ea, const char *oldname, const char *newname)
 Rename a local variable. More...
 
bool restore_user_defined_calls (udcall_map_t *udcalls, ea_t func_ea)
 Restore user defined function calls from the database. More...
 
void save_user_defined_calls (ea_t func_ea, const udcall_map_t &udcalls)
 Save user defined local function calls into the database. More...
 
bool parse_user_call (udcall_t *udc, const char *decl, bool silent)
 Convert function type declaration into internal structure. More...
 
merror_t convert_to_user_call (const udcall_t &udc, codegen_t &cdg)
 try to generate user-defined call for an instruction More...
 
bool install_microcode_filter (microcode_filter_t *filter, bool install=true)
 register/unregister non-standard microcode generator More...
 
 DECLARE_TYPE_AS_MOVABLE (bitset_t)
 
 DECLARE_TYPE_AS_MOVABLE (ivl_t)
 
 DECLARE_TYPE_AS_MOVABLE (ivlset_t)
 
 DECLARE_TYPE_AS_MOVABLE (rlist_t)
 
 DECLARE_TYPE_AS_MOVABLE (mlist_t)
 
 DECLARE_TYPE_AS_MOVABLE (mlistvec_t)
 
const mlist_tget_temp_regs (void)
 Get list of temporary registers. More...
 
bool is_kreg (mreg_t r)
 Is a kernel register? Kernel registers are temporary registers that can be used freely. More...
 
mreg_t reg2mreg (int reg)
 Map a processor register to a microregister. More...
 
int mreg2reg (mreg_t reg, int width)
 Map a microregister to a processor register. More...
 
int get_mreg_name (qstring *out, mreg_t reg, int width, void *ud=nullptr)
 Get the microregister name. More...
 
void install_optinsn_handler (optinsn_t *opt)
 Install an instruction level custom optimizer. More...
 
bool remove_optinsn_handler (optinsn_t *opt)
 Remove an instruction level custom optimizer. More...
 
void install_optblock_handler (optblock_t *opt)
 Install a block level custom optimizer. More...
 
bool remove_optblock_handler (optblock_t *opt)
 Remove a block level custom optimizer. More...
 
 DECLARE_TYPE_AS_MOVABLE (mop_t)
 
 DECLARE_TYPE_AS_MOVABLE (mcallarg_t)
 
const minsn_tgetf_reginsn (const minsn_t *ins)
 Skip assertions forward. More...
 
const minsn_tgetb_reginsn (const minsn_t *ins)
 Skip assertions backward. More...
 
minsn_tgetf_reginsn (minsn_t *ins)
 
minsn_tgetb_reginsn (minsn_t *ins)
 
 DECLARE_TYPE_AS_MOVABLE (hexwarn_t)
 
const char * get_hexrays_version (void)
 Get decompiler version. More...
 
bool checkout_hexrays_license (bool silent)
 Check out a floating decompiler license. More...
 
vdui_topen_pseudocode (ea_t ea, int flags)
 Open pseudocode window. More...
 
bool close_pseudocode (TWidget *f)
 Close pseudocode window. More...
 
vdui_tget_widget_vdui (TWidget *f)
 Get the vdui_t instance associated to the TWidget. More...
 
bool decompile_many (const char *outfile, const eavec_t *funcaddrs, int flags)
 Batch decompilation. More...
 
void send_database (const hexrays_failure_t &err, bool silent)
 Send the database to Hex-Rays. More...
 
bool get_current_operand (gco_info_t *out)
 Get the instruction operand under the cursor. More...
 
void remitem (const citem_t *e)
 
ctype_t negated_relation (ctype_t op)
 Negate a comparison operator. For example, cot_sge becomes cot_slt. More...
 
ctype_t swapped_relation (ctype_t op)
 Swap a comparison operator. For example, cot_sge becomes cot_sle. More...
 
type_sign_t get_op_signness (ctype_t op)
 Get operator sign. Meaningful for sign-dependent operators, like cot_sdiv. More...
 
ctype_t asgop (ctype_t cop)
 Convert plain operator into assignment operator. For example, cot_add returns cot_asgadd. More...
 
ctype_t asgop_revert (ctype_t cop)
 Convert assignment operator into plain operator. More...
 
bool op_uses_x (ctype_t op)
 Does operator use the 'x' field of cexpr_t? More...
 
bool op_uses_y (ctype_t op)
 Does operator use the 'y' field of cexpr_t? More...
 
bool op_uses_z (ctype_t op)
 Does operator use the 'z' field of cexpr_t? More...
 
bool is_binary (ctype_t op)
 Is binary operator? More...
 
bool is_unary (ctype_t op)
 Is unary operator? More...
 
bool is_relational (ctype_t op)
 Is comparison operator? More...
 
bool is_assignment (ctype_t op)
 Is assignment operator? More...
 
bool accepts_udts (ctype_t op)
 
bool is_prepost (ctype_t op)
 Is pre/post increment/decrement operator? More...
 
bool is_commutative (ctype_t op)
 Is commutative operator? More...
 
bool is_additive (ctype_t op)
 Is additive operator? More...
 
bool is_multiplicative (ctype_t op)
 Is multiplicative operator? More...
 
bool is_bitop (ctype_t op)
 Is bit related operator? More...
 
bool is_logical (ctype_t op)
 Is logical operator? More...
 
bool is_loop (ctype_t op)
 Is loop statement code? More...
 
bool is_break_consumer (ctype_t op)
 Does a break statement influence the specified statement code? More...
 
bool is_lvalue (ctype_t op)
 Is Lvalue operator? More...
 
bool accepts_small_udts (ctype_t op)
 Is the operator allowed on small structure or union? More...
 
 DECLARE_TYPE_AS_MOVABLE (citem_t)
 
 DECLARE_TYPE_AS_MOVABLE (cexpr_t)
 
 DECLARE_TYPE_AS_MOVABLE (ceinsn_t)
 
 DECLARE_TYPE_AS_MOVABLE (cinsn_t)
 
 DECLARE_TYPE_AS_MOVABLE (carg_t)
 
 DECLARE_TYPE_AS_MOVABLE (ccase_t)
 
cexpr_tlnot (cexpr_t *e)
 Logically negate the specified expression. More...
 
cinsn_tnew_block (void)
 Create a new block-statement. More...
 
cexpr_tvcreate_helper (bool standalone, const tinfo_t &type, const char *format, va_list va)
 
cexpr_tcreate_helper (bool standalone, const tinfo_t &type, const char *format,...)
 
cexpr_tvcall_helper (const tinfo_t &rettype, carglist_t *args, const char *format, va_list va)
 
cexpr_tcall_helper (const tinfo_t &rettype, carglist_t *args, const char *format,...)
 
cexpr_tmake_num (uint64 n, cfunc_t *func=nullptr, ea_t ea=BADADDR, int opnum=0, type_sign_t sign=no_sign, int size=0)
 Create a number expression. More...
 
cexpr_tmake_ref (cexpr_t *e)
 Create a reference. More...
 
cexpr_tdereference (cexpr_t *e, int ptrsize, bool is_flt=false)
 Dereference a pointer. More...
 
void save_user_labels (ea_t func_ea, const user_labels_t *user_labels)
 Save user defined labels into the database. More...
 
void save_user_labels2 (ea_t func_ea, const user_labels_t *user_labels, const cfunc_t *func=nullptr)
 
void save_user_cmts (ea_t func_ea, const user_cmts_t *user_cmts)
 Save user defined comments into the database. More...
 
void save_user_numforms (ea_t func_ea, const user_numforms_t *numforms)
 Save user defined number formats into the database. More...
 
void save_user_iflags (ea_t func_ea, const user_iflags_t *iflags)
 Save user defined citem iflags into the database. More...
 
void save_user_unions (ea_t func_ea, const user_unions_t *unions)
 Save user defined union field selections into the database. More...
 
user_labels_trestore_user_labels (ea_t func_ea)
 Restore user defined labels from the database. More...
 
user_labels_trestore_user_labels2 (ea_t func_ea, const cfunc_t *func=nullptr)
 
user_cmts_trestore_user_cmts (ea_t func_ea)
 Restore user defined comments from the database. More...
 
user_numforms_trestore_user_numforms (ea_t func_ea)
 Restore user defined number formats from the database. More...
 
user_iflags_t * restore_user_iflags (ea_t func_ea)
 Restore user defined citem iflags from the database. More...
 
user_unions_t * restore_user_unions (ea_t func_ea)
 Restore user defined union field selections from the database. More...
 
void close_hexrays_waitbox (void)
 Close the waitbox displayed by the decompiler. More...
 
cfuncptr_t decompile (const mba_ranges_t &mbr, hexrays_failure_t *hf, int decomp_flags=0)
 Decompile a snippet or a function. More...
 
cfuncptr_t decompile_func (func_t *pfn, hexrays_failure_t *hf, int decomp_flags=0)
 Decompile a function. More...
 
cfuncptr_t decompile_snippet (const rangevec_t &ranges, hexrays_failure_t *hf, int decomp_flags=0)
 Decompile a snippet. More...
 
mba_tgen_microcode (const mba_ranges_t &mbr, hexrays_failure_t *hf, const mlist_t *retlist=nullptr, int decomp_flags=0, mba_maturity_t reqmat=MMAT_GLBOPT3)
 Generate microcode of an arbitrary code snippet. More...
 
cfuncptr_t create_cfunc (mba_t *mba)
 Create a new cfunc_t object. More...
 
bool mark_cfunc_dirty (ea_t ea, bool close_views=false)
 Flush the cached decompilation results. More...
 
void clear_cached_cfuncs (void)
 Flush all cached decompilation results. More...
 
bool has_cached_cfunc (ea_t ea)
 Do we have a cached decompilation result for 'ea'? More...
 
const char * get_ctype_name (ctype_t op)
 
qstring create_field_name (const tinfo_t &type, uval_t offset=BADADDR)
 
enum hexrays_event_t ENUM_SIZE (int)
 Decompiler events. More...
 
bool install_hexrays_callback (hexrays_cb_t *callback, void *ud)
 Install handler for decompiler events. More...
 
int remove_hexrays_callback (hexrays_cb_t *callback, void *ud)
 Uninstall handler for decompiler events. More...
 
 DECLARE_TYPE_AS_MOVABLE (ui_stroff_op_t)
 
int select_udt_by_offset (const qvector< tinfo_t > *udts, const ui_stroff_ops_t &ops, ui_stroff_applicator_t &applicator)
 Select UDT. More...
 
bool init_hexrays_plugin (int flags=0)
 Check that your plugin is compatible with hex-rays decompiler. More...
 
void term_hexrays_plugin ()
 Stop working with hex-rays decompiler. More...
 
operand_locator_t const & user_numforms_first (user_numforms_iterator_t p)
 Get reference to the current map key. More...
 
number_format_tuser_numforms_second (user_numforms_iterator_t p)
 Get reference to the current map value. More...
 
user_numforms_iterator_t user_numforms_find (const user_numforms_t *map, const operand_locator_t &key)
 Find the specified key in user_numforms_t. More...
 
user_numforms_iterator_t user_numforms_insert (user_numforms_t *map, const operand_locator_t &key, const number_format_t &val)
 Insert new (operand_locator_t, number_format_t) pair into user_numforms_t. More...
 
user_numforms_iterator_t user_numforms_begin (const user_numforms_t *map)
 Get iterator pointing to the beginning of user_numforms_t. More...
 
user_numforms_iterator_t user_numforms_end (const user_numforms_t *map)
 Get iterator pointing to the end of user_numforms_t. More...
 
user_numforms_iterator_t user_numforms_next (user_numforms_iterator_t p)
 Move to the next element. More...
 
user_numforms_iterator_t user_numforms_prev (user_numforms_iterator_t p)
 Move to the previous element. More...
 
void user_numforms_erase (user_numforms_t *map, user_numforms_iterator_t p)
 Erase current element from user_numforms_t. More...
 
void user_numforms_clear (user_numforms_t *map)
 Clear user_numforms_t. More...
 
size_t user_numforms_size (user_numforms_t *map)
 Get size of user_numforms_t. More...
 
void user_numforms_free (user_numforms_t *map)
 Delete user_numforms_t instance. More...
 
user_numforms_tuser_numforms_new ()
 Create a new user_numforms_t instance. More...
 
lvar_locator_t const & lvar_mapping_first (lvar_mapping_iterator_t p)
 Get reference to the current map key. More...
 
lvar_locator_tlvar_mapping_second (lvar_mapping_iterator_t p)
 Get reference to the current map value. More...
 
lvar_mapping_iterator_t lvar_mapping_find (const lvar_mapping_t *map, const lvar_locator_t &key)
 Find the specified key in lvar_mapping_t. More...
 
lvar_mapping_iterator_t lvar_mapping_insert (lvar_mapping_t *map, const lvar_locator_t &key, const lvar_locator_t &val)
 Insert new (lvar_locator_t, lvar_locator_t) pair into lvar_mapping_t. More...
 
lvar_mapping_iterator_t lvar_mapping_begin (const lvar_mapping_t *map)
 Get iterator pointing to the beginning of lvar_mapping_t. More...
 
lvar_mapping_iterator_t lvar_mapping_end (const lvar_mapping_t *map)
 Get iterator pointing to the end of lvar_mapping_t. More...
 
lvar_mapping_iterator_t lvar_mapping_next (lvar_mapping_iterator_t p)
 Move to the next element. More...
 
lvar_mapping_iterator_t lvar_mapping_prev (lvar_mapping_iterator_t p)
 Move to the previous element. More...
 
void lvar_mapping_erase (lvar_mapping_t *map, lvar_mapping_iterator_t p)
 Erase current element from lvar_mapping_t. More...
 
void lvar_mapping_clear (lvar_mapping_t *map)
 Clear lvar_mapping_t. More...
 
size_t lvar_mapping_size (lvar_mapping_t *map)
 Get size of lvar_mapping_t. More...
 
void lvar_mapping_free (lvar_mapping_t *map)
 Delete lvar_mapping_t instance. More...
 
lvar_mapping_tlvar_mapping_new ()
 Create a new lvar_mapping_t instance. More...
 
ea_t const & udcall_map_first (udcall_map_iterator_t p)
 Get reference to the current map key. More...
 
udcall_tudcall_map_second (udcall_map_iterator_t p)
 Get reference to the current map value. More...
 
udcall_map_iterator_t udcall_map_find (const udcall_map_t *map, const ea_t &key)
 Find the specified key in udcall_map_t. More...
 
udcall_map_iterator_t udcall_map_insert (udcall_map_t *map, const ea_t &key, const udcall_t &val)
 Insert new (ea_t, udcall_t) pair into udcall_map_t. More...
 
udcall_map_iterator_t udcall_map_begin (const udcall_map_t *map)
 Get iterator pointing to the beginning of udcall_map_t. More...
 
udcall_map_iterator_t udcall_map_end (const udcall_map_t *map)
 Get iterator pointing to the end of udcall_map_t. More...
 
udcall_map_iterator_t udcall_map_next (udcall_map_iterator_t p)
 Move to the next element. More...
 
udcall_map_iterator_t udcall_map_prev (udcall_map_iterator_t p)
 Move to the previous element. More...
 
void udcall_map_erase (udcall_map_t *map, udcall_map_iterator_t p)
 Erase current element from udcall_map_t. More...
 
void udcall_map_clear (udcall_map_t *map)
 Clear udcall_map_t. More...
 
size_t udcall_map_size (udcall_map_t *map)
 Get size of udcall_map_t. More...
 
void udcall_map_free (udcall_map_t *map)
 Delete udcall_map_t instance. More...
 
udcall_map_t * udcall_map_new ()
 Create a new udcall_map_t instance. More...
 
treeloc_t const & user_cmts_first (user_cmts_iterator_t p)
 Get reference to the current map key. More...
 
citem_cmt_tuser_cmts_second (user_cmts_iterator_t p)
 Get reference to the current map value. More...
 
user_cmts_iterator_t user_cmts_find (const user_cmts_t *map, const treeloc_t &key)
 Find the specified key in user_cmts_t. More...
 
user_cmts_iterator_t user_cmts_insert (user_cmts_t *map, const treeloc_t &key, const citem_cmt_t &val)
 Insert new (treeloc_t, citem_cmt_t) pair into user_cmts_t. More...
 
user_cmts_iterator_t user_cmts_begin (const user_cmts_t *map)
 Get iterator pointing to the beginning of user_cmts_t. More...
 
user_cmts_iterator_t user_cmts_end (const user_cmts_t *map)
 Get iterator pointing to the end of user_cmts_t. More...
 
user_cmts_iterator_t user_cmts_next (user_cmts_iterator_t p)
 Move to the next element. More...
 
user_cmts_iterator_t user_cmts_prev (user_cmts_iterator_t p)
 Move to the previous element. More...
 
void user_cmts_erase (user_cmts_t *map, user_cmts_iterator_t p)
 Erase current element from user_cmts_t. More...
 
void user_cmts_clear (user_cmts_t *map)
 Clear user_cmts_t. More...
 
size_t user_cmts_size (user_cmts_t *map)
 Get size of user_cmts_t. More...
 
void user_cmts_free (user_cmts_t *map)
 Delete user_cmts_t instance. More...
 
user_cmts_tuser_cmts_new ()
 Create a new user_cmts_t instance. More...
 
citem_locator_t const & user_iflags_first (user_iflags_iterator_t p)
 Get reference to the current map key. More...
 
int32 & user_iflags_second (user_iflags_iterator_t p)
 Get reference to the current map value. More...
 
user_iflags_iterator_t user_iflags_find (const user_iflags_t *map, const citem_locator_t &key)
 Find the specified key in user_iflags_t. More...
 
user_iflags_iterator_t user_iflags_insert (user_iflags_t *map, const citem_locator_t &key, const int32 &val)
 Insert new (citem_locator_t, int32) pair into user_iflags_t. More...
 
user_iflags_iterator_t user_iflags_begin (const user_iflags_t *map)
 Get iterator pointing to the beginning of user_iflags_t. More...
 
user_iflags_iterator_t user_iflags_end (const user_iflags_t *map)
 Get iterator pointing to the end of user_iflags_t. More...
 
user_iflags_iterator_t user_iflags_next (user_iflags_iterator_t p)
 Move to the next element. More...
 
user_iflags_iterator_t user_iflags_prev (user_iflags_iterator_t p)
 Move to the previous element. More...
 
void user_iflags_erase (user_iflags_t *map, user_iflags_iterator_t p)
 Erase current element from user_iflags_t. More...
 
void user_iflags_clear (user_iflags_t *map)
 Clear user_iflags_t. More...
 
size_t user_iflags_size (user_iflags_t *map)
 Get size of user_iflags_t. More...
 
void user_iflags_free (user_iflags_t *map)
 Delete user_iflags_t instance. More...
 
user_iflags_t * user_iflags_new ()
 Create a new user_iflags_t instance. More...
 
ea_t const & user_unions_first (user_unions_iterator_t p)
 Get reference to the current map key. More...
 
intvec_t & user_unions_second (user_unions_iterator_t p)
 Get reference to the current map value. More...
 
user_unions_iterator_t user_unions_find (const user_unions_t *map, const ea_t &key)
 Find the specified key in user_unions_t. More...
 
user_unions_iterator_t user_unions_insert (user_unions_t *map, const ea_t &key, const intvec_t &val)
 Insert new (ea_t, intvec_t) pair into user_unions_t. More...
 
user_unions_iterator_t user_unions_begin (const user_unions_t *map)
 Get iterator pointing to the beginning of user_unions_t. More...
 
user_unions_iterator_t user_unions_end (const user_unions_t *map)
 Get iterator pointing to the end of user_unions_t. More...
 
user_unions_iterator_t user_unions_next (user_unions_iterator_t p)
 Move to the next element. More...
 
user_unions_iterator_t user_unions_prev (user_unions_iterator_t p)
 Move to the previous element. More...
 
void user_unions_erase (user_unions_t *map, user_unions_iterator_t p)
 Erase current element from user_unions_t. More...
 
void user_unions_clear (user_unions_t *map)
 Clear user_unions_t. More...
 
size_t user_unions_size (user_unions_t *map)
 Get size of user_unions_t. More...
 
void user_unions_free (user_unions_t *map)
 Delete user_unions_t instance. More...
 
user_unions_t * user_unions_new ()
 Create a new user_unions_t instance. More...
 
int const & user_labels_first (user_labels_iterator_t p)
 Get reference to the current map key. More...
 
qstring & user_labels_second (user_labels_iterator_t p)
 Get reference to the current map value. More...
 
user_labels_iterator_t user_labels_find (const user_labels_t *map, const int &key)
 Find the specified key in user_labels_t. More...
 
user_labels_iterator_t user_labels_insert (user_labels_t *map, const int &key, const qstring &val)
 Insert new (int, qstring) pair into user_labels_t. More...
 
user_labels_iterator_t user_labels_begin (const user_labels_t *map)
 Get iterator pointing to the beginning of user_labels_t. More...
 
user_labels_iterator_t user_labels_end (const user_labels_t *map)
 Get iterator pointing to the end of user_labels_t. More...
 
user_labels_iterator_t user_labels_next (user_labels_iterator_t p)
 Move to the next element. More...
 
user_labels_iterator_t user_labels_prev (user_labels_iterator_t p)
 Move to the previous element. More...
 
void user_labels_erase (user_labels_t *map, user_labels_iterator_t p)
 Erase current element from user_labels_t. More...
 
void user_labels_clear (user_labels_t *map)
 Clear user_labels_t. More...
 
size_t user_labels_size (user_labels_t *map)
 Get size of user_labels_t. More...
 
void user_labels_free (user_labels_t *map)
 Delete user_labels_t instance. More...
 
user_labels_tuser_labels_new ()
 Create a new user_labels_t instance. More...
 
ea_t const & eamap_first (eamap_iterator_t p)
 Get reference to the current map key. More...
 
cinsnptrvec_teamap_second (eamap_iterator_t p)
 Get reference to the current map value. More...
 
eamap_iterator_t eamap_find (const eamap_t *map, const ea_t &key)
 Find the specified key in eamap_t. More...
 
eamap_iterator_t eamap_insert (eamap_t *map, const ea_t &key, const cinsnptrvec_t &val)
 Insert new (ea_t, cinsnptrvec_t) pair into eamap_t. More...
 
eamap_iterator_t eamap_begin (const eamap_t *map)
 Get iterator pointing to the beginning of eamap_t. More...
 
eamap_iterator_t eamap_end (const eamap_t *map)
 Get iterator pointing to the end of eamap_t. More...
 
eamap_iterator_t eamap_next (eamap_iterator_t p)
 Move to the next element. More...
 
eamap_iterator_t eamap_prev (eamap_iterator_t p)
 Move to the previous element. More...
 
void eamap_erase (eamap_t *map, eamap_iterator_t p)
 Erase current element from eamap_t. More...
 
void eamap_clear (eamap_t *map)
 Clear eamap_t. More...
 
size_t eamap_size (eamap_t *map)
 Get size of eamap_t. More...
 
void eamap_free (eamap_t *map)
 Delete eamap_t instance. More...
 
eamap_t * eamap_new ()
 Create a new eamap_t instance. More...
 
cinsn_t *const & boundaries_first (boundaries_iterator_t p)
 Get reference to the current map key. More...
 
rangeset_t & boundaries_second (boundaries_iterator_t p)
 Get reference to the current map value. More...
 
boundaries_iterator_t boundaries_find (const boundaries_t *map, const cinsn_t *&key)
 Find the specified key in boundaries_t. More...
 
boundaries_iterator_t boundaries_insert (boundaries_t *map, const cinsn_t *&key, const rangeset_t &val)
 Insert new (cinsn_t *, rangeset_t) pair into boundaries_t. More...
 
boundaries_iterator_t boundaries_begin (const boundaries_t *map)
 Get iterator pointing to the beginning of boundaries_t. More...
 
boundaries_iterator_t boundaries_end (const boundaries_t *map)
 Get iterator pointing to the end of boundaries_t. More...
 
boundaries_iterator_t boundaries_next (boundaries_iterator_t p)
 Move to the next element. More...
 
boundaries_iterator_t boundaries_prev (boundaries_iterator_t p)
 Move to the previous element. More...
 
void boundaries_erase (boundaries_t *map, boundaries_iterator_t p)
 Erase current element from boundaries_t. More...
 
void boundaries_clear (boundaries_t *map)
 Clear boundaries_t. More...
 
size_t boundaries_size (boundaries_t *map)
 Get size of boundaries_t. More...
 
void boundaries_free (boundaries_t *map)
 Delete boundaries_t instance. More...
 
boundaries_t * boundaries_new ()
 Create a new boundaries_t instance. More...
 
chain_tblock_chains_get (block_chains_iterator_t p)
 Get reference to the current set value. More...
 
block_chains_iterator_t block_chains_find (const block_chains_t *set, const chain_t &val)
 Find the specified key in set block_chains_t. More...
 
block_chains_iterator_t block_chains_insert (block_chains_t *set, const chain_t &val)
 Insert new (chain_t) into set block_chains_t. More...
 
block_chains_iterator_t block_chains_begin (const block_chains_t *set)
 Get iterator pointing to the beginning of block_chains_t. More...
 
block_chains_iterator_t block_chains_end (const block_chains_t *set)
 Get iterator pointing to the end of block_chains_t. More...
 
block_chains_iterator_t block_chains_next (block_chains_iterator_t p)
 Move to the next element. More...
 
block_chains_iterator_t block_chains_prev (block_chains_iterator_t p)
 Move to the previous element. More...
 
void block_chains_erase (block_chains_t *set, block_chains_iterator_t p)
 Erase current element from block_chains_t. More...
 
void block_chains_clear (block_chains_t *set)
 Clear block_chains_t. More...
 
size_t block_chains_size (block_chains_t *set)
 Get size of block_chains_t. More...
 
void block_chains_free (block_chains_t *set)
 Delete block_chains_t instance. More...
 
block_chains_tblock_chains_new ()
 Create a new block_chains_t instance. More...
 

Variables

const uvlr_t MAX_VALUE = uvlr_t(-1)
 
const svlr_t MAX_SVALUE = svlr_t(uvlr_t(-1) >> 1)
 
const svlr_t MIN_SVALUE = ~MAX_SVALUE
 
const maymust_t MUST_ACCESS = 0x00
 
const maymust_t MAY_ACCESS = 0x01
 
const maymust_t MAYMUST_ACCESS_MASK = 0x01
 
const maymust_t ONE_ACCESS_TYPE = 0x20
 
const maymust_t INCLUDE_SPOILED_REGS = 0x40
 
const maymust_t EXCLUDE_PASS_REGS = 0x80
 
const maymust_t FULL_XDSU = 0x100
 
const maymust_t WITH_ASSERTS = 0x200
 
const maymust_t EXCLUDE_VOLATILE = 0x400
 
const maymust_t INCLUDE_UNUSED_SRC = 0x800
 
const maymust_t INCLUDE_DEAD_RETREGS = 0x1000
 
const maymust_t INCLUDE_RESTRICTED = 0x2000
 
const maymust_t CALL_SPOILS_ONLY_ARGS = 0x4000
 
const mreg_t mr_none = mreg_t(-1)
 
const mreg_t mr_cf = mreg_t(0)
 
const mreg_t mr_zf = mreg_t(1)
 
const mreg_t mr_sf = mreg_t(2)
 
const mreg_t mr_of = mreg_t(3)
 
const mreg_t mr_pf = mreg_t(4)
 
const int cc_count = mr_pf - mr_cf + 1
 
const mreg_t mr_cc = mreg_t(5)
 
const mreg_t mr_first = mreg_t(8)
 
const size_t bitset_width = sizeof(mbitmap_t) * CHAR_BIT
 
const size_t bitset_align = bitset_width - 1
 
const size_t bitset_shift = 6
 
const mopt_t mop_z = 0
 none More...
 
const mopt_t mop_r = 1
 register (they exist until MMAT_LVARS) More...
 
const mopt_t mop_n = 2
 immediate number constant More...
 
const mopt_t mop_str = 3
 immediate string constant (user representation) More...
 
const mopt_t mop_d = 4
 result of another instruction More...
 
const mopt_t mop_S = 5
 local stack variable (they exist until MMAT_LVARS) More...
 
const mopt_t mop_v = 6
 global variable More...
 
const mopt_t mop_b = 7
 micro basic block (mblock_t) More...
 
const mopt_t mop_f = 8
 list of arguments More...
 
const mopt_t mop_l = 9
 local variable More...
 
const mopt_t mop_a = 10
 mop_addr_t: address of operand (mop_l, mop_v, mop_S, mop_r) More...
 
const mopt_t mop_h = 11
 helper function More...
 
const mopt_t mop_c = 12
 mcases More...
 
const mopt_t mop_fn = 13
 floating point constant More...
 
const mopt_t mop_p = 14
 operand pair More...
 
const mopt_t mop_sc = 15
 scattered More...
 
const int NOSIZE = -1
 wrong or unexisting operand size More...
 
const int64 HEXRAYS_API_MAGIC = 0x00DEC0DE00000003LL
 
const cmt_type_t CMT_NONE = 0x0000
 No comment is possible. More...
 
const cmt_type_t CMT_TAIL = 0x0001
 Indented comment. More...
 
const cmt_type_t CMT_BLOCK1 = 0x0002
 Anterioir block comment. More...
 
const cmt_type_t CMT_BLOCK2 = 0x0004
 Posterior block comment. More...
 
const cmt_type_t CMT_LVAR = 0x0008
 Local variable comment. More...
 
const cmt_type_t CMT_FUNC = 0x0010
 Function comment. More...
 
const cmt_type_t CMT_ALL = 0x001F
 All comments. More...
 
int hexdsp
 

Detailed Description

HexRays SDK header file.

The decompiler SDK consists of a single header file.

The header file defines data structures and inline functions.

Definition in file hexrays.hpp.

Macro Definition Documentation

◆ ACFL_BLKOPT

#define ACFL_BLKOPT   0x02

perform interblock transformations

Definition at line 4768 of file hexrays.hpp.

◆ ACFL_GLBDEL

#define ACFL_GLBDEL   0x08

perform dead code eliminition

Definition at line 4770 of file hexrays.hpp.

◆ ACFL_GLBPROP

#define ACFL_GLBPROP   0x04

perform global propagation

Definition at line 4769 of file hexrays.hpp.

◆ ACFL_GUESS

#define ACFL_GUESS   0x10

may guess calling conventions

Examples
hexrays_sample12.cpp.

Definition at line 4771 of file hexrays.hpp.

◆ ACFL_LOCOPT

#define ACFL_LOCOPT   0x01

perform local propagation (requires ACFL_BLKOPT)

Definition at line 4767 of file hexrays.hpp.

◆ ALLMEM

#define ALLMEM   ivl_t::allmem

Definition at line 1904 of file hexrays.hpp.

◆ ANCHOR_BLKCMT

#define ANCHOR_BLKCMT   0x20000000

block comment (for ctree items)

Definition at line 6588 of file hexrays.hpp.

◆ ANCHOR_CITEM

#define ANCHOR_CITEM   0x00000000

c-tree item

Definition at line 6585 of file hexrays.hpp.

◆ ANCHOR_INDEX

#define ANCHOR_INDEX   0x1FFFFFFF

Definition at line 6583 of file hexrays.hpp.

◆ ANCHOR_ITP

#define ANCHOR_ITP   0x80000000

item type preciser

Definition at line 6587 of file hexrays.hpp.

◆ ANCHOR_LVAR

#define ANCHOR_LVAR   0x40000000

declaration of local variable

Definition at line 6586 of file hexrays.hpp.

◆ ANCHOR_MASK

#define ANCHOR_MASK   0xC0000000

Definition at line 6584 of file hexrays.hpp.

◆ CFL_FINAL

#define CFL_FINAL   0x0001

call type is final, should not be changed

Definition at line 6541 of file hexrays.hpp.

◆ CFL_HELPER

#define CFL_HELPER   0x0002

created from a decompiler helper function

Definition at line 6542 of file hexrays.hpp.

◆ CFL_NORET

#define CFL_NORET   0x0004

call does not return

Definition at line 6543 of file hexrays.hpp.

◆ CFS_BOUNDS

#define CFS_BOUNDS   0x0001

'eamap' and 'boundaries' are ready

Definition at line 6888 of file hexrays.hpp.

◆ CFS_LOCKED

#define CFS_LOCKED   0x0008

cfunc is temporarily locked

Definition at line 6891 of file hexrays.hpp.

◆ CFS_LVARS_HIDDEN

#define CFS_LVARS_HIDDEN   0x0004

local variable definitions are collapsed

Definition at line 6890 of file hexrays.hpp.

◆ CFS_TEXT

#define CFS_TEXT   0x0002

'sv' is ready (and hdrlines)

Definition at line 6889 of file hexrays.hpp.

◆ CHF_FAKE

#define CHF_FAKE   0x08

fake chain created by widen_chains()

Definition at line 3297 of file hexrays.hpp.

◆ CHF_INITED

#define CHF_INITED   0x01

is chain initialized? (valid only after lvar allocation)

Definition at line 3294 of file hexrays.hpp.

◆ CHF_OVER

#define CHF_OVER   0x04

overlapped chain

Definition at line 3296 of file hexrays.hpp.

◆ CHF_PASSTHRU

#define CHF_PASSTHRU   0x10

pass-thru chain, must use the input variable to the block

Definition at line 3298 of file hexrays.hpp.

◆ CHF_REPLACED

#define CHF_REPLACED   0x02

chain operands have been replaced?

Definition at line 3295 of file hexrays.hpp.

◆ CHF_TERM

#define CHF_TERM   0x20

terminating chain; the variable does not survive across the block

Definition at line 3299 of file hexrays.hpp.

◆ CIT_COLLAPSED

#define CIT_COLLAPSED   0x0001

display ctree item in collapsed form

Examples
hexrays_sample4.cpp.

Definition at line 6883 of file hexrays.hpp.

◆ CPBLK_FAST

#define CPBLK_FAST   0x0000

do not update minbstkref and minbargref

Definition at line 4848 of file hexrays.hpp.

◆ CPBLK_MINREF

#define CPBLK_MINREF   0x0001

update minbstkref and minbargref

Definition at line 4849 of file hexrays.hpp.

◆ CPBLK_OPTJMP

#define CPBLK_OPTJMP   0x0002

del the jump insn at the end of the block if it becomes useless

Definition at line 4851 of file hexrays.hpp.

◆ CV_FAST

#define CV_FAST   0x0000

do not maintain parent information

Examples
hexrays_sample2.cpp, hexrays_sample3.cpp, and hexrays_sample7.cpp.

Definition at line 5738 of file hexrays.hpp.

◆ CV_INSNS

#define CV_INSNS   0x0010

visit only statements, prune all expressions do not use before the final ctree maturity because expressions may contain statements at intermediate stages (see cot_insn).

Otherwise you risk missing statements embedded into expressions.

Examples
hexrays_sample3.cpp.

Definition at line 5747 of file hexrays.hpp.

◆ CV_PARENTS

#define CV_PARENTS   0x0002

maintain parent information

Definition at line 5740 of file hexrays.hpp.

◆ CV_POST

#define CV_POST   0x0004

call the leave...() functions

Definition at line 5741 of file hexrays.hpp.

◆ CV_PRUNE

#define CV_PRUNE   0x0001

this bit is set by visit...() to prune the walk

Definition at line 5739 of file hexrays.hpp.

◆ CV_RESTART

#define CV_RESTART   0x0008

restart enumeration at the top expr (apply_to_exprs)

Definition at line 5742 of file hexrays.hpp.

◆ CVAR_ARG

#define CVAR_ARG   0x00000100

function argument

Definition at line 1175 of file hexrays.hpp.

◆ CVAR_AUTOMAP

#define CVAR_AUTOMAP   0x00200000

variable was automatically mapped

Definition at line 1191 of file hexrays.hpp.

◆ CVAR_BYREF

#define CVAR_BYREF   0x00400000

the address of the variable was taken

Definition at line 1192 of file hexrays.hpp.

◆ CVAR_DUMMY

#define CVAR_DUMMY   0x00080000

dummy argument (added to fill a hole in the argument list)

Definition at line 1189 of file hexrays.hpp.

◆ CVAR_FAKE

#define CVAR_FAKE   0x00000200

fake variable (return var or va_list)

Definition at line 1176 of file hexrays.hpp.

◆ CVAR_FLOAT

#define CVAR_FLOAT   0x00000800

used in a fpu insn

Definition at line 1178 of file hexrays.hpp.

◆ CVAR_FORCED

#define CVAR_FORCED   0x00010000

variable was created by an explicit request otherwise we could reuse an existing var

Definition at line 1184 of file hexrays.hpp.

◆ CVAR_INASM

#define CVAR_INASM   0x00800000

variable is used in instructions translated into __asm {...}

Definition at line 1194 of file hexrays.hpp.

◆ CVAR_MAPDST

#define CVAR_MAPDST   0x00002000

other variables are mapped to this var

Definition at line 1180 of file hexrays.hpp.

◆ CVAR_MREG

#define CVAR_MREG   0x00000008

corresponding mregs were replaced?

Definition at line 1170 of file hexrays.hpp.

◆ CVAR_NAME

#define CVAR_NAME   0x00000004

has nice name?

Definition at line 1169 of file hexrays.hpp.

◆ CVAR_NOPTR

#define CVAR_NOPTR   0x00040000

variable cannot be a pointer (user choice)

Definition at line 1187 of file hexrays.hpp.

◆ CVAR_NOTARG

#define CVAR_NOTARG   0x00100000

variable cannot be an input argument

Definition at line 1190 of file hexrays.hpp.

◆ CVAR_NOWD

#define CVAR_NOWD   0x00000010

width is unknown

Definition at line 1171 of file hexrays.hpp.

◆ CVAR_OVER

#define CVAR_OVER   0x00000400

overlapping variable

Definition at line 1177 of file hexrays.hpp.

◆ CVAR_PARTIAL

#define CVAR_PARTIAL   0x00004000

variable type is partialy defined

Definition at line 1181 of file hexrays.hpp.

◆ CVAR_REGNAME

#define CVAR_REGNAME   0x00020000

has a register name (like _RAX): if lvar is used by an m_ext instruction

Definition at line 1186 of file hexrays.hpp.

◆ CVAR_RESULT

#define CVAR_RESULT   0x00000080

function result variable

Definition at line 1174 of file hexrays.hpp.

◆ CVAR_SHARED

#define CVAR_SHARED   0x02000000

variable is mapped to several chains

Definition at line 1197 of file hexrays.hpp.

◆ CVAR_SPOILED

#define CVAR_SPOILED   0x00001000

internal flag, do not use: spoiled var

Definition at line 1179 of file hexrays.hpp.

◆ CVAR_THISARG

#define CVAR_THISARG   0x00008000

'this' argument of c++ member functions

Definition at line 1182 of file hexrays.hpp.

◆ CVAR_TYPE

#define CVAR_TYPE   0x00000002

the type is defined?

Definition at line 1168 of file hexrays.hpp.

◆ CVAR_UNAME

#define CVAR_UNAME   0x00000020

user-defined name

Definition at line 1172 of file hexrays.hpp.

◆ CVAR_UNUSED

#define CVAR_UNUSED   0x01000000

user-defined __unused attribute meaningful only if: is_arg_var() && !mba->final_type

Definition at line 1196 of file hexrays.hpp.

◆ CVAR_USED

#define CVAR_USED   0x00000001

is used in the code?

Definition at line 1167 of file hexrays.hpp.

◆ CVAR_UTYPE

#define CVAR_UTYPE   0x00000040

user-defined type

Definition at line 1173 of file hexrays.hpp.

◆ DECOMP_ALL_BLKS

#define DECOMP_ALL_BLKS   0x0010

generate microcode for unreachable blocks

Definition at line 7064 of file hexrays.hpp.

◆ DECOMP_NO_CACHE

#define DECOMP_NO_CACHE   0x0002

do not use decompilation cache

Definition at line 7061 of file hexrays.hpp.

◆ DECOMP_NO_FRAME

#define DECOMP_NO_FRAME   0x0004

do not use function frame info (only snippet mode)

Definition at line 7062 of file hexrays.hpp.

◆ DECOMP_NO_HIDE

#define DECOMP_NO_HIDE   0x0020

do not close display waitbox. see close_hexrays_waitboxes()

Definition at line 7065 of file hexrays.hpp.

◆ DECOMP_NO_WAIT

#define DECOMP_NO_WAIT   0x0001

do not display waitbox

Examples
hexrays_sample14.cpp.

Definition at line 7060 of file hexrays.hpp.

◆ DECOMP_NO_XREFS

#define DECOMP_NO_XREFS   0x0040

do not update global xrefs cache

Definition at line 7066 of file hexrays.hpp.

◆ DECOMP_WARNINGS

#define DECOMP_WARNINGS   0x0008

display warnings in the output window

Examples
hexrays_sample1.cpp, hexrays_sample12.cpp, hexrays_sample13.cpp, hexrays_sample15.cpp, and hexrays_sample9.cpp.

Definition at line 7063 of file hexrays.hpp.

◆ EQ_CMPDEST

#define EQ_CMPDEST   0x0004

compare instruction destinations

Definition at line 3632 of file hexrays.hpp.

◆ EQ_IGNCODE

#define EQ_IGNCODE   0x0002

ignore instruction opcodes

Definition at line 3631 of file hexrays.hpp.

◆ EQ_IGNSIZE

#define EQ_IGNSIZE   0x0001

ignore source operand sizes

Examples
hexrays_sample16.cpp.

Definition at line 3630 of file hexrays.hpp.

◆ EQ_OPTINSN

#define EQ_OPTINSN   0x0008

optimize mop_d operands

Definition at line 3633 of file hexrays.hpp.

◆ EXFL_ALL

#define EXFL_ALL   0x01FF

all currently defined bits

Definition at line 6105 of file hexrays.hpp.

◆ EXFL_ALONE

#define EXFL_ALONE   0x0008

standalone helper

Definition at line 6099 of file hexrays.hpp.

◆ EXFL_CPADONE

#define EXFL_CPADONE   0x0001

pointer arithmetic correction done

Definition at line 6096 of file hexrays.hpp.

◆ EXFL_CSTR

#define EXFL_CSTR   0x0010

string literal

Definition at line 6100 of file hexrays.hpp.

◆ EXFL_FPOP

#define EXFL_FPOP   0x0004

floating point operation

Definition at line 6098 of file hexrays.hpp.

◆ EXFL_JUMPOUT

#define EXFL_JUMPOUT   0x0080

jump out-of-function

Definition at line 6103 of file hexrays.hpp.

◆ EXFL_LVALUE

#define EXFL_LVALUE   0x0002

expression is lvalue even if it doesn't look like it

Definition at line 6097 of file hexrays.hpp.

◆ EXFL_PARTIAL

#define EXFL_PARTIAL   0x0020

type of the expression is considered partial

Definition at line 6101 of file hexrays.hpp.

◆ EXFL_UNDEF

#define EXFL_UNDEF   0x0040

expression uses undefined value

Definition at line 6102 of file hexrays.hpp.

◆ EXFL_VFTABLE

#define EXFL_VFTABLE   0x0100

is ptr to vftable (used for cot_memptr, cot_memref)

Definition at line 6104 of file hexrays.hpp.

◆ FCI_DEAD

#define FCI_DEAD   0x002

some return registers were determined dead

Definition at line 3132 of file hexrays.hpp.

◆ FCI_EXPLOCS

#define FCI_EXPLOCS   0x400

all arglocs are specified explicitly

Definition at line 3147 of file hexrays.hpp.

◆ FCI_FINAL

#define FCI_FINAL   0x004

call type is final, should not be changed

Definition at line 3133 of file hexrays.hpp.

◆ FCI_HASCALL

#define FCI_HASCALL   0x080

A function is an synthetic helper combined from several instructions and at least one of them was a call to a real functions.

Definition at line 3144 of file hexrays.hpp.

◆ FCI_HASFMT

#define FCI_HASFMT   0x100

A variadic function with recognized printf- or scanf-style format string.

Definition at line 3146 of file hexrays.hpp.

◆ FCI_NORET

#define FCI_NORET   0x008

call does not return

Definition at line 3134 of file hexrays.hpp.

◆ FCI_NOSIDE

#define FCI_NOSIDE   0x020

call does not have side effects

Definition at line 3136 of file hexrays.hpp.

◆ FCI_PROP

#define FCI_PROP   0x001

call has been propagated

Definition at line 3131 of file hexrays.hpp.

◆ FCI_PURE

#define FCI_PURE   0x010

pure function

Definition at line 3135 of file hexrays.hpp.

◆ FCI_SPLOK

#define FCI_SPLOK   0x040

spoiled/visible_memory lists have been optimized.

for some functions we can reduce them as soon as information about the arguments becomes available. in order not to try optimize them again we use this bit.

Definition at line 3141 of file hexrays.hpp.

◆ FD_BACKWARD

#define FD_BACKWARD   0x0000

search direction

Definition at line 4123 of file hexrays.hpp.

◆ FD_DEF

#define FD_DEF   0x0002

look for definition

Definition at line 4126 of file hexrays.hpp.

◆ FD_DIRTY

#define FD_DIRTY   0x0004

ignore possible implicit definitions by function calls and indirect memory access

Definition at line 4128 of file hexrays.hpp.

◆ FD_FORWARD

#define FD_FORWARD   0x0001

search direction

Definition at line 4124 of file hexrays.hpp.

◆ FD_USE

#define FD_USE   0x0000

look for use

Definition at line 4125 of file hexrays.hpp.

◆ FUNC_NAME_CONTAINING_RECORD

#define FUNC_NAME_CONTAINING_RECORD   "CONTAINING_RECORD"

Definition at line 3095 of file hexrays.hpp.

◆ FUNC_NAME_EMPTY

#define FUNC_NAME_EMPTY   "$empty"

Definition at line 3093 of file hexrays.hpp.

◆ FUNC_NAME_MEMCPY

#define FUNC_NAME_MEMCPY   "memcpy"

Definition at line 3079 of file hexrays.hpp.

◆ FUNC_NAME_MEMSET

#define FUNC_NAME_MEMSET   "memset"

Definition at line 3081 of file hexrays.hpp.

◆ FUNC_NAME_MEMSET32

#define FUNC_NAME_MEMSET32   "memset32"

Definition at line 3083 of file hexrays.hpp.

◆ FUNC_NAME_MEMSET64

#define FUNC_NAME_MEMSET64   "memset64"

Definition at line 3084 of file hexrays.hpp.

◆ FUNC_NAME_PRESENT

#define FUNC_NAME_PRESENT   "$present"

Definition at line 3094 of file hexrays.hpp.

◆ FUNC_NAME_STRCAT

#define FUNC_NAME_STRCAT   "strcat"

Definition at line 3089 of file hexrays.hpp.

◆ FUNC_NAME_STRCPY

#define FUNC_NAME_STRCPY   "strcpy"

Definition at line 3085 of file hexrays.hpp.

◆ FUNC_NAME_STRLEN

#define FUNC_NAME_STRLEN   "strlen"

Definition at line 3087 of file hexrays.hpp.

◆ FUNC_NAME_TAIL

#define FUNC_NAME_TAIL   "tail"

Definition at line 3091 of file hexrays.hpp.

◆ FUNC_NAME_VA_ARG

#define FUNC_NAME_VA_ARG   "va_arg"

Definition at line 3092 of file hexrays.hpp.

◆ FUNC_NAME_WCSCAT

#define FUNC_NAME_WCSCAT   "wcscat"

Definition at line 3090 of file hexrays.hpp.

◆ FUNC_NAME_WCSCPY

#define FUNC_NAME_WCSCPY   "wcscpy"

Definition at line 3086 of file hexrays.hpp.

◆ FUNC_NAME_WCSLEN

#define FUNC_NAME_WCSLEN   "wcslen"

Definition at line 3088 of file hexrays.hpp.

◆ FUNC_NAME_WMEMCPY

#define FUNC_NAME_WMEMCPY   "wmemcpy"

Definition at line 3080 of file hexrays.hpp.

◆ FUNC_NAME_WMEMSET

#define FUNC_NAME_WMEMSET   "wmemset"

Definition at line 3082 of file hexrays.hpp.

◆ GCA_ALLOC

#define GCA_ALLOC   0x04

enumerate only allocated chains

Definition at line 3418 of file hexrays.hpp.

◆ GCA_EMPTY

#define GCA_EMPTY   0x01

include empty chains

Definition at line 3416 of file hexrays.hpp.

◆ GCA_NALLOC

#define GCA_NALLOC   0x08

enumerate only non-allocated chains

Definition at line 3419 of file hexrays.hpp.

◆ GCA_OFIRST

#define GCA_OFIRST   0x10

consider only chains of the first block

Definition at line 3420 of file hexrays.hpp.

◆ GCA_OLAST

#define GCA_OLAST   0x20

consider only chains of the last block

Definition at line 3421 of file hexrays.hpp.

◆ GCA_SPEC

#define GCA_SPEC   0x02

include chains for special registers

Definition at line 3417 of file hexrays.hpp.

◆ GCO_DEF

#define GCO_DEF   0x0004

is destination operand?

Examples
hexrays_sample12.cpp.

Definition at line 5441 of file hexrays.hpp.

◆ GCO_REG

#define GCO_REG   0x0001

is register? otherwise a stack variable

Definition at line 5439 of file hexrays.hpp.

◆ GCO_STK

#define GCO_STK   0x0000

a stack variable

Definition at line 5438 of file hexrays.hpp.

◆ GCO_USE

#define GCO_USE   0x0002

is source operand?

Examples
hexrays_sample12.cpp.

Definition at line 5440 of file hexrays.hpp.

◆ GLN_ALL

#define GLN_ALL   0x03

get both

Definition at line 6660 of file hexrays.hpp.

◆ GLN_CURRENT

#define GLN_CURRENT   0x01

get label of the current item

Definition at line 6658 of file hexrays.hpp.

◆ GLN_GOTO_TARGET

#define GLN_GOTO_TARGET   0x02

get goto target

Definition at line 6659 of file hexrays.hpp.

◆ hexapi

#define hexapi

Public functions are marked with this keyword.

Definition at line 224 of file hexrays.hpp.

◆ HEXRAYS_MEMORY_ALLOCATION_FUNCS

#define HEXRAYS_MEMORY_ALLOCATION_FUNCS ( )
Value:
void *operator new (size_t _s) { return hexrays_alloc(_s); } \
void *operator new[](size_t _s) { return hexrays_alloc(_s); } \
void *operator new(size_t /*size*/, void *_v) { return _v; } \
void operator delete (void *_blk) { hexrays_free(_blk); } \
void operator delete[](void *_blk) { hexrays_free(_blk); } \
HEXRAYS_PLACEMENT_DELETE

Definition at line 290 of file hexrays.hpp.

◆ HEXRAYS_PLACEMENT_DELETE

#define HEXRAYS_PLACEMENT_DELETE   void operator delete(void *, void *) {}

Definition at line 289 of file hexrays.hpp.

◆ INS_EPILOG

#define INS_EPILOG   ((cinsn_t *)1)

Definition at line 6862 of file hexrays.hpp.

◆ IPROP_ASSERT

#define IPROP_ASSERT   0x0080

assertion: usually mov #val, op.

assertions are used to help the optimizer. assertions are ignored when generating ctree

Examples
hexrays_sample18.cpp.

Definition at line 3469 of file hexrays.hpp.

◆ IPROP_CLNPOP

#define IPROP_CLNPOP   0x0008

the purpose of the instruction is to clean stack (e.g.

"pop ecx" is often used for that)

Definition at line 3463 of file hexrays.hpp.

◆ IPROP_COMBINED

#define IPROP_COMBINED   0x0800

insn has been modified because of a partial reference

Definition at line 3477 of file hexrays.hpp.

◆ IPROP_DONT_COMB

#define IPROP_DONT_COMB   0x40000

may not combine this instruction with others

Definition at line 3489 of file hexrays.hpp.

◆ IPROP_DONT_PROP

#define IPROP_DONT_PROP   0x20000

may not propagate

Definition at line 3488 of file hexrays.hpp.

◆ IPROP_EXTSTX

#define IPROP_EXTSTX   0x1000

this is m_ext propagated into m_stx

Definition at line 3478 of file hexrays.hpp.

◆ IPROP_FARCALL

#define IPROP_FARCALL   0x0020

call of a far function using push cs/call sequence

Definition at line 3465 of file hexrays.hpp.

◆ IPROP_FPINSN

#define IPROP_FPINSN   0x0010

floating point insn

Definition at line 3464 of file hexrays.hpp.

◆ IPROP_IGNLOWSRC

#define IPROP_IGNLOWSRC   0x2000

low part of the instruction source operand has been created artificially (this bit is used only for 'and x, 80...')

Definition at line 3481 of file hexrays.hpp.

◆ IPROP_INV_JX

#define IPROP_INV_JX   0x4000

inverted conditional jump

Definition at line 3482 of file hexrays.hpp.

◆ IPROP_MBARRIER

#define IPROP_MBARRIER   0x80000

this instruction acts as a memory barrier (instructions accessing memory may not be reordered past it)

Definition at line 3491 of file hexrays.hpp.

◆ IPROP_MULTI_MOV

#define IPROP_MULTI_MOV   0x10000

the minsn was generated as part of insn that moves multiple registers (example: STM on ARM may transfer multiple registers)

bits that can be set by plugins:

Definition at line 3487 of file hexrays.hpp.

◆ IPROP_OPTIONAL

#define IPROP_OPTIONAL   0x0001

optional instruction

Definition at line 3457 of file hexrays.hpp.

◆ IPROP_PERSIST

#define IPROP_PERSIST   0x0002

persistent insn; they are not destroyed

Definition at line 3458 of file hexrays.hpp.

◆ IPROP_SPLIT

#define IPROP_SPLIT   0x0700

the instruction has been split:

Definition at line 3472 of file hexrays.hpp.

◆ IPROP_SPLIT1

#define IPROP_SPLIT1   0x0100

into 1 byte

Definition at line 3473 of file hexrays.hpp.

◆ IPROP_SPLIT2

#define IPROP_SPLIT2   0x0200

into 2 bytes

Definition at line 3474 of file hexrays.hpp.

◆ IPROP_SPLIT4

#define IPROP_SPLIT4   0x0300

into 4 bytes

Definition at line 3475 of file hexrays.hpp.

◆ IPROP_SPLIT8

#define IPROP_SPLIT8   0x0400

into 8 bytes

Definition at line 3476 of file hexrays.hpp.

◆ IPROP_TAILCALL

#define IPROP_TAILCALL   0x0040

tail call

Definition at line 3466 of file hexrays.hpp.

◆ IPROP_UNMERGED

#define IPROP_UNMERGED   0x100000

'goto' instruction was transformed info 'call'

Definition at line 3492 of file hexrays.hpp.

◆ IPROP_WAS_NORET

#define IPROP_WAS_NORET   0x8000

was noret icall

Definition at line 3483 of file hexrays.hpp.

◆ IPROP_WILDMATCH

#define IPROP_WILDMATCH   0x0004

match multiple insns

Definition at line 3459 of file hexrays.hpp.

◆ LOCOPT_ALL

#define LOCOPT_ALL   0x0001

redo optimization for all blocks.

if this bit is not set, only dirty blocks will be optimized

Definition at line 4744 of file hexrays.hpp.

◆ LOCOPT_REFINE

#define LOCOPT_REFINE   0x0002

refine return type, ok to fail

Definition at line 4745 of file hexrays.hpp.

◆ LOCOPT_REFINE2

#define LOCOPT_REFINE2   0x0004

refine return type, try harder

Definition at line 4746 of file hexrays.hpp.

◆ LVINF_FORCE

#define LVINF_FORCE   0x0002

force allocation of a new variable.

forces the decompiler to create a new variable at ll.defea

Definition at line 1441 of file hexrays.hpp.

◆ LVINF_KEEP

#define LVINF_KEEP   0x0001

preserve saved user settings regardless of vars for example, if a var loses all its user-defined attributes or even gets destroyed, keep its lvar_saved_info_t.

this is used for ephemeral variables that get destroyed by macro recognition.

Definition at line 1438 of file hexrays.hpp.

◆ LVINF_NOMAP

#define LVINF_NOMAP   0x0008

forbid automatic mapping of the variable

Definition at line 1443 of file hexrays.hpp.

◆ LVINF_NOPTR

#define LVINF_NOPTR   0x0004

variable type should not be a pointer

Definition at line 1442 of file hexrays.hpp.

◆ LVINF_UNUSED

#define LVINF_UNUSED   0x0010

unused argument, corresponds to CVAR_UNUSED

Definition at line 1444 of file hexrays.hpp.

◆ m_max

#define m_max   0x49

Definition at line 613 of file hexrays.hpp.

◆ MAX_FUNC_ARGS

#define MAX_FUNC_ARGS   64

Definition at line 3101 of file hexrays.hpp.

◆ MAX_SUPPORTED_STACK_SIZE

#define MAX_SUPPORTED_STACK_SIZE   0x100000

Definition at line 284 of file hexrays.hpp.

◆ MAXRANGE

#define MAXRANGE   bitrange_t(0, USHRT_MAX)

Definition at line 3759 of file hexrays.hpp.

◆ MBA2_ALL_FLAGS

#define MBA2_ALL_FLAGS   0x00007FFF

Definition at line 4503 of file hexrays.hpp.

◆ MBA2_ARGIDX_OK

#define MBA2_ARGIDX_OK   0x00000040

may verify input argument list?

Definition at line 4486 of file hexrays.hpp.

◆ MBA2_ARGIDX_SORTED

#define MBA2_ARGIDX_SORTED   0x00000400

args finally sorted according to ABI (e.g.

reverse stkarg order in Borland)

Definition at line 4491 of file hexrays.hpp.

◆ MBA2_CODE16_BIT

#define MBA2_CODE16_BIT   0x00000800

the code16 bit removed

Definition at line 4492 of file hexrays.hpp.

◆ MBA2_DONT_VERIFY

#define MBA2_DONT_VERIFY   0x80000000

Do not verify microcode.

This flag is recomended to be set only when debugging decompiler plugins

Definition at line 4499 of file hexrays.hpp.

◆ MBA2_HAS_OUTLINES

#define MBA2_HAS_OUTLINES   0x00002000

calls to outlined code have been inlined

Definition at line 4494 of file hexrays.hpp.

◆ MBA2_INITIAL_FLAGS

#define MBA2_INITIAL_FLAGS   (MBA2_LVARNAMES_OK|MBA2_LVARS_RENAMED)

Definition at line 4501 of file hexrays.hpp.

◆ MBA2_IS_CTR

#define MBA2_IS_CTR   0x00000010

is constructor?

Definition at line 4484 of file hexrays.hpp.

◆ MBA2_IS_DTR

#define MBA2_IS_DTR   0x00000020

is destructor?

Definition at line 4485 of file hexrays.hpp.

◆ MBA2_LVARNAMES_OK

#define MBA2_LVARNAMES_OK   0x00000001

may verify lvar_names?

Definition at line 4480 of file hexrays.hpp.

◆ MBA2_LVARS_RENAMED

#define MBA2_LVARS_RENAMED   0x00000002

accept empty names now?

Definition at line 4481 of file hexrays.hpp.

◆ MBA2_NO_DUP_CALLS

#define MBA2_NO_DUP_CALLS   0x00000080

forbid multiple calls with the same ea

Definition at line 4487 of file hexrays.hpp.

◆ MBA2_NO_DUP_LVARS

#define MBA2_NO_DUP_LVARS   0x00000100

forbid multiple lvars with the same ea

Definition at line 4488 of file hexrays.hpp.

◆ MBA2_NO_FRAME

#define MBA2_NO_FRAME   0x00004000

do not use function frame info (only snippet mode)

Definition at line 4495 of file hexrays.hpp.

◆ MBA2_OVER_CHAINS

#define MBA2_OVER_CHAINS   0x00000004

has overlapped chains?

Definition at line 4482 of file hexrays.hpp.

◆ MBA2_STACK_RETVAL

#define MBA2_STACK_RETVAL   0x00001000

the return value is on the stack

Definition at line 4493 of file hexrays.hpp.

◆ MBA2_UNDEF_RETVAR

#define MBA2_UNDEF_RETVAR   0x00000200

return value is undefined

Definition at line 4489 of file hexrays.hpp.

◆ MBA2_VALRNG_DONE

#define MBA2_VALRNG_DONE   0x00000008

calculated valranges?

Definition at line 4483 of file hexrays.hpp.

◆ MBA_ASRPROP

#define MBA_ASRPROP   0x00002000

assertion have been propagated

Definition at line 4458 of file hexrays.hpp.

◆ MBA_ASRTOK

#define MBA_ASRTOK   0x00000800

assertions have been generated

Definition at line 4456 of file hexrays.hpp.

◆ MBA_CALLS

#define MBA_CALLS   0x00001000

callinfo has been built

Definition at line 4457 of file hexrays.hpp.

◆ MBA_CHVARS

#define MBA_CHVARS   0x00200000

can verify chain varnums

Definition at line 4465 of file hexrays.hpp.

◆ MBA_CMBBLK

#define MBA_CMBBLK   0x00000400

request to combine blocks

Definition at line 4455 of file hexrays.hpp.

◆ MBA_CMNSTK

#define MBA_CMNSTK   0x00000100

stkvars+stkargs should be considered as one area

Definition at line 4451 of file hexrays.hpp.

◆ MBA_COLGDL

#define MBA_COLGDL   0x00800000

display graph after each reduction

Definition at line 4469 of file hexrays.hpp.

◆ MBA_DELPAIRS

#define MBA_DELPAIRS   0x00100000

pairs have been deleted once

Definition at line 4464 of file hexrays.hpp.

◆ MBA_GLBOPT

#define MBA_GLBOPT   0x00010000

microcode has been optimized globally

Definition at line 4461 of file hexrays.hpp.

◆ MBA_INITIAL_FLAGS

#define MBA_INITIAL_FLAGS
Value:
#define MBA_CMBBLK
request to combine blocks
Definition: hexrays.hpp:4455
#define MBA_WINGR32
use wingraph32
Definition: hexrays.hpp:4473
#define MBA_NICE
apply transformations to c code
Definition: hexrays.hpp:4471
#define MBA_REFINE
may refine return value size
Definition: hexrays.hpp:4472
#define MBA_INSGDL
display instruction in graphs
Definition: hexrays.hpp:4470
#define MBA_PRCDEFS
use precise defeas for chain-allocated lvars
Definition: hexrays.hpp:4443
#define MBA_VALNUM
display value numbers
Definition: hexrays.hpp:4475

Definition at line 4477 of file hexrays.hpp.

◆ MBA_INSGDL

#define MBA_INSGDL   0x01000000

display instruction in graphs

Definition at line 4470 of file hexrays.hpp.

◆ MBA_LOADED

#define MBA_LOADED   0x00000008

loaded gdl, no instructions (debugging)

Definition at line 4446 of file hexrays.hpp.

◆ MBA_LVARS0

#define MBA_LVARS0   0x00040000

lvar pre-allocation has been performed

Definition at line 4462 of file hexrays.hpp.

◆ MBA_LVARS1

#define MBA_LVARS1   0x00080000

lvar real allocation has been performed

Definition at line 4463 of file hexrays.hpp.

◆ MBA_NICE

#define MBA_NICE   0x02000000

apply transformations to c code

Definition at line 4471 of file hexrays.hpp.

◆ MBA_NOFUNC

#define MBA_NOFUNC   0x00000002

function is not present, addresses might be wrong

Definition at line 4444 of file hexrays.hpp.

◆ MBA_NUMADDR

#define MBA_NUMADDR   0x20000000

display definition addresses for numbers

Definition at line 4474 of file hexrays.hpp.

◆ MBA_PASSREGS

#define MBA_PASSREGS   0x00000040

has mcallinfo_t::pass_regs

Definition at line 4449 of file hexrays.hpp.

◆ MBA_PATTERN

#define MBA_PATTERN   0x00000004

microcode pattern, callinfo is present

Definition at line 4445 of file hexrays.hpp.

◆ MBA_PRCDEFS

#define MBA_PRCDEFS   0x00000001

use precise defeas for chain-allocated lvars

Definition at line 4443 of file hexrays.hpp.

◆ MBA_PREOPT

#define MBA_PREOPT   0x00000200

preoptimization stage complete

Definition at line 4454 of file hexrays.hpp.

◆ MBA_REFINE

#define MBA_REFINE   0x04000000

may refine return value size

Definition at line 4472 of file hexrays.hpp.

◆ MBA_RETFP

#define MBA_RETFP   0x00000010

function returns floating point value

Definition at line 4447 of file hexrays.hpp.

◆ MBA_RETREF

#define MBA_RETREF   0x00008000

return type has been refined

Definition at line 4460 of file hexrays.hpp.

◆ MBA_SAVRST

#define MBA_SAVRST   0x00004000

save-restore analysis has been performed

Definition at line 4459 of file hexrays.hpp.

◆ MBA_SHORT

#define MBA_SHORT   0x00400000

use short display

Definition at line 4468 of file hexrays.hpp.

◆ MBA_SPLINFO

#define MBA_SPLINFO   0x00000020

(final_type ? idb_spoiled : spoiled_regs) is valid

Definition at line 4448 of file hexrays.hpp.

◆ MBA_THUNK

#define MBA_THUNK   0x00000080

thunk function

Definition at line 4450 of file hexrays.hpp.

◆ MBA_VALNUM

#define MBA_VALNUM   0x40000000

display value numbers

Definition at line 4475 of file hexrays.hpp.

◆ MBA_WINGR32

#define MBA_WINGR32   0x10000000

use wingraph32

Definition at line 4473 of file hexrays.hpp.

◆ MBL_BACKPROP

#define MBL_BACKPROP   0x1000

performed backprop_cc

Definition at line 3792 of file hexrays.hpp.

◆ MBL_CALL

#define MBL_CALL   0x0800

call information has been built

Definition at line 3791 of file hexrays.hpp.

◆ MBL_COMB

#define MBL_COMB   0x0040

needs "combine" pass

Definition at line 3786 of file hexrays.hpp.

◆ MBL_DEAD

#define MBL_DEAD   0x0100

needs "eliminate deads" pass

Definition at line 3788 of file hexrays.hpp.

◆ MBL_DMT64

#define MBL_DMT64   0x0020

needs "demote 64bits"

Definition at line 3785 of file hexrays.hpp.

◆ MBL_DSLOT

#define MBL_DSLOT   0x4000

block for delay slot

Definition at line 3794 of file hexrays.hpp.

◆ MBL_FAKE

#define MBL_FAKE   0x0002

fake block

Definition at line 3781 of file hexrays.hpp.

◆ MBL_GOTO

#define MBL_GOTO   0x0004

this block is a goto target

Definition at line 3782 of file hexrays.hpp.

◆ MBL_INCONST

#define MBL_INCONST   0x0400

inconsistent lists: we are building them

Definition at line 3790 of file hexrays.hpp.

◆ MBL_KEEP

#define MBL_KEEP   0x10000

do not remove even if unreachable

Definition at line 3796 of file hexrays.hpp.

◆ MBL_LIST

#define MBL_LIST   0x0200

use/def lists are ready (not dirty)

Definition at line 3789 of file hexrays.hpp.

◆ MBL_NONFAKE

#define MBL_NONFAKE   0x0000

regular block

Definition at line 3780 of file hexrays.hpp.

◆ MBL_NORET

#define MBL_NORET   0x2000

dead end block: doesn't return execution control

Definition at line 3793 of file hexrays.hpp.

◆ MBL_PRIV

#define MBL_PRIV   0x0001

private block - no instructions except the specified are accepted (used in patterns)

Definition at line 3779 of file hexrays.hpp.

◆ MBL_PROP

#define MBL_PROP   0x0080

needs 'propagation' pass

Definition at line 3787 of file hexrays.hpp.

◆ MBL_PUSH

#define MBL_PUSH   0x0010

needs "convert push/pop instructions"

Definition at line 3784 of file hexrays.hpp.

◆ MBL_TCAL

#define MBL_TCAL   0x0008

aritifical call block for tail calls

Definition at line 3783 of file hexrays.hpp.

◆ MBL_VALRANGES

#define MBL_VALRANGES   0x8000

should optimize using value ranges

Definition at line 3795 of file hexrays.hpp.

◆ MLI_CLR_FLAGS

#define MLI_CLR_FLAGS   0x10

clear LVINF_... bits

Definition at line 1599 of file hexrays.hpp.

◆ MLI_CMT

#define MLI_CMT   0x04

apply lvar comment

Definition at line 1597 of file hexrays.hpp.

◆ MLI_NAME

#define MLI_NAME   0x01

apply lvar name

Definition at line 1595 of file hexrays.hpp.

◆ MLI_SET_FLAGS

#define MLI_SET_FLAGS   0x08

set LVINF_... bits

Definition at line 1598 of file hexrays.hpp.

◆ MLI_TYPE

#define MLI_TYPE   0x02

apply lvar type

Definition at line 1596 of file hexrays.hpp.

◆ NALT_VD

#define NALT_VD   2

this index is not used by ida

Definition at line 4680 of file hexrays.hpp.

◆ NF_BINVDONE

#define NF_BINVDONE   0x04

temporary internal bit: inverting bits is done

Definition at line 787 of file hexrays.hpp.

◆ NF_BITNOT

#define NF_BITNOT   0x10

The user asked to invert bits of the constant.

Definition at line 789 of file hexrays.hpp.

◆ NF_FIXED

#define NF_FIXED   0x01

number format has been defined by the user

Definition at line 785 of file hexrays.hpp.

◆ NF_NEGATE

#define NF_NEGATE   0x08

The user asked to negate the constant.

Examples
hexrays_sample4.cpp.

Definition at line 788 of file hexrays.hpp.

◆ NF_NEGDONE

#define NF_NEGDONE   0x02

temporary internal bit: negation has been performed

Definition at line 786 of file hexrays.hpp.

◆ NF_VALID

#define NF_VALID   0x20

internal bit: stroff or enum is valid for enums: this bit is set immediately for stroffs: this bit is set at the end of decompilation

Examples
hexrays_sample2.cpp.

Definition at line 792 of file hexrays.hpp.

◆ NORET_FORBID_ANALYSIS

#define NORET_FORBID_ANALYSIS   0x02

Definition at line 3648 of file hexrays.hpp.

◆ NORET_IGNORE_WAS_NORET_ICALL

#define NORET_IGNORE_WAS_NORET_ICALL   0x01

Definition at line 3647 of file hexrays.hpp.

◆ OPF_NEW_WINDOW

#define OPF_NEW_WINDOW   0x01

open new window

Definition at line 5327 of file hexrays.hpp.

◆ OPF_NO_WAIT

#define OPF_NO_WAIT   0x08

do not display waitbox if decompilation happens

Definition at line 5330 of file hexrays.hpp.

◆ OPF_REUSE

#define OPF_REUSE   0x00

reuse existing window

Definition at line 5326 of file hexrays.hpp.

◆ OPF_REUSE_ACTIVE

#define OPF_REUSE_ACTIVE   0x02

reuse existing window, only if the currently active widget is a pseudocode view

Definition at line 5329 of file hexrays.hpp.

◆ OPF_WINDOW_MGMT_MASK

#define OPF_WINDOW_MGMT_MASK   0x07

Definition at line 5333 of file hexrays.hpp.

◆ OPROP_CCFLAGS

#define OPROP_CCFLAGS   0x08

mop_n: a pc-relative value else: value of a condition code register (like mr_cc)

Definition at line 2438 of file hexrays.hpp.

◆ OPROP_FLOAT

#define OPROP_FLOAT   0x04

possibly floating value

Definition at line 2436 of file hexrays.hpp.

◆ OPROP_IMPDONE

#define OPROP_IMPDONE   0x01

imported operand (a pointer) has been dereferenced

Definition at line 2434 of file hexrays.hpp.

◆ OPROP_LOWADDR

#define OPROP_LOWADDR   0x20

a low address offset

Definition at line 2440 of file hexrays.hpp.

◆ OPROP_UDEFVAL

#define OPROP_UDEFVAL   0x10

uses undefined value

Definition at line 2439 of file hexrays.hpp.

◆ OPROP_UDT

#define OPROP_UDT   0x02

a struct or union

Definition at line 2435 of file hexrays.hpp.

◆ OPTI_ADDREXPRS

#define OPTI_ADDREXPRS   0x0001

optimize all address expressions (&x+N; &x-&y)

Definition at line 3588 of file hexrays.hpp.

◆ OPTI_COMBINSNS

#define OPTI_COMBINSNS   0x0004

may combine insns (only for optimize_insn)

Definition at line 3590 of file hexrays.hpp.

◆ OPTI_MINSTKREF

#define OPTI_MINSTKREF   0x0002

may update minstkref

Definition at line 3589 of file hexrays.hpp.

◆ OPTI_NO_LDXOPT

#define OPTI_NO_LDXOPT   0x0008

the function is called after the propagation attempt, we do not optimize low/high(ldx) in this case

Definition at line 3593 of file hexrays.hpp.

◆ SHINS_LDXEA

#define SHINS_LDXEA   0x08

display address of ldx expressions (not used)

Definition at line 2401 of file hexrays.hpp.

◆ SHINS_NUMADDR

#define SHINS_NUMADDR   0x01

display definition addresses for numbers

Definition at line 2398 of file hexrays.hpp.

◆ SHINS_SHORT

#define SHINS_SHORT   0x04

do not display use-def chains and other attrs

Definition at line 2400 of file hexrays.hpp.

◆ SHINS_VALNUM

#define SHINS_VALNUM   0x02

display value numbers

Definition at line 2399 of file hexrays.hpp.

◆ SIZEOF_BLOCK_CHAINS

#define SIZEOF_BLOCK_CHAINS   56

Definition at line 3344 of file hexrays.hpp.

◆ SVW_FLOAT

#define SVW_FLOAT   0x01

Definition at line 1369 of file hexrays.hpp.

◆ SVW_INT

#define SVW_INT   0x00

Definition at line 1368 of file hexrays.hpp.

◆ SVW_SOFT

#define SVW_SOFT   0x02

Definition at line 1370 of file hexrays.hpp.

◆ ULV_PRECISE_DEFEA

#define ULV_PRECISE_DEFEA   0x0001

Use precise defea's for lvar locations.

Definition at line 1505 of file hexrays.hpp.

◆ VDRUN_APPEND

#define VDRUN_APPEND   0x00000001

Create a new file or append to existing file.

Definition at line 5362 of file hexrays.hpp.

◆ VDRUN_CMDLINE

#define VDRUN_CMDLINE   0x00000020

Called from ida's command line.

Definition at line 5367 of file hexrays.hpp.

◆ VDRUN_LUMINA

#define VDRUN_LUMINA   0x00000080

Use lumina server.

Definition at line 5369 of file hexrays.hpp.

◆ VDRUN_MAYSTOP

#define VDRUN_MAYSTOP   0x00000010

The user can cancel decompilation.

Definition at line 5366 of file hexrays.hpp.

◆ VDRUN_NEWFILE

#define VDRUN_NEWFILE   0x00000000

Create a new file or overwrite existing file.

Definition at line 5361 of file hexrays.hpp.

◆ VDRUN_ONLYNEW

#define VDRUN_ONLYNEW   0x00000002

Fail if output file already exists.

Definition at line 5363 of file hexrays.hpp.

◆ VDRUN_SENDIDB

#define VDRUN_SENDIDB   0x00000008

Send problematic databases to hex-rays.com.

Definition at line 5365 of file hexrays.hpp.

◆ VDRUN_SILENT

#define VDRUN_SILENT   0x00000004

Silent decompilation.

Definition at line 5364 of file hexrays.hpp.

◆ VDRUN_STATS

#define VDRUN_STATS   0x00000040

Print statistics into vd_stats.txt.

Definition at line 5368 of file hexrays.hpp.

◆ VDUI_VALID

#define VDUI_VALID   0x0002

is valid?

Definition at line 7504 of file hexrays.hpp.

◆ VDUI_VISIBLE

#define VDUI_VISIBLE   0x0001

is visible?

Definition at line 7503 of file hexrays.hpp.

◆ VLR_ALL

#define VLR_ALL   0x01

Definition at line 330 of file hexrays.hpp.

◆ VLR_BITS

#define VLR_BITS   0x05

Definition at line 334 of file hexrays.hpp.

◆ VLR_IVLS

#define VLR_IVLS   0x02

Definition at line 331 of file hexrays.hpp.

◆ VLR_NONE

#define VLR_NONE   0x00

Definition at line 329 of file hexrays.hpp.

◆ VLR_RANGE

#define VLR_RANGE   0x03

Definition at line 332 of file hexrays.hpp.

◆ VLR_SECT

#define VLR_SECT   0x06

Definition at line 335 of file hexrays.hpp.

◆ VLR_SRANGE

#define VLR_SRANGE   0x04

Definition at line 333 of file hexrays.hpp.

◆ VLR_TYPE

#define VLR_TYPE   0x0F

Definition at line 328 of file hexrays.hpp.

◆ VLR_UNION

#define VLR_UNION   0x07

Definition at line 337 of file hexrays.hpp.

◆ VLR_UNK

#define VLR_UNK   0x08

Definition at line 340 of file hexrays.hpp.

◆ VR_AT_END

#define VR_AT_END   0x0001

get value ranges after the instruction or at the block end, just after the last instruction (if M is nullptr)

Definition at line 4175 of file hexrays.hpp.

◆ VR_AT_START

#define VR_AT_START   0x0000

get value ranges before the instruction or at the block start (if M is nullptr)

Examples
hexrays_sample15.cpp.

Definition at line 4172 of file hexrays.hpp.

◆ VR_EXACT

#define VR_EXACT   0x0002

find exact match.

if not set, the returned valrng size will be >= vivl.size

Examples
hexrays_sample15.cpp.

Definition at line 4177 of file hexrays.hpp.

Typedef Documentation

◆ array_of_bitsets

typedef qvector<bitset_t> array_of_bitsets

Definition at line 1819 of file hexrays.hpp.

◆ array_of_ivlsets

typedef qvector<ivlset_t> array_of_ivlsets

Definition at line 1991 of file hexrays.hpp.

◆ block_chains_vec_t

Graph chains.

This class represents all ud and du chains of the decompiled function

Definition at line 3403 of file hexrays.hpp.

◆ boundaries_t

typedef std::map<cinsn_t *, rangeset_t> boundaries_t

Definition at line 6861 of file hexrays.hpp.

◆ cfuncptr_t

typedef qrefcnt_t<cfunc_t> cfuncptr_t

Definition at line 280 of file hexrays.hpp.

◆ cfuncptrs_t

typedef qvector<cfuncptr_t> cfuncptrs_t

Definition at line 7056 of file hexrays.hpp.

◆ cinsn_list_t

typedef qlist<cinsn_t> cinsn_list_t

Definition at line 6510 of file hexrays.hpp.

◆ cinsnptrvec_t

typedef qvector<cinsn_t *> cinsnptrvec_t

Vector of pointers to statements.

Definition at line 6411 of file hexrays.hpp.

◆ cmt_type_t

typedef int cmt_type_t

Comment types.

Definition at line 7485 of file hexrays.hpp.

◆ ctree_items_t

typedef qvector<citem_t *> ctree_items_t

Vector of parents.

Definition at line 5724 of file hexrays.hpp.

◆ eamap_t

typedef std::map<ea_t, cinsnptrvec_t> eamap_t

Definition at line 6859 of file hexrays.hpp.

◆ easet_t

typedef std::set<ea_t> easet_t

Definition at line 272 of file hexrays.hpp.

◆ hexdsp_t

typedef void * hexdsp_t(int code,...)

Hex-Rays decompiler dispatcher.

All interaction with the decompiler is carried out by the intermediary of this dispatcher.

Definition at line 7224 of file hexrays.hpp.

◆ hexrays_cb_t

typedef ssize_t hexrays_cb_t(void *ud, hexrays_event_t event, va_list va)

Handler of decompiler events.

Parameters
uduser data. the value specified at the handler installation time is passed here.
eventdecompiler event code
vaadditional arguments
Returns
as a rule the callback must return 0 unless specified otherwise in the event description.

Definition at line 7413 of file hexrays.hpp.

◆ hexwarns_t

typedef qvector<hexwarn_t> hexwarns_t

Definition at line 4293 of file hexrays.hpp.

◆ history_t

typedef qstack<history_item_t> history_t

Navigation history.

Definition at line 7482 of file hexrays.hpp.

◆ iterator_word

typedef size_t iterator_word

Definition at line 8457 of file hexrays.hpp.

◆ lvar_mapping_t

Local variable mapping (is used to merge variables)

Definition at line 1484 of file hexrays.hpp.

◆ lvar_saved_infos_t

typedef qvector<lvar_saved_info_t> lvar_saved_infos_t

Definition at line 1481 of file hexrays.hpp.

◆ maymust_t

typedef int maymust_t

Definition at line 440 of file hexrays.hpp.

◆ mbitmap_t

typedef size_t mbitmap_t

Definition at line 1742 of file hexrays.hpp.

◆ mbl_array_t

using mbl_array_t = mba_t

Definition at line 4975 of file hexrays.hpp.

◆ mcallargs_t

typedef qvector<mcallarg_t> mcallargs_t

Definition at line 3027 of file hexrays.hpp.

◆ minsn_ptr_set_t

typedef std::set<minsn_t *> minsn_ptr_set_t

Definition at line 273 of file hexrays.hpp.

◆ minsnptrs_t

typedef qvector<minsn_t*> minsnptrs_t

Definition at line 275 of file hexrays.hpp.

◆ mlistvec_t

typedef qvector<mlist_t> mlistvec_t

Definition at line 2049 of file hexrays.hpp.

◆ mopptrs_t

typedef qvector<mop_t*> mopptrs_t

Definition at line 276 of file hexrays.hpp.

◆ mopt_t

typedef uint8 mopt_t

Instruction operand types.

Definition at line 2238 of file hexrays.hpp.

◆ mopvec_t

typedef qvector<mop_t> mopvec_t

Definition at line 277 of file hexrays.hpp.

◆ mreg_t

typedef int mreg_t

Micro register.

Definition at line 260 of file hexrays.hpp.

◆ mregvec_t

typedef qvector<mreg_t> mregvec_t

Definition at line 279 of file hexrays.hpp.

◆ parents_t

typedef ctree_items_t parents_t

Definition at line 5725 of file hexrays.hpp.

◆ strings_t

typedef std::set<qstring> strings_t

Definition at line 274 of file hexrays.hpp.

◆ svlr_t

typedef int64 svlr_t

Definition at line 302 of file hexrays.hpp.

◆ udcall_map_t

typedef std::map<ea_t, udcall_t> udcall_map_t

Definition at line 1655 of file hexrays.hpp.

◆ ui_stroff_ops_t

typedef qvector<ui_stroff_op_t> ui_stroff_ops_t

Definition at line 7817 of file hexrays.hpp.

◆ uint64vec_t

typedef qvector<uint64> uint64vec_t

Definition at line 278 of file hexrays.hpp.

◆ user_cmts_t

typedef std::map<treeloc_t, citem_cmt_t> user_cmts_t

Definition at line 5967 of file hexrays.hpp.

◆ user_iflags_t

typedef std::map<citem_locator_t, int32> user_iflags_t

Definition at line 5984 of file hexrays.hpp.

◆ user_labels_t

typedef std::map<int, qstring> user_labels_t

Definition at line 6676 of file hexrays.hpp.

◆ user_numforms_t

Definition at line 841 of file hexrays.hpp.

◆ user_unions_t

typedef std::map<ea_t, intvec_t> user_unions_t

Definition at line 5990 of file hexrays.hpp.

◆ uval_ivl_ivlset_t

Set of address intervals.

Bit arrays are efficient only for small sets. Potentially huge sets, like memory ranges, require another representation. ivlset_t is used for a list of memory locations in our decompiler.

Definition at line 1965 of file hexrays.hpp.

◆ uval_ivl_t

typedef ivl_tpl<uval_t> uval_ivl_t

Definition at line 1838 of file hexrays.hpp.

◆ uvlr_t

typedef uint64 uvlr_t

Definition at line 301 of file hexrays.hpp.

◆ voff_set_t

typedef std::set<voff_t> voff_set_t

Definition at line 258 of file hexrays.hpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Definition at line 303 of file hexrays.hpp.

◆ allow_unused_labels_t

Unused label disposition.

Enumerator
FORBID_UNUSED_LABELS 

Unused labels cause interr.

ALLOW_UNUSED_LABELS 

Unused labels are permitted.

Definition at line 6670 of file hexrays.hpp.

◆ cmpop_t

enum cmpop_t

Definition at line 308 of file hexrays.hpp.

◆ cmt_retrieval_type_t

Comment retrieval type.

Ctree remembers what comments have already been retrieved. This is done because our mechanism of item_precisers is still not perfect and in theory some listing lines cannot be told apart. To avoid comment duplication, we remember if a comment has already been used or not.

Enumerator
RETRIEVE_ONCE 

Retrieve comment if it has not been used yet.

RETRIEVE_ALWAYS 

Retrieve comment even if it has been used.

Definition at line 5951 of file hexrays.hpp.

◆ ctree_maturity_t

Ctree maturity level.

The level will increase as we switch from one phase of ctree generation to the next one

Enumerator
CMAT_ZERO 

does not exist

CMAT_BUILT 

just generated

CMAT_TRANS1 

applied first wave of transformations

CMAT_NICE 

nicefied expressions

CMAT_TRANS2 

applied second wave of transformations

CMAT_CPA 

corrected pointer arithmetic

CMAT_TRANS3 

applied third wave of transformations

CMAT_CASTED 

added necessary casts

CMAT_FINAL 

ready-to-use

Definition at line 5877 of file hexrays.hpp.

◆ ctype_t

enum ctype_t

Ctree item code.

At the beginning of this list there are expression codes (cot_...), followed by statement codes (cit_...).

Enumerator
cot_comma 

x, y

cot_asg 

x = y

cot_asgbor 

x |= y

cot_asgxor 

x ^= y

cot_asgband 

x &= y

cot_asgadd 

x += y

cot_asgsub 

x -= y

cot_asgmul 

x *= y

cot_asgsshr 

x >>= y signed

cot_asgushr 

x >>= y unsigned

cot_asgshl 

x <<= y

cot_asgsdiv 

x /= y signed

cot_asgudiv 

x /= y unsigned

cot_asgsmod 

x %= y signed

cot_asgumod 

x %= y unsigned

cot_tern 

x ? y : z

cot_lor 

x || y

cot_land 

x && y

cot_bor 

x | y

cot_xor 

x ^ y

cot_band 

x & y

cot_eq 

x == y int or fpu (see EXFL_FPOP)

cot_ne 

x != y int or fpu (see EXFL_FPOP)

cot_sge 

x >= y signed or fpu (see EXFL_FPOP)

cot_uge 

x >= y unsigned

cot_sle 

x <= y signed or fpu (see EXFL_FPOP)

cot_ule 

x <= y unsigned

cot_sgt 

x > y signed or fpu (see EXFL_FPOP)

cot_ugt 

x > y unsigned

cot_slt 

x < y signed or fpu (see EXFL_FPOP)

cot_ult 

x < y unsigned

cot_sshr 

x >> y signed

cot_ushr 

x >> y unsigned

cot_shl 

x << y

cot_add 

x + y

cot_sub 

x - y

cot_mul 

x * y

cot_sdiv 

x / y signed

cot_udiv 

x / y unsigned

cot_smod 

x % y signed

cot_umod 

x % y unsigned

cot_fadd 

x + y fp

cot_fsub 

x - y fp

cot_fmul 

x * y fp

cot_fdiv 

x / y fp

cot_fneg 

-x fp

cot_neg 

-x

cot_cast 

(type)x

cot_lnot 

!x

cot_bnot 

~x

cot_ptr 

*x, access size in 'ptrsize'

cot_ref 

&x

cot_postinc 

x++

cot_postdec 

x–

cot_preinc 

++x

cot_predec 

–x

cot_call 

x(...)

cot_idx 

x[y]

cot_memref 

x.m

cot_memptr 

x->m, access size in 'ptrsize'

cot_num 

n

cot_fnum 

fpc

cot_str 

string constant (user representation)

cot_obj 

obj_ea

cot_var 

v

cot_insn 

instruction in expression, internal representation only

cot_sizeof 

sizeof(x)

cot_helper 

arbitrary name

cot_type 

arbitrary type

cit_empty 

instruction types start here

cit_block 

block-statement: { ... }

cit_expr 

expression-statement: expr;

cit_if 

if-statement

cit_for 

for-statement

cit_while 

while-statement

cit_do 

do-statement

cit_switch 

switch-statement

cit_break 

break-statement

cit_continue 

continue-statement

cit_return 

return-statement

cit_goto 

goto-statement

cit_asm 

asm-statement

Definition at line 5478 of file hexrays.hpp.

◆ cursor_item_type_t

Type of the cursor item.

Enumerator
VDI_NONE 

undefined

VDI_EXPR 

c-tree item

VDI_LVAR 

declaration of local variable

VDI_FUNC 

the function itself (the very first line with the function prototype)

VDI_TAIL 

cursor is at (beyond) the line end (commentable line)

Definition at line 6599 of file hexrays.hpp.

◆ funcrole_t

enum funcrole_t

Function roles.

They are used to calculate use/def lists and to recognize functions without using string comparisons.

Enumerator
ROLE_UNK 

unknown function role

ROLE_EMPTY 

empty, does not do anything (maybe spoils regs)

ROLE_MEMSET 

memset(void *dst, uchar value, size_t count);

ROLE_MEMSET32 

memset32(void *dst, uint32 value, size_t count);

ROLE_MEMSET64 

memset64(void *dst, uint64 value, size_t count);

ROLE_MEMCPY 

memcpy(void *dst, const void *src, size_t count);

ROLE_STRCPY 

strcpy(char *dst, const char *src);

ROLE_STRLEN 

strlen(const char *src);

ROLE_STRCAT 

strcat(char *dst, const char *src);

ROLE_TAIL 

char *tail(const char *str);

ROLE_BUG 

BUG() helper macro: never returns, causes exception.

ROLE_ALLOCA 

alloca() function

ROLE_BSWAP 

bswap() function (any size)

ROLE_PRESENT 

present() function (used in patterns)

ROLE_CONTAINING_RECORD 

CONTAINING_RECORD() macro.

ROLE_FASTFAIL 

__fastfail()

ROLE_READFLAGS 

__readeflags, __readcallersflags

ROLE_IS_MUL_OK 

is_mul_ok

ROLE_SATURATED_MUL 

saturated_mul

ROLE_BITTEST 

[lock] bt

ROLE_BITTESTANDSET 

[lock] bts

ROLE_BITTESTANDRESET 

[lock] btr

ROLE_BITTESTANDCOMPLEMENT 

[lock] btc

ROLE_VA_ARG 

va_arg() macro

ROLE_VA_COPY 

va_copy() function

ROLE_VA_START 

va_start() function

ROLE_VA_END 

va_end() function

ROLE_ROL 

rotate left

ROLE_ROR 

rotate right

ROLE_CFSUB3 

carry flag after subtract with carry

ROLE_OFSUB3 

overflow flag after subtract with carry

ROLE_ABS 

integer absolute value

ROLE_3WAYCMP0 

3-way compare helper, returns -1/0/1

ROLE_3WAYCMP1 

3-way compare helper, returns 0/1/2

ROLE_WMEMCPY 

wchar_t *wmemcpy(wchar_t *dst, const wchar_t *src, size_t n)

ROLE_WMEMSET 

wchar_t *wmemset(wchar_t *dst, wchar_t wc, size_t n)

ROLE_WCSCPY 

wchar_t *wcscpy(wchar_t *dst, const wchar_t *src);

ROLE_WCSLEN 

size_t wcslen(const wchar_t *s)

ROLE_WCSCAT 

wchar_t *wcscat(wchar_t *dst, const wchar_t *src)

ROLE_SSE_CMP4 

e.g. _mm_cmpgt_ss

ROLE_SSE_CMP8 

e.g. _mm_cmpgt_sd

Definition at line 3032 of file hexrays.hpp.

◆ gctype_t

enum gctype_t

Kind of use-def and def-use chains.

Enumerator
GC_REGS_AND_STKVARS 

registers and stkvars (restricted memory only)

GC_ASR 

all the above and assertions

GC_XDSU 

only registers calculated with FULL_XDSU

GC_END 

number of chain types

GC_DIRTY_ALL 

bitmask to represent all chains

Definition at line 4999 of file hexrays.hpp.

◆ hexcall_t

enum hexcall_t

API call numbers.

Definition at line 7859 of file hexrays.hpp.

◆ input_device_t

Type of the input device.

How the user command has been invoked

Enumerator
USE_KEYBOARD 

Keyboard.

USE_MOUSE 

Mouse.

Definition at line 7438 of file hexrays.hpp.

◆ item_preciser_t

Comment item preciser.

Item preciser is used to assign comments to ctree items A ctree item may have several comments attached to it. For example, an if-statement may have the following comments:

 if ( ... )    // cmt1
 {             // cmt2
 }             // cmt3
 else          // cmt4
 {                     -- usually the else block has a separate ea
 } 

The first 4 comments will have the same ea. In order to denote the exact line for the comment, we store the item_preciser along with ea.

Enumerator
ITP_EMPTY 

nothing

ITP_ARG1 

, (64 entries are reserved for 64 call arguments)

ITP_ASM 

__asm-line

ITP_ELSE 

else-line

ITP_DO 

do-line

ITP_SEMI 

semicolon

ITP_CURLY1 

{

ITP_CURLY2 

}

ITP_BRACE2 

)

ITP_COLON 

: (label)

ITP_BLOCK1 

opening block comment.

this comment is printed before the item (other comments are indented and printed after the item)

ITP_BLOCK2 

closing block comment.

ITP_CASE 

bit for switch cases

ITP_SIGN 

if this bit is set too, then we have a negative case value

Definition at line 5903 of file hexrays.hpp.

◆ mba_maturity_t

Microcode maturity levels.

Enumerator
MMAT_ZERO 

microcode does not exist

MMAT_GENERATED 

generated microcode

MMAT_PREOPTIMIZED 

preoptimized pass is complete

MMAT_LOCOPT 

local optimization of each basic block is complete.

control flow graph is ready too.

MMAT_CALLS 

detected call arguments

MMAT_GLBOPT1 

performed the first pass of global optimization

MMAT_GLBOPT2 

most global optimization passes are done

MMAT_GLBOPT3 

completed all global optimization. microcode is fixed now.

MMAT_LVARS 

allocated local variables

Definition at line 4297 of file hexrays.hpp.

◆ mblock_type_t

Basic block types.

Enumerator
BLT_NONE 

unknown block type

BLT_STOP 

stops execution regularly (must be the last block)

BLT_0WAY 

does not have successors (tail is a noret function)

BLT_1WAY 

passes execution to one block (regular or goto block)

BLT_2WAY 

passes execution to two blocks (conditional jump)

BLT_NWAY 

passes execution to many blocks (switch idiom)

BLT_XTRN 

external block (out of function address)

Definition at line 3747 of file hexrays.hpp.

◆ mcode_t

enum mcode_t

Definition at line 538 of file hexrays.hpp.

◆ memreg_index_t

< memory region types

Enumerator
MMIDX_GLBLOW 

global memory: low part

MMIDX_LVARS 

stack: local variables

MMIDX_RETADDR 

stack: return address

MMIDX_SHADOW 

stack: shadow arguments

MMIDX_ARGS 

stack: regular stack arguments

MMIDX_GLBHIGH 

global memory: high part

Definition at line 4312 of file hexrays.hpp.

◆ merror_t

enum merror_t
Enumerator
MERR_OK 

ok

MERR_BLOCK 

no error, switch to new block

MERR_INTERR 

internal error

MERR_INSN 

cannot convert to microcode

MERR_MEM 

not enough memory

MERR_BADBLK 

bad block found

MERR_BADSP 

positive sp value has been found

MERR_PROLOG 

prolog analysis failed

MERR_SWITCH 

wrong switch idiom

MERR_EXCEPTION 

exception analysis failed

MERR_HUGESTACK 

stack frame is too big

MERR_LVARS 

local variable allocation failed

MERR_BITNESS 

16-bit functions cannot be decompiled

MERR_BADCALL 

could not determine call arguments

MERR_BADFRAME 

function frame is wrong

MERR_UNKTYPE 

undefined type s (currently unused error code)

MERR_BADIDB 

inconsistent database information

MERR_SIZEOF 

wrong basic type sizes in compiler settings

MERR_REDO 

redecompilation has been requested

MERR_CANCELED 

decompilation has been cancelled

MERR_RECDEPTH 

max recursion depth reached during lvar allocation

MERR_OVERLAP 

variables would overlap: s

MERR_PARTINIT 

partially initialized variable s

MERR_COMPLEX 

too complex function

MERR_LICENSE 

no license available

MERR_ONLY32 

only 32-bit functions can be decompiled for the current database

MERR_ONLY64 

only 64-bit functions can be decompiled for the current database

MERR_BUSY 

already decompiling a function

MERR_FARPTR 

far memory model is supported only for pc

MERR_EXTERN 

special segments cannot be decompiled

MERR_FUNCSIZE 

too big function

MERR_BADRANGES 

bad input ranges

MERR_BADARCH 

current architecture is not supported

MERR_DSLOT 

bad instruction in the delay slot

MERR_STOP 

no error, stop the analysis

MERR_CLOUD 

cloud: s

MERR_LOOP 

internal code: redo last loop (never reported)

Definition at line 479 of file hexrays.hpp.

◆ side_effect_t

How to handle side effect of change_size() Sometimes we need to create a temporary operand and change its size in order to check some hypothesis.

If we revert our changes, we do not want that the database (global variables, stack frame, etc) changes in any manner.

Enumerator
NO_SIDEFF 

change operand size but ignore side effects if you decide to keep the changed operand, handle_new_size() must be called

WITH_SIDEFF 

change operand size and handle side effects

ONLY_SIDEFF 

only handle side effects

ANY_REGSIZE 

any register size is permitted

ANY_FPSIZE 

any size of floating operand is permitted

Definition at line 2409 of file hexrays.hpp.

◆ type_source_t

Type source (where the type information comes from)

Definition at line 1036 of file hexrays.hpp.

◆ use_curly_t

Should curly braces be printed?

Enumerator
CALC_CURLY_BRACES 

print curly braces if necessary

NO_CURLY_BRACES 

don't print curly braces

USE_CURLY_BRACES 

print curly braces without any checks

Definition at line 6330 of file hexrays.hpp.

◆ warnid_t

enum warnid_t

Warning ids.

Enumerator
WARN_VARARG_REGS 

0 cannot handle register arguments in vararg function, discarded them

WARN_ILL_PURGED 

1 odd caller purged bytes d, correcting

WARN_ILL_FUNCTYPE 

2 invalid function type has been ignored

WARN_VARARG_TCAL 

3 cannot handle tail call to vararg

WARN_VARARG_NOSTK 

4 call vararg without local stack

WARN_VARARG_MANY 

5 too many varargs, some ignored

WARN_ADDR_OUTARGS 

6 cannot handle address arithmetics in outgoing argument area of stack frame – unused

WARN_DEP_UNK_CALLS 

7 found interdependent unknown calls

WARN_ILL_ELLIPSIS 

8 erroneously detected ellipsis type has been ignored

WARN_GUESSED_TYPE 

9 using guessed type s;

WARN_EXP_LINVAR 

10 failed to expand a linear variable

WARN_WIDEN_CHAINS 

11 failed to widen chains

WARN_BAD_PURGED 

12 inconsistent function type and number of purged bytes

WARN_CBUILD_LOOPS 

13 too many cbuild loops

WARN_NO_SAVE_REST 

14 could not find valid save-restore pair for s

WARN_ODD_INPUT_REG 

15 odd input register s

WARN_ODD_ADDR_USE 

16 odd use of a variable address

WARN_MUST_RET_FP 

17 function return type is incorrect (must be floating point)

WARN_ILL_FPU_STACK 

18 inconsistent fpu stack

WARN_SELFREF_PROP 

19 self-referencing variable has been detected

WARN_WOULD_OVERLAP 

20 variables would overlap: s

WARN_ARRAY_INARG 

21 array has been used for an input argument

WARN_MAX_ARGS 

22 too many input arguments, some ignored

WARN_BAD_FIELD_TYPE 

23 incorrect structure member type for s::s, ignored

WARN_WRITE_CONST 

24 write access to const memory at a has been detected

WARN_BAD_RETVAR 

25 wrong return variable

WARN_FRAG_LVAR 

26 fragmented variable at s may be wrong

WARN_HUGE_STKOFF 

27 exceedingly huge offset into the stack frame

WARN_UNINITED_REG 

28 reference to an uninitialized register has been removed: s

WARN_FIXED_MACRO 

29 fixed broken macro-insn

WARN_WRONG_VA_OFF 

30 wrong offset of va_list variable

WARN_CR_NOFIELD 

31 CONTAINING_RECORD: no field 's' in struct 's' at d

WARN_CR_BADOFF 

32 CONTAINING_RECORD: too small offset d for struct 's'

WARN_BAD_STROFF 

33 user specified stroff has not been processed: s

WARN_BAD_VARSIZE 

34 inconsistent variable size for 's'

WARN_UNSUPP_REG 

35 unsupported processor register 's'

WARN_UNALIGNED_ARG 

36 unaligned function argument 's'

WARN_BAD_STD_TYPE 

37 corrupted or unexisting local type 's'

WARN_BAD_CALL_SP 

38 bad sp value at call

WARN_MISSED_SWITCH 

39 wrong markup of switch jump, skipped it

WARN_BAD_SP 

40 positive sp value a has been found

WARN_BAD_STKPNT 

41 wrong sp change point

WARN_UNDEF_LVAR 

42 variable 's' is possibly undefined

WARN_JUMPOUT 

43 control flows out of bounds

WARN_BAD_VALRNG 

44 values range analysis failed

WARN_BAD_SHADOW 

45 ignored the value written to the shadow area of the succeeding call

WARN_OPT_VALRNG 

46 conditional instruction was optimized away because s

WARN_RET_LOCREF 

47 returning address of temporary local variable 's'

WARN_BAD_MAPDST 

48 too short map destination 's' for variable 's'

WARN_BAD_INSN 

49 bad instruction

WARN_ODD_ABI 

50 encountered odd instruction for the current ABI

WARN_UNBALANCED_STACK 

51 unbalanced stack, ignored a potential tail call

WARN_OPT_VALRNG2 

52 mask 0xX is shortened because s <= 0xX"

WARN_OPT_VALRNG3 

53 masking with 0XX was optimized away because s <= 0xX

WARN_OPT_USELESS_JCND 

54 simplified comparisons for 's': s became s

WARN_MAX 

may be used in notes as a placeholder when the warning id is not available

Definition at line 4210 of file hexrays.hpp.

Function Documentation

◆ accepts_small_udts()

bool accepts_small_udts ( ctype_t  op)

Is the operator allowed on small structure or union?

Definition at line 5669 of file hexrays.hpp.

References cit_return, cot_asg, cot_comma, cot_eq, cot_ne, and cot_tern.

◆ accepts_udts()

bool accepts_udts ( ctype_t  op)

Definition at line 5593 of file hexrays.hpp.

◆ arglocs_overlap()

bool arglocs_overlap ( const vdloc_t loc1,
size_t  w1,
const vdloc_t loc2,
size_t  w2 
)

Do two arglocs overlap?

Definition at line 9875 of file hexrays.hpp.

Referenced by lvar_t::has_common(), and lvar_t::has_common_bit().

◆ asgop()

ctype_t asgop ( ctype_t  cop)

Convert plain operator into assignment operator. For example, cot_add returns cot_asgadd.

Definition at line 11413 of file hexrays.hpp.

◆ asgop_revert()

ctype_t asgop_revert ( ctype_t  cop)

Convert assignment operator into plain operator.

For example, cot_asgadd returns cot_add

Returns
cot_empty is the input operator is not an assignment operator.

Definition at line 11419 of file hexrays.hpp.

◆ block_chains_begin()

block_chains_iterator_t block_chains_begin ( const block_chains_t set)

Get iterator pointing to the beginning of block_chains_t.

Definition at line 9493 of file hexrays.hpp.

◆ block_chains_clear()

void block_chains_clear ( block_chains_t set)

Clear block_chains_t.

Definition at line 9534 of file hexrays.hpp.

◆ block_chains_end()

block_chains_iterator_t block_chains_end ( const block_chains_t set)

Get iterator pointing to the end of block_chains_t.

Definition at line 9502 of file hexrays.hpp.

◆ block_chains_erase()

void block_chains_erase ( block_chains_t set,
block_chains_iterator_t  p 
)

Erase current element from block_chains_t.

Definition at line 9527 of file hexrays.hpp.

◆ block_chains_find()

block_chains_iterator_t block_chains_find ( const block_chains_t set,
const chain_t val 
)

Find the specified key in set block_chains_t.

Definition at line 9475 of file hexrays.hpp.

◆ block_chains_free()

void block_chains_free ( block_chains_t set)

Delete block_chains_t instance.

Definition at line 9548 of file hexrays.hpp.

◆ block_chains_get()

chain_t & block_chains_get ( block_chains_iterator_t  p)

Get reference to the current set value.

Definition at line 9468 of file hexrays.hpp.

◆ block_chains_insert()

block_chains_iterator_t block_chains_insert ( block_chains_t set,
const chain_t val 
)

Insert new (chain_t) into set block_chains_t.

Definition at line 9484 of file hexrays.hpp.

◆ block_chains_new()

block_chains_t * block_chains_new ( )

Create a new block_chains_t instance.

Definition at line 9555 of file hexrays.hpp.

◆ block_chains_next()

Move to the next element.

Definition at line 9511 of file hexrays.hpp.

◆ block_chains_prev()

Move to the previous element.

Definition at line 9519 of file hexrays.hpp.

◆ block_chains_size()

size_t block_chains_size ( block_chains_t set)

Get size of block_chains_t.

Definition at line 9541 of file hexrays.hpp.

◆ boundaries_begin()

boundaries_iterator_t boundaries_begin ( const boundaries_t *  map)

Get iterator pointing to the beginning of boundaries_t.

Definition at line 9391 of file hexrays.hpp.

◆ boundaries_clear()

void boundaries_clear ( boundaries_t *  map)

Clear boundaries_t.

Definition at line 9432 of file hexrays.hpp.

◆ boundaries_end()

boundaries_iterator_t boundaries_end ( const boundaries_t *  map)

Get iterator pointing to the end of boundaries_t.

Definition at line 9400 of file hexrays.hpp.

◆ boundaries_erase()

void boundaries_erase ( boundaries_t *  map,
boundaries_iterator_t  p 
)

Erase current element from boundaries_t.

Definition at line 9425 of file hexrays.hpp.

◆ boundaries_find()

boundaries_iterator_t boundaries_find ( const boundaries_t *  map,
const cinsn_t *&  key 
)

Find the specified key in boundaries_t.

Definition at line 9373 of file hexrays.hpp.

◆ boundaries_first()

cinsn_t *const & boundaries_first ( boundaries_iterator_t  p)

Get reference to the current map key.

Definition at line 9359 of file hexrays.hpp.

◆ boundaries_free()

void boundaries_free ( boundaries_t *  map)

Delete boundaries_t instance.

Definition at line 9446 of file hexrays.hpp.

◆ boundaries_insert()

boundaries_iterator_t boundaries_insert ( boundaries_t *  map,
const cinsn_t *&  key,
const rangeset_t &  val 
)

Insert new (cinsn_t *, rangeset_t) pair into boundaries_t.

Definition at line 9382 of file hexrays.hpp.

◆ boundaries_new()

boundaries_t * boundaries_new ( )

Create a new boundaries_t instance.

Definition at line 9453 of file hexrays.hpp.

◆ boundaries_next()

Move to the next element.

Definition at line 9409 of file hexrays.hpp.

◆ boundaries_prev()

Move to the previous element.

Definition at line 9417 of file hexrays.hpp.

◆ boundaries_second()

rangeset_t & boundaries_second ( boundaries_iterator_t  p)

Get reference to the current map value.

Definition at line 9366 of file hexrays.hpp.

◆ boundaries_size()

size_t boundaries_size ( boundaries_t *  map)

Get size of boundaries_t.

Definition at line 9439 of file hexrays.hpp.

◆ call_helper()

cexpr_t * call_helper ( const tinfo_t &  rettype,
carglist_t args,
const char *  format,
  ... 
)

Definition at line 6730 of file hexrays.hpp.

◆ checkout_hexrays_license()

bool checkout_hexrays_license ( bool  silent)

Check out a floating decompiler license.

This function will display a dialog box if the license is not available. For non-floating licenses this function is effectively no-op. It is not necessary to call this function before decompiling. If the license was not checked out, the decompiler will automatically do it. This function can be used to check out a license in advance and ensure that a license is available.

Parameters
silentsilently fail if the license cannot be checked out.
Returns
false if failed

Definition at line 11333 of file hexrays.hpp.

◆ clear_cached_cfuncs()

void clear_cached_cfuncs ( void  )

Flush all cached decompilation results.

Definition at line 12117 of file hexrays.hpp.

◆ close_hexrays_waitbox()

void close_hexrays_waitbox ( void  )

Close the waitbox displayed by the decompiler.

Useful if DECOMP_NO_HIDE was used during decompilation.

Definition at line 12087 of file hexrays.hpp.

◆ close_pseudocode()

bool close_pseudocode ( TWidget f)

Close pseudocode window.

Parameters
fpointer to window
Returns
false if failed

Definition at line 11345 of file hexrays.hpp.

◆ convert_to_user_call()

merror_t convert_to_user_call ( const udcall_t udc,
codegen_t cdg 
)

try to generate user-defined call for an instruction

Returns
Microcode error codes code: MERR_OK - user-defined call generated else - error (MERR_INSN == inacceptable udc.tif)

Definition at line 9995 of file hexrays.hpp.

◆ create_cfunc()

cfuncptr_t create_cfunc ( mba_t mba)

Create a new cfunc_t object.

Parameters
mbamicrocode object. After creating the cfunc object it takes the ownership of MBA.

Definition at line 12105 of file hexrays.hpp.

◆ create_field_name()

qstring create_field_name ( const tinfo_t &  type,
uval_t  offset = BADADDR 
)

Definition at line 12135 of file hexrays.hpp.

◆ create_helper()

cexpr_t * create_helper ( bool  standalone,
const tinfo_t &  type,
const char *  format,
  ... 
)

Definition at line 6708 of file hexrays.hpp.

◆ create_typedef() [1/2]

tinfo_t create_typedef ( const char *  name)

Create a reference to a named type.

Parameters
nametype name
Returns
type which refers to the specified name. For example, if name is "DWORD", the type info which refers to "DWORD" is created.

Definition at line 9831 of file hexrays.hpp.

◆ create_typedef() [2/2]

tinfo_t create_typedef ( int  n)

Create a reference to an ordinal type.

Parameters
nordinal number of the type
Returns
type which refers to the specified ordinal. For example, if n is 1, the type info which refers to ordinal type 1 is created.

Definition at line 1028 of file hexrays.hpp.

◆ decompile()

cfuncptr_t decompile ( const mba_ranges_t mbr,
hexrays_failure_t hf,
int  decomp_flags = 0 
)

Decompile a snippet or a function.

Parameters
mbrwhat to decompile
hfextended error information (if failed)
decomp_flagsbitwise combination of decompile() flags... bits
Returns
pointer to the decompilation result (a reference counted pointer). nullptr if failed.
Examples
hexrays_sample1.cpp, and hexrays_sample14.cpp.

Definition at line 12093 of file hexrays.hpp.

Referenced by decompile_func(), and decompile_snippet().

◆ decompile_func()

cfuncptr_t decompile_func ( func_t *  pfn,
hexrays_failure_t hf,
int  decomp_flags = 0 
)

Decompile a function.

Multiple decompilations of the same function return the same object.

Parameters
pfnpointer to function to decompile
hfextended error information (if failed)
decomp_flagsbitwise combination of decompile() flags... bits
Returns
pointer to the decompilation result (a reference counted pointer). nullptr if failed.

Definition at line 7096 of file hexrays.hpp.

References decompile().

◆ decompile_many()

bool decompile_many ( const char *  outfile,
const eavec_t *  funcaddrs,
int  flags 
)

Batch decompilation.

Decompile all or the specified functions

Returns
true if no internal error occurred and the user has not cancelled decompilation
Parameters
outfilename of the output file
funcaddrslist of functions to decompile. If nullptr or empty, then decompile all nonlib functions
flagsBatch decompilation bits

Definition at line 11357 of file hexrays.hpp.

◆ decompile_snippet()

cfuncptr_t decompile_snippet ( const rangevec_t &  ranges,
hexrays_failure_t hf,
int  decomp_flags = 0 
)

Decompile a snippet.

Parameters
rangessnippet ranges. ranges[0].start_ea is the entry point
hfextended error information (if failed)
decomp_flagsbitwise combination of decompile() flags... bits
Returns
pointer to the decompilation result (a reference counted pointer). nullptr if failed.

Definition at line 7113 of file hexrays.hpp.

References decompile().

◆ dereference()

cexpr_t * dereference ( cexpr_t e,
int  ptrsize,
bool  is_flt = false 
)

Dereference a pointer.

This function dereferences a pointer expression. It performs the following conversion: "ptr" => "*ptr" It can handle discrepancies in the pointer type and the access size.

Parameters
eexpression to deference
ptrsizeaccess size
is_fltdereferencing for floating point access?
Returns
dereferenced expression

Definition at line 11821 of file hexrays.hpp.

◆ dstr()

const char * dstr ( const tinfo_t *  tif)

Print the specified type info.

This function can be used from a debugger by typing "tif->dstr()"

Examples
hexrays_sample18.cpp.

Definition at line 9749 of file hexrays.hpp.

◆ dummy_ptrtype()

tinfo_t dummy_ptrtype ( int  ptrsize,
bool  isfp 
)

Generate a dummy pointer type.

Parameters
ptrsizesize of pointed object
isfpis floating point object?

Definition at line 9809 of file hexrays.hpp.

◆ eamap_begin()

eamap_iterator_t eamap_begin ( const eamap_t *  map)

Get iterator pointing to the beginning of eamap_t.

Definition at line 9282 of file hexrays.hpp.

◆ eamap_clear()

void eamap_clear ( eamap_t *  map)

Clear eamap_t.

Definition at line 9323 of file hexrays.hpp.

◆ eamap_end()

eamap_iterator_t eamap_end ( const eamap_t *  map)

Get iterator pointing to the end of eamap_t.

Definition at line 9291 of file hexrays.hpp.

◆ eamap_erase()

void eamap_erase ( eamap_t *  map,
eamap_iterator_t  p 
)

Erase current element from eamap_t.

Definition at line 9316 of file hexrays.hpp.

◆ eamap_find()

eamap_iterator_t eamap_find ( const eamap_t *  map,
const ea_t &  key 
)

Find the specified key in eamap_t.

Definition at line 9264 of file hexrays.hpp.

◆ eamap_first()

ea_t const & eamap_first ( eamap_iterator_t  p)

Get reference to the current map key.

Definition at line 9250 of file hexrays.hpp.

◆ eamap_free()

void eamap_free ( eamap_t *  map)

Delete eamap_t instance.

Definition at line 9337 of file hexrays.hpp.

◆ eamap_insert()

eamap_iterator_t eamap_insert ( eamap_t *  map,
const ea_t &  key,
const cinsnptrvec_t val 
)

Insert new (ea_t, cinsnptrvec_t) pair into eamap_t.

Definition at line 9273 of file hexrays.hpp.

◆ eamap_new()

eamap_t * eamap_new ( )

Create a new eamap_t instance.

Definition at line 9344 of file hexrays.hpp.

◆ eamap_next()

Move to the next element.

Definition at line 9300 of file hexrays.hpp.

◆ eamap_prev()

Move to the previous element.

Definition at line 9308 of file hexrays.hpp.

◆ eamap_second()

cinsnptrvec_t & eamap_second ( eamap_iterator_t  p)

Get reference to the current map value.

Definition at line 9257 of file hexrays.hpp.

◆ eamap_size()

size_t eamap_size ( eamap_t *  map)

Get size of eamap_t.

Definition at line 9330 of file hexrays.hpp.

◆ ENUM_SIZE()

enum hexrays_event_t ENUM_SIZE ( int  )

Decompiler events.

Use install_hexrays_callback() to install a handler for decompiler events. When the possible return value is not specified, your callback must return zero.

< Flowchart has been generated.

Parameters
fc(qflow_chart_t *)

< SP change points have been calculated.

Parameters
mba(mba_t *)
stkpnts(stkpnts_t *) return Microcode error codes code

< Prolog analysis has been finished.

Parameters
mba(mba_t *)
fc(qflow_chart_t *)
reachable_blocks(bitset_t *)
decomp_flags(int) return Microcode error codes code

< Microcode has been generated.

Parameters
mba(mba_t *) return Microcode error codes code

< Microcode has been preoptimized.

Parameters
mba(mba_t *) return Microcode error codes code

< Basic block level optimization has been finished.

Parameters
mba(mba_t *) return Microcode error codes code

< Local variables: preallocation step begins.

Parameters
mba(mba_t *) This event may occur several times. Should return: 1 if modified microcode Negative values are Microcode error codes error codes

< Global optimization has been finished. If microcode is modified, MERR_LOOP must be returned. It will cause a complete restart of the optimization.

Parameters
mba(mba_t *) return Microcode error codes code

< Structural analysis has been finished.

Parameters
ct(control_graph_t *)

< Ctree maturity level is being changed.

Parameters
cfunc(cfunc_t *)
new_maturity(ctree_maturity_t)

< Internal error has occurred.

Parameters
errcode(int )

< Trying to combine instructions of basic block.

Parameters
blk(mblock_t *)
insn(minsn_t *) Should return: 1 if combined the current instruction with a preceding one

< Printing ctree and generating text.

Parameters
cfunc(cfunc_t *)
vp(vc_printer_t *) Returns: 1 if text has been generated by the plugin It is forbidden to modify ctree at this event.

< Function text has been generated. Plugins may modify the text in cfunc_t::sv. The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store pointers to ctree items.

Parameters
cfunc(cfunc_t *)

< The optimizer is about to resolve stack addresses.

Parameters
mba(mba_t *)

< Analyzing a call instruction.

Parameters
blk(mblock_t *) blk->tail is the call.
type(tinfo_t *) buffer for the output type.
callinfo(mcallinfo_t **) prepared callinfo. The plugin should either specify the function type, either allocate and return a new mcallinfo_t object.

< New pseudocode view has been opened.

Parameters
vu(vdui_t *)

< Existing pseudocode view has been reloaded with a new function. Its text has not been refreshed yet, only cfunc and mba pointers are ready.

Parameters
vu(vdui_t *)

< Existing pseudocode text has been refreshed.

< Adding/removing pseudocode lines is forbidden in this event.

Parameters
vu(vdui_t *) See also hxe_text_ready, which happens earlier

< Pseudocode view is being closed.

Parameters
vu(vdui_t *)

< Keyboard has been hit.

Parameters
vu(vdui_t *)
key_code(int) VK_...
shift_state(int) Should return: 1 if the event has been handled

< Mouse right click. Use hxe_populating_popup instead, in case you want to add items in the popup menu.

Parameters
vu(vdui_t *)

< Mouse double click.

Parameters
vu(vdui_t *)
shift_state(int) Should return: 1 if the event has been handled

< Current cursor position has been changed. (for example, by left-clicking or using keyboard)

Parameters
vu(vdui_t *)

< Create a hint for the current item.

See also
ui_get_custom_viewer_hint
Parameters
vu(vdui_t *)
hint(qstring *)
important_lines(int *) Possible return values:
Return values
0continue collecting hints with other subscribers
1stop collecting hints

< Decompiled text is ready.

Parameters
vu(vdui_t *) This event can be used to modify the output text (sv). Obsolete. Please use hxe_func_printed instead.

< Populating popup menu. We can add menu items now.

Parameters
widget(TWidget *)
popup_handle(TPopupMenu *)
vu(vdui_t *)

< Local variable got renamed.

Parameters
vu(vdui_t *)
v(lvar_t *)
name(const char *)
is_user_name(bool) Please note that it is possible to read/write user settings for lvars directly from the idb.

< Local variable type got changed.

Parameters
vu(vdui_t *)
v(lvar_t *)
tinfo(const tinfo_t *) Please note that it is possible to read/write user settings for lvars directly from the idb.

< Local variable comment got changed.

Parameters
vu(vdui_t *)
v(lvar_t *)
cmt(const char *) Please note that it is possible to read/write user settings for lvars directly from the idb.

< Local variable mapping got changed.

<

Parameters
vu(vdui_t *)
from(lvar_t *)
to(lvar_t *) Please note that it is possible to read/write user settings for lvars directly from the idb.

< Comment got changed.

Parameters
cfunc(cfunc_t *)
loc(const treeloc_t *)
cmt(const char *)

Definition at line 7231 of file hexrays.hpp.

◆ gen_microcode()

mba_t * gen_microcode ( const mba_ranges_t mbr,
hexrays_failure_t hf,
const mlist_t retlist = nullptr,
int  decomp_flags = 0,
mba_maturity_t  reqmat = MMAT_GLBOPT3 
)

Generate microcode of an arbitrary code snippet.

Parameters
mbrsnippet ranges
hfextended error information (if failed)
retlistlist of registers the snippet returns
decomp_flagsbitwise combination of decompile() flags... bits
reqmatrequired microcode maturity
Returns
pointer to the microcode, nullptr if failed.
Examples
hexrays_sample12.cpp, hexrays_sample13.cpp, hexrays_sample15.cpp, and hexrays_sample9.cpp.

Definition at line 12099 of file hexrays.hpp.

◆ get_ctype_name()

const char * get_ctype_name ( ctype_t  op)

Definition at line 12129 of file hexrays.hpp.

◆ get_current_operand()

bool get_current_operand ( gco_info_t out)

Get the instruction operand under the cursor.

This function determines the operand that is under the cursor in the active disassembly listing. If the operand refers to a register or stack variable, it returns true.

Parameters
out[out]output buffer
Examples
hexrays_sample12.cpp, and hexrays_sample15.cpp.

Definition at line 11383 of file hexrays.hpp.

◆ get_float_type()

tinfo_t get_float_type ( int  width)

Get a type of a floating point value with the specified width.

Returns
type info object
Parameters
widthwidth of the desired type

Definition at line 9785 of file hexrays.hpp.

◆ get_hexrays_version()

const char * get_hexrays_version ( void  )

Get decompiler version.

The returned string is of the form <major>.<minor>.<revision>.<build-date>

Returns
pointer to version string. For example: "2.0.0.140605"
Examples
hexrays_sample1.cpp, hexrays_sample10.cpp, hexrays_sample11.cpp, hexrays_sample12.cpp, hexrays_sample13.cpp, hexrays_sample14.cpp, hexrays_sample15.cpp, hexrays_sample16.cpp, hexrays_sample17.cpp, hexrays_sample18.cpp, hexrays_sample2.cpp, hexrays_sample3.cpp, hexrays_sample4.cpp, hexrays_sample5.cpp, hexrays_sample6.cpp, hexrays_sample7.cpp, and hexrays_sample9.cpp.

Definition at line 11327 of file hexrays.hpp.

◆ get_int_type_by_width_and_sign()

tinfo_t get_int_type_by_width_and_sign ( int  srcwidth,
type_sign_t  sign 
)

Create a type info by width and sign.

Returns a simple type (examples: int, short) with the given width and sign.

Parameters
srcwidthsize of the type in bytes
signsign of the type

Definition at line 9793 of file hexrays.hpp.

◆ get_member_type()

bool get_member_type ( const member_t *  mptr,
tinfo_t *  type 
)

Get type of a structure field.

This function performs validity checks of the field type. Wrong types are rejected.

Parameters
mptrstructure field
typepointer to the variable where the type is returned. This parameter can be nullptr.
Returns
false if failed

Definition at line 9817 of file hexrays.hpp.

◆ get_merror_desc()

ea_t get_merror_desc ( qstring *  out,
merror_t  code,
mba_t mba 
)

Get textual description of an error code.

Parameters
outthe output buffer for the error description
codeMicrocode error codes
mbathe microcode array
Returns
the error address
Examples
hexrays_sample12.cpp.

Definition at line 9663 of file hexrays.hpp.

◆ get_mreg_name()

int get_mreg_name ( qstring *  out,
mreg_t  reg,
int  width,
void *  ud = nullptr 
)

Get the microregister name.

Parameters
outoutput buffer, may be nullptr
regmicroregister number
widthsize of microregister in bytes. may be bigger than the real register size.
udreserved, must be nullptr
Returns
width of the printed register. this value may be less than the WIDTH argument.

Definition at line 10334 of file hexrays.hpp.

◆ get_op_signness()

type_sign_t get_op_signness ( ctype_t  op)

Get operator sign. Meaningful for sign-dependent operators, like cot_sdiv.

Definition at line 11407 of file hexrays.hpp.

◆ get_signed_mcode()

THREAD_SAFE mcode_t get_signed_mcode ( mcode_t  code)

Definition at line 9695 of file hexrays.hpp.

◆ get_temp_regs()

const mlist_t & get_temp_regs ( void  )

Get list of temporary registers.

Tempregs are temporary registers that are used during code generation. They do not map to regular processor registers. They are used only to store temporary values during execution of one instruction. Tempregs may not be used to pass a value from one block to another. In other words, at the end of a block all tempregs must be dead.

Definition at line 10310 of file hexrays.hpp.

◆ get_type()

bool get_type ( uval_t  id,
tinfo_t *  tif,
type_source_t  guess 
)

Get a global type.

Global types are types of addressable objects and struct/union/enum types

Parameters
idaddress or id of the object
tifbuffer for the answer
guesswhat kind of types to consider
Returns
success

Definition at line 9839 of file hexrays.hpp.

◆ get_unk_type()

tinfo_t get_unk_type ( int  size)

Create a partial type info by width.

Returns a partially defined type (examples: _DWORD, _BYTE) with the given width.

Parameters
sizesize of the type in bytes

Definition at line 9801 of file hexrays.hpp.

◆ get_unsigned_mcode()

THREAD_SAFE mcode_t get_unsigned_mcode ( mcode_t  code)

Definition at line 9701 of file hexrays.hpp.

◆ get_widget_vdui()

vdui_t * get_widget_vdui ( TWidget f)

Get the vdui_t instance associated to the TWidget.

Parameters
fpointer to window
Returns
a vdui_t *, or nullptr
Examples
hexrays_sample17.cpp, hexrays_sample3.cpp, and hexrays_sample5.cpp.

Definition at line 11351 of file hexrays.hpp.

◆ getb_reginsn() [1/2]

const minsn_t * getb_reginsn ( const minsn_t ins)

Skip assertions backward.

Definition at line 10903 of file hexrays.hpp.

◆ getb_reginsn() [2/2]

minsn_t * getb_reginsn ( minsn_t ins)

Definition at line 3743 of file hexrays.hpp.

◆ getf_reginsn() [1/2]

const minsn_t * getf_reginsn ( const minsn_t ins)

Skip assertions forward.

Examples
hexrays_sample11.cpp.

Definition at line 10897 of file hexrays.hpp.

◆ getf_reginsn() [2/2]

minsn_t * getf_reginsn ( minsn_t ins)

Definition at line 3742 of file hexrays.hpp.

◆ has_cached_cfunc()

bool has_cached_cfunc ( ea_t  ea)

Do we have a cached decompilation result for 'ea'?

Definition at line 12123 of file hexrays.hpp.

◆ has_mcode_seloff()

THREAD_SAFE bool has_mcode_seloff ( mcode_t  op)

Definition at line 682 of file hexrays.hpp.

◆ hexrays_alloc()

void * hexrays_alloc ( size_t  size)

Definition at line 9561 of file hexrays.hpp.

◆ hexrays_free()

void hexrays_free ( void *  ptr)

Definition at line 9567 of file hexrays.hpp.

◆ init_hexrays_plugin()

bool init_hexrays_plugin ( int  flags = 0)

Check that your plugin is compatible with hex-rays decompiler.

This function must be called before calling any other decompiler function.

Parameters
flagsreserved, must be 0
Returns
true if the decompiler exists and is compatible with your plugin
Examples
hexrays_sample1.cpp, hexrays_sample10.cpp, hexrays_sample11.cpp, hexrays_sample12.cpp, hexrays_sample13.cpp, hexrays_sample14.cpp, hexrays_sample15.cpp, hexrays_sample16.cpp, hexrays_sample17.cpp, hexrays_sample18.cpp, hexrays_sample2.cpp, hexrays_sample3.cpp, hexrays_sample4.cpp, hexrays_sample5.cpp, hexrays_sample6.cpp, hexrays_sample7.cpp, and hexrays_sample9.cpp.

Definition at line 8464 of file hexrays.hpp.

◆ install_hexrays_callback()

bool install_hexrays_callback ( hexrays_cb_t callback,
void *  ud 
)

Install handler for decompiler events.

Parameters
callbackhandler to install
uduser data. this pointer will be passed to your handler by the decompiler.
Returns
false if failed
Examples
hexrays_sample18.cpp, hexrays_sample2.cpp, hexrays_sample3.cpp, hexrays_sample5.cpp, hexrays_sample6.cpp, and hexrays_sample7.cpp.

Definition at line 12143 of file hexrays.hpp.

◆ install_microcode_filter()

bool install_microcode_filter ( microcode_filter_t filter,
bool  install = true 
)

register/unregister non-standard microcode generator

Parameters
filter- microcode generator object
install- TRUE - register the object, FALSE - unregister
Returns
success

Definition at line 10001 of file hexrays.hpp.

◆ install_optblock_handler()

void install_optblock_handler ( optblock_t opt)

Install a block level custom optimizer.

Parameters
optan instance of optblock_t. cannot be destroyed before calling remove_optblock_handler().
Examples
hexrays_sample11.cpp.

Definition at line 10352 of file hexrays.hpp.

◆ install_optinsn_handler()

void install_optinsn_handler ( optinsn_t opt)

Install an instruction level custom optimizer.

Parameters
optan instance of optinsn_t. cannot be destroyed before calling remove_optinsn_handler().
Examples
hexrays_sample10.cpp, and hexrays_sample16.cpp.

Definition at line 10340 of file hexrays.hpp.

◆ is_additive()

bool is_additive ( ctype_t  op)

Is additive operator?

Definition at line 5610 of file hexrays.hpp.

References cot_add, cot_fadd, cot_fsub, and cot_sub.

◆ is_assignment()

bool is_assignment ( ctype_t  op)

Is assignment operator?

Definition at line 5591 of file hexrays.hpp.

References cot_asg, and cot_asgumod.

◆ is_binary()

bool is_binary ( ctype_t  op)

Is binary operator?

Definition at line 5585 of file hexrays.hpp.

References cot_tern, and op_uses_y().

◆ is_bitop()

bool is_bitop ( ctype_t  op)

Is bit related operator?

Definition at line 5628 of file hexrays.hpp.

References cot_band, cot_bnot, cot_bor, and cot_xor.

◆ is_bool_type()

bool is_bool_type ( const tinfo_t &  type)

Is a boolean type?

Returns
true if the type is a boolean type

Definition at line 9773 of file hexrays.hpp.

◆ is_break_consumer()

bool is_break_consumer ( ctype_t  op)

Does a break statement influence the specified statement code?

Definition at line 5652 of file hexrays.hpp.

References cit_switch, and is_loop().

◆ is_commutative()

bool is_commutative ( ctype_t  op)

Is commutative operator?

Definition at line 5597 of file hexrays.hpp.

References cot_add, cot_band, cot_bor, cot_eq, cot_fadd, cot_fmul, cot_mul, cot_ne, and cot_xor.

◆ is_inplace_def()

THREAD_SAFE bool is_inplace_def ( const tinfo_t &  type)

Is struct/union/enum definition (not declaration)?

Definition at line 957 of file hexrays.hpp.

◆ is_kreg()