Latest available version: IDA and decompilers v8.4.240320sp1 see all releases
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_SPLIT   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_SPLIT   0x0002
 split 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 mop_a: an address obtained from a relocation 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 FUNC_NAME_MORESTACK   "runtime_morestack"
 
#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_PROP_COMPLEX   0x00008000
 allow propagation of more complex variable definitions 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   0x0001FFFF
 
#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 (snippets are never cached) 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
 Obsolete. Use DECOMP_GXREFS_NOUPD. More...
 
#define DECOMP_GXREFS_DEFLT   0x0000
 the default behavior: do not update the global xrefs cache upon decompile() call, but when the pseudocode text is generated (e.g., through cfunc_t.get_pseudocode()) More...
 
#define DECOMP_GXREFS_NOUPD   0x0040
 do not update the global xrefs cache More...
 
#define DECOMP_GXREFS_FORCE   0x0080
 update the global xrefs cache immediately More...
 
#define DECOMP_VOID_MBA   0x0100
 return empty mba object (to be used with gen_microcode) 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 , hx_minsn_t_serialize , hx_minsn_t_deserialize ,
  hx_mba_t_stkoff_vd2ida , hx_mba_t_stkoff_ida2vd , hx_cexpr_t_dstr , hx_cinsn_t_dstr ,
  hx_ctree_item_t_print , hx_ctree_item_t_dstr , hx_mba_t_set_lvar_name , hx_change_hexrays_config ,
  hx_mba_t_get_func_output_lists , hx_vdui_t_rename_udm , hx_vdui_t_set_udm_type , hx_ctree_item_t_get_udm ,
  hx_ctree_item_t_get_edm
}
 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 ()
 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)
 
bool change_hexrays_config (const char *directive)
 Parse DIRECTIVE and update the current configuration variables. More...
 
const char * get_hexrays_version ()
 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 ()
 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 ()
 Close the waitbox displayed by the decompiler. More...
 
cfuncptr_t decompile (const mba_ranges_t &mbr, hexrays_failure_t *hf=nullptr, int decomp_flags=0)
 Decompile a snippet or a function. More...
 
cfuncptr_t decompile_func (func_t *pfn, hexrays_failure_t *hf=nullptr, int decomp_flags=0)
 Decompile a function. More...
 
cfuncptr_t decompile_snippet (const rangevec_t &ranges, hexrays_failure_t *hf=nullptr, int decomp_flags=0)
 Decompile a snippet. More...
 
mba_tgen_microcode (const mba_ranges_t &mbr, hexrays_failure_t *hf=nullptr, const mlist_t *retlist=nullptr, int decomp_flags=0, mba_maturity_t reqmat=MMAT_GLBOPT3)
 Generate microcode of an arbitrary code snippet. More...
 
mba_tcreate_empty_mba (const mba_ranges_t &mbr, hexrays_failure_t *hf=nullptr)
 Create an empty microcode object. 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 ()
 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 4801 of file hexrays.hpp.

◆ ACFL_GLBDEL

#define ACFL_GLBDEL   0x08

perform dead code eliminition

Definition at line 4803 of file hexrays.hpp.

◆ ACFL_GLBPROP

#define ACFL_GLBPROP   0x04

perform global propagation

Definition at line 4802 of file hexrays.hpp.

◆ ACFL_GUESS

#define ACFL_GUESS   0x10

may guess calling conventions

Examples
hexrays_sample12.cpp.

Definition at line 4804 of file hexrays.hpp.

◆ ACFL_LOCOPT

#define ACFL_LOCOPT   0x01

perform local propagation (requires ACFL_BLKOPT)

Definition at line 4800 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 6644 of file hexrays.hpp.

◆ ANCHOR_CITEM

#define ANCHOR_CITEM   0x00000000

c-tree item

Definition at line 6641 of file hexrays.hpp.

◆ ANCHOR_INDEX

#define ANCHOR_INDEX   0x1FFFFFFF

Definition at line 6639 of file hexrays.hpp.

◆ ANCHOR_ITP

#define ANCHOR_ITP   0x80000000

item type preciser

Definition at line 6643 of file hexrays.hpp.

◆ ANCHOR_LVAR

#define ANCHOR_LVAR   0x40000000

declaration of local variable

Definition at line 6642 of file hexrays.hpp.

◆ ANCHOR_MASK

#define ANCHOR_MASK   0xC0000000

Definition at line 6640 of file hexrays.hpp.

◆ CFL_FINAL

#define CFL_FINAL   0x0001

call type is final, should not be changed

Definition at line 6597 of file hexrays.hpp.

◆ CFL_HELPER

#define CFL_HELPER   0x0002

created from a decompiler helper function

Definition at line 6598 of file hexrays.hpp.

◆ CFL_NORET

#define CFL_NORET   0x0004

call does not return

Definition at line 6599 of file hexrays.hpp.

◆ CFS_BOUNDS

#define CFS_BOUNDS   0x0001

'eamap' and 'boundaries' are ready

Definition at line 6967 of file hexrays.hpp.

◆ CFS_LOCKED

#define CFS_LOCKED   0x0008

cfunc is temporarily locked

Definition at line 6970 of file hexrays.hpp.

◆ CFS_LVARS_HIDDEN

#define CFS_LVARS_HIDDEN   0x0004

local variable definitions are collapsed

Definition at line 6969 of file hexrays.hpp.

◆ CFS_TEXT

#define CFS_TEXT   0x0002

'sv' is ready (and hdrlines)

Definition at line 6968 of file hexrays.hpp.

◆ EQ_CMPDEST

#define EQ_CMPDEST   0x0004

compare instruction destinations

Definition at line 3656 of file hexrays.hpp.

◆ EQ_IGNCODE

#define EQ_IGNCODE   0x0002

ignore instruction opcodes

Definition at line 3655 of file hexrays.hpp.

◆ EQ_IGNSIZE

#define EQ_IGNSIZE   0x0001

ignore source operand sizes

Examples
hexrays_sample16.cpp.

Definition at line 3654 of file hexrays.hpp.

◆ EQ_OPTINSN

#define EQ_OPTINSN   0x0008

optimize mop_d operands

Definition at line 3657 of file hexrays.hpp.

◆ FD_BACKWARD

#define FD_BACKWARD   0x0000

search direction

Definition at line 4160 of file hexrays.hpp.

◆ FD_DEF

#define FD_DEF   0x0002

look for definition

Definition at line 4163 of file hexrays.hpp.

◆ FD_DIRTY

#define FD_DIRTY   0x0004

ignore possible implicit definitions by function calls and indirect memory access

Definition at line 4165 of file hexrays.hpp.

◆ FD_FORWARD

#define FD_FORWARD   0x0001

search direction

Definition at line 4161 of file hexrays.hpp.

◆ FD_USE

#define FD_USE   0x0000

look for use

Definition at line 4162 of file hexrays.hpp.

◆ GCA_ALLOC

#define GCA_ALLOC   0x04

enumerate only allocated chains

Definition at line 3442 of file hexrays.hpp.

◆ GCA_EMPTY

#define GCA_EMPTY   0x01

include empty chains

Definition at line 3440 of file hexrays.hpp.

◆ GCA_NALLOC

#define GCA_NALLOC   0x08

enumerate only non-allocated chains

Definition at line 3443 of file hexrays.hpp.

◆ GCA_OFIRST

#define GCA_OFIRST   0x10

consider only chains of the first block

Definition at line 3444 of file hexrays.hpp.

◆ GCA_OLAST

#define GCA_OLAST   0x20

consider only chains of the last block

Definition at line 3445 of file hexrays.hpp.

◆ GCA_SPEC

#define GCA_SPEC   0x02

include chains for special registers

Definition at line 3441 of file hexrays.hpp.

◆ GCO_DEF

#define GCO_DEF   0x0004

is destination operand?

Examples
hexrays_sample12.cpp.

Definition at line 5498 of file hexrays.hpp.

◆ GCO_REG

#define GCO_REG   0x0001

is register? otherwise a stack variable

Definition at line 5496 of file hexrays.hpp.

◆ GCO_STK

#define GCO_STK   0x0000

a stack variable

Definition at line 5495 of file hexrays.hpp.

◆ GCO_USE

#define GCO_USE   0x0002

is source operand?

Examples
hexrays_sample12.cpp.

Definition at line 5497 of file hexrays.hpp.

◆ hexapi

#define hexapi

Public functions are marked with this keyword.

Definition at line 235 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 292 of file hexrays.hpp.

◆ HEXRAYS_PLACEMENT_DELETE

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

Definition at line 291 of file hexrays.hpp.

◆ INS_EPILOG

#define INS_EPILOG   ((cinsn_t *)1)

Definition at line 6941 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 3493 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 3487 of file hexrays.hpp.

◆ IPROP_COMBINED

#define IPROP_COMBINED   0x0800

insn has been modified because of a partial reference

Definition at line 3501 of file hexrays.hpp.

◆ IPROP_DONT_COMB

#define IPROP_DONT_COMB   0x40000

may not combine this instruction with others

Definition at line 3513 of file hexrays.hpp.

◆ IPROP_DONT_PROP

#define IPROP_DONT_PROP   0x20000

may not propagate

Definition at line 3512 of file hexrays.hpp.

◆ IPROP_EXTSTX

#define IPROP_EXTSTX   0x1000

this is m_ext propagated into m_stx

Definition at line 3502 of file hexrays.hpp.

◆ IPROP_FARCALL

#define IPROP_FARCALL   0x0020

call of a far function using push cs/call sequence

Definition at line 3489 of file hexrays.hpp.

◆ IPROP_FPINSN

#define IPROP_FPINSN   0x0010

floating point insn

Definition at line 3488 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 3505 of file hexrays.hpp.

◆ IPROP_INV_JX

#define IPROP_INV_JX   0x4000

inverted conditional jump

Definition at line 3506 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 3515 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 3511 of file hexrays.hpp.

◆ IPROP_OPTIONAL

#define IPROP_OPTIONAL   0x0001

optional instruction

Definition at line 3481 of file hexrays.hpp.

◆ IPROP_PERSIST

#define IPROP_PERSIST   0x0002

persistent insn; they are not destroyed

Definition at line 3482 of file hexrays.hpp.

◆ IPROP_SPLIT

#define IPROP_SPLIT   0x0700

the instruction has been split:

Definition at line 3496 of file hexrays.hpp.

◆ IPROP_SPLIT1

#define IPROP_SPLIT1   0x0100

into 1 byte

Definition at line 3497 of file hexrays.hpp.

◆ IPROP_SPLIT2

#define IPROP_SPLIT2   0x0200

into 2 bytes

Definition at line 3498 of file hexrays.hpp.

◆ IPROP_SPLIT4

#define IPROP_SPLIT4   0x0300

into 4 bytes

Definition at line 3499 of file hexrays.hpp.

◆ IPROP_SPLIT8

#define IPROP_SPLIT8   0x0400

into 8 bytes

Definition at line 3500 of file hexrays.hpp.

◆ IPROP_TAILCALL

#define IPROP_TAILCALL   0x0040

tail call

Definition at line 3490 of file hexrays.hpp.

◆ IPROP_UNMERGED

#define IPROP_UNMERGED   0x100000

'goto' instruction was transformed info 'call'

Definition at line 3516 of file hexrays.hpp.

◆ IPROP_WAS_NORET

#define IPROP_WAS_NORET   0x8000

was noret icall

Definition at line 3507 of file hexrays.hpp.

◆ IPROP_WILDMATCH

#define IPROP_WILDMATCH   0x0004

match multiple insns

Definition at line 3483 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 4777 of file hexrays.hpp.

◆ LOCOPT_REFINE

#define LOCOPT_REFINE   0x0002

refine return type, ok to fail

Definition at line 4778 of file hexrays.hpp.

◆ LOCOPT_REFINE2

#define LOCOPT_REFINE2   0x0004

refine return type, try harder

Definition at line 4779 of file hexrays.hpp.

◆ m_max

#define m_max   0x49

Definition at line 615 of file hexrays.hpp.

◆ MAX_FUNC_ARGS

#define MAX_FUNC_ARGS   64

Definition at line 3122 of file hexrays.hpp.

◆ MAX_SUPPORTED_STACK_SIZE

#define MAX_SUPPORTED_STACK_SIZE   0x100000

Definition at line 286 of file hexrays.hpp.

◆ MAXRANGE

#define MAXRANGE   bitrange_t(0, USHRT_MAX)

Definition at line 3796 of file hexrays.hpp.

◆ MBA2_ALL_FLAGS

#define MBA2_ALL_FLAGS   0x0001FFFF

Definition at line 4541 of file hexrays.hpp.

◆ MBA2_ARGIDX_OK

#define MBA2_ARGIDX_OK   0x00000040

may verify input argument list?

Definition at line 4523 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 4528 of file hexrays.hpp.

◆ MBA2_CODE16_BIT

#define MBA2_CODE16_BIT   0x00000800

the code16 bit removed

Definition at line 4529 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 4537 of file hexrays.hpp.

◆ MBA2_HAS_OUTLINES

#define MBA2_HAS_OUTLINES   0x00002000

calls to outlined code have been inlined

Definition at line 4531 of file hexrays.hpp.

◆ MBA2_INITIAL_FLAGS

#define MBA2_INITIAL_FLAGS   (MBA2_LVARNAMES_OK|MBA2_LVARS_RENAMED)

Definition at line 4539 of file hexrays.hpp.

◆ MBA2_IS_CTR

#define MBA2_IS_CTR   0x00000010

is constructor?

Definition at line 4521 of file hexrays.hpp.

◆ MBA2_IS_DTR

#define MBA2_IS_DTR   0x00000020

is destructor?

Definition at line 4522 of file hexrays.hpp.

◆ MBA2_LVARNAMES_OK

#define MBA2_LVARNAMES_OK   0x00000001

may verify lvar_names?

Definition at line 4517 of file hexrays.hpp.

◆ MBA2_LVARS_RENAMED

#define MBA2_LVARS_RENAMED   0x00000002

accept empty names now?

Definition at line 4518 of file hexrays.hpp.

◆ MBA2_NO_DUP_CALLS

#define MBA2_NO_DUP_CALLS   0x00000080

forbid multiple calls with the same ea

Definition at line 4524 of file hexrays.hpp.

◆ MBA2_NO_DUP_LVARS

#define MBA2_NO_DUP_LVARS   0x00000100

forbid multiple lvars with the same ea

Definition at line 4525 of file hexrays.hpp.

◆ MBA2_NO_FRAME

#define MBA2_NO_FRAME   0x00004000

do not use function frame info (only snippet mode)

Definition at line 4532 of file hexrays.hpp.

◆ MBA2_OVER_CHAINS

#define MBA2_OVER_CHAINS   0x00000004

has overlapped chains?

Definition at line 4519 of file hexrays.hpp.

◆ MBA2_PROP_COMPLEX

#define MBA2_PROP_COMPLEX   0x00008000

allow propagation of more complex variable definitions

Definition at line 4533 of file hexrays.hpp.

◆ MBA2_STACK_RETVAL

#define MBA2_STACK_RETVAL   0x00001000

the return value is on the stack

Definition at line 4530 of file hexrays.hpp.

◆ MBA2_UNDEF_RETVAR

#define MBA2_UNDEF_RETVAR   0x00000200

return value is undefined

Definition at line 4526 of file hexrays.hpp.

◆ MBA2_VALRNG_DONE

#define MBA2_VALRNG_DONE   0x00000008

calculated valranges?

Definition at line 4520 of file hexrays.hpp.

◆ MBA_ASRPROP

#define MBA_ASRPROP   0x00002000

assertion have been propagated

Definition at line 4495 of file hexrays.hpp.

◆ MBA_ASRTOK

#define MBA_ASRTOK   0x00000800

assertions have been generated

Definition at line 4493 of file hexrays.hpp.

◆ MBA_CALLS

#define MBA_CALLS   0x00001000

callinfo has been built

Definition at line 4494 of file hexrays.hpp.

◆ MBA_CHVARS

#define MBA_CHVARS   0x00200000

can verify chain varnums

Definition at line 4502 of file hexrays.hpp.

◆ MBA_CMBBLK

#define MBA_CMBBLK   0x00000400

request to combine blocks

Definition at line 4492 of file hexrays.hpp.

◆ MBA_CMNSTK

#define MBA_CMNSTK   0x00000100

stkvars+stkargs should be considered as one area

Definition at line 4488 of file hexrays.hpp.

◆ MBA_COLGDL

#define MBA_COLGDL   0x00800000

display graph after each reduction

Definition at line 4506 of file hexrays.hpp.

◆ MBA_DELPAIRS

#define MBA_DELPAIRS   0x00100000

pairs have been deleted once

Definition at line 4501 of file hexrays.hpp.

◆ MBA_GLBOPT

#define MBA_GLBOPT   0x00010000

microcode has been optimized globally

Definition at line 4498 of file hexrays.hpp.

◆ MBA_INITIAL_FLAGS

#define MBA_INITIAL_FLAGS
Value:
#define MBA_CMBBLK
request to combine blocks
Definition: hexrays.hpp:4492
#define MBA_WINGR32
use wingraph32
Definition: hexrays.hpp:4510
#define MBA_NICE
apply transformations to c code
Definition: hexrays.hpp:4508
#define MBA_REFINE
may refine return value size
Definition: hexrays.hpp:4509
#define MBA_INSGDL
display instruction in graphs
Definition: hexrays.hpp:4507
#define MBA_PRCDEFS
use precise defeas for chain-allocated lvars
Definition: hexrays.hpp:4480
#define MBA_VALNUM
display value numbers
Definition: hexrays.hpp:4512

Definition at line 4514 of file hexrays.hpp.

◆ MBA_INSGDL

#define MBA_INSGDL   0x01000000

display instruction in graphs

Definition at line 4507 of file hexrays.hpp.

◆ MBA_LOADED

#define MBA_LOADED   0x00000008

loaded gdl, no instructions (debugging)

Definition at line 4483 of file hexrays.hpp.

◆ MBA_LVARS0

#define MBA_LVARS0   0x00040000

lvar pre-allocation has been performed

Definition at line 4499 of file hexrays.hpp.

◆ MBA_LVARS1

#define MBA_LVARS1   0x00080000

lvar real allocation has been performed

Definition at line 4500 of file hexrays.hpp.

◆ MBA_NICE

#define MBA_NICE   0x02000000

apply transformations to c code

Definition at line 4508 of file hexrays.hpp.

◆ MBA_NOFUNC

#define MBA_NOFUNC   0x00000002

function is not present, addresses might be wrong

Definition at line 4481 of file hexrays.hpp.

◆ MBA_NUMADDR

#define MBA_NUMADDR   0x20000000

display definition addresses for numbers

Definition at line 4511 of file hexrays.hpp.

◆ MBA_PASSREGS

#define MBA_PASSREGS   0x00000040

has mcallinfo_t::pass_regs

Definition at line 4486 of file hexrays.hpp.

◆ MBA_PATTERN

#define MBA_PATTERN   0x00000004

microcode pattern, callinfo is present

Definition at line 4482 of file hexrays.hpp.

◆ MBA_PRCDEFS

#define MBA_PRCDEFS   0x00000001

use precise defeas for chain-allocated lvars

Definition at line 4480 of file hexrays.hpp.

◆ MBA_PREOPT

#define MBA_PREOPT   0x00000200

preoptimization stage complete

Definition at line 4491 of file hexrays.hpp.

◆ MBA_REFINE

#define MBA_REFINE   0x04000000

may refine return value size

Definition at line 4509 of file hexrays.hpp.

◆ MBA_RETFP

#define MBA_RETFP   0x00000010

function returns floating point value

Definition at line 4484 of file hexrays.hpp.

◆ MBA_RETREF

#define MBA_RETREF   0x00008000

return type has been refined

Definition at line 4497 of file hexrays.hpp.

◆ MBA_SAVRST

#define MBA_SAVRST   0x00004000

save-restore analysis has been performed

Definition at line 4496 of file hexrays.hpp.

◆ MBA_SHORT

#define MBA_SHORT   0x00400000

use short display

Definition at line 4505 of file hexrays.hpp.

◆ MBA_SPLINFO

#define MBA_SPLINFO   0x00000020

(final_type ? idb_spoiled : spoiled_regs) is valid

Definition at line 4485 of file hexrays.hpp.

◆ MBA_THUNK

#define MBA_THUNK   0x00000080

thunk function

Definition at line 4487 of file hexrays.hpp.

◆ MBA_VALNUM

#define MBA_VALNUM   0x40000000

display value numbers

Definition at line 4512 of file hexrays.hpp.

◆ MBA_WINGR32

#define MBA_WINGR32   0x10000000

use wingraph32

Definition at line 4510 of file hexrays.hpp.

◆ MBL_BACKPROP

#define MBL_BACKPROP   0x1000

performed backprop_cc

Definition at line 3829 of file hexrays.hpp.

◆ MBL_CALL

#define MBL_CALL   0x0800

call information has been built

Definition at line 3828 of file hexrays.hpp.

◆ MBL_COMB

#define MBL_COMB   0x0040

needs "combine" pass

Definition at line 3823 of file hexrays.hpp.

◆ MBL_DEAD

#define MBL_DEAD   0x0100

needs "eliminate deads" pass

Definition at line 3825 of file hexrays.hpp.

◆ MBL_DMT64

#define MBL_DMT64   0x0020

needs "demote 64bits"

Definition at line 3822 of file hexrays.hpp.

◆ MBL_DSLOT

#define MBL_DSLOT   0x4000

block for delay slot

Definition at line 3831 of file hexrays.hpp.

◆ MBL_FAKE

#define MBL_FAKE   0x0002

fake block

Definition at line 3818 of file hexrays.hpp.

◆ MBL_GOTO

#define MBL_GOTO   0x0004

this block is a goto target

Definition at line 3819 of file hexrays.hpp.

◆ MBL_INCONST

#define MBL_INCONST   0x0400

inconsistent lists: we are building them

Definition at line 3827 of file hexrays.hpp.

◆ MBL_KEEP

#define MBL_KEEP   0x10000

do not remove even if unreachable

Definition at line 3833 of file hexrays.hpp.

◆ MBL_LIST

#define MBL_LIST   0x0200

use/def lists are ready (not dirty)

Definition at line 3826 of file hexrays.hpp.

◆ MBL_NONFAKE

#define MBL_NONFAKE   0x0000

regular block

Definition at line 3817 of file hexrays.hpp.

◆ MBL_NORET

#define MBL_NORET   0x2000

dead end block: doesn't return execution control

Definition at line 3830 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 3816 of file hexrays.hpp.

◆ MBL_PROP

#define MBL_PROP   0x0080

needs 'propagation' pass

Definition at line 3824 of file hexrays.hpp.

◆ MBL_PUSH

#define MBL_PUSH   0x0010

needs "convert push/pop instructions"

Definition at line 3821 of file hexrays.hpp.

◆ MBL_TCAL

#define MBL_TCAL   0x0008

aritifical call block for tail calls

Definition at line 3820 of file hexrays.hpp.

◆ MBL_VALRANGES

#define MBL_VALRANGES   0x8000

should optimize using value ranges

Definition at line 3832 of file hexrays.hpp.

◆ NALT_VD

#define NALT_VD   2

this index is not used by ida

Definition at line 4713 of file hexrays.hpp.

◆ NORET_FORBID_ANALYSIS

#define NORET_FORBID_ANALYSIS   0x02

Definition at line 3672 of file hexrays.hpp.

◆ NORET_IGNORE_WAS_NORET_ICALL

#define NORET_IGNORE_WAS_NORET_ICALL   0x01

Definition at line 3671 of file hexrays.hpp.

◆ OPF_WINDOW_MGMT_MASK

#define OPF_WINDOW_MGMT_MASK   0x07

Definition at line 5390 of file hexrays.hpp.

◆ OPROP_CCFLAGS

#define OPROP_CCFLAGS   0x08

mop_n: a pc-relative value mop_a: an address obtained from a relocation else: value of a condition code register (like mr_cc)

Definition at line 2454 of file hexrays.hpp.

◆ OPROP_FLOAT

#define OPROP_FLOAT   0x04

possibly floating value

Definition at line 2451 of file hexrays.hpp.

◆ OPROP_IMPDONE

#define OPROP_IMPDONE   0x01

imported operand (a pointer) has been dereferenced

Definition at line 2449 of file hexrays.hpp.

◆ OPROP_LOWADDR

#define OPROP_LOWADDR   0x20

a low address offset

Definition at line 2456 of file hexrays.hpp.

◆ OPROP_UDEFVAL

#define OPROP_UDEFVAL   0x10

uses undefined value

Definition at line 2455 of file hexrays.hpp.

◆ OPROP_UDT

#define OPROP_UDT   0x02

a struct or union

Definition at line 2450 of file hexrays.hpp.

◆ OPTI_ADDREXPRS

#define OPTI_ADDREXPRS   0x0001

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

Definition at line 3612 of file hexrays.hpp.

◆ OPTI_COMBINSNS

#define OPTI_COMBINSNS   0x0004

may combine insns (only for optimize_insn)

Definition at line 3614 of file hexrays.hpp.

◆ OPTI_MINSTKREF

#define OPTI_MINSTKREF   0x0002

may update minstkref

Definition at line 3613 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 3617 of file hexrays.hpp.

◆ SIZEOF_BLOCK_CHAINS

#define SIZEOF_BLOCK_CHAINS   56

Definition at line 3370 of file hexrays.hpp.

◆ SVW_FLOAT

#define SVW_FLOAT   0x01

Definition at line 1371 of file hexrays.hpp.

◆ SVW_INT

#define SVW_INT   0x00

Definition at line 1370 of file hexrays.hpp.

◆ SVW_SOFT

#define SVW_SOFT   0x02

Definition at line 1372 of file hexrays.hpp.

◆ VLR_ALL

#define VLR_ALL   0x01

Definition at line 332 of file hexrays.hpp.

◆ VLR_BITS

#define VLR_BITS   0x05

Definition at line 336 of file hexrays.hpp.

◆ VLR_IVLS

#define VLR_IVLS   0x02

Definition at line 333 of file hexrays.hpp.

◆ VLR_NONE

#define VLR_NONE   0x00

Definition at line 331 of file hexrays.hpp.

◆ VLR_RANGE

#define VLR_RANGE   0x03

Definition at line 334 of file hexrays.hpp.

◆ VLR_SECT

#define VLR_SECT   0x06

Definition at line 337 of file hexrays.hpp.

◆ VLR_SRANGE

#define VLR_SRANGE   0x04

Definition at line 335 of file hexrays.hpp.

◆ VLR_TYPE

#define VLR_TYPE   0x0F

Definition at line 330 of file hexrays.hpp.

◆ VLR_UNION

#define VLR_UNION   0x07

Definition at line 339 of file hexrays.hpp.

◆ VLR_UNK

#define VLR_UNK   0x08

Definition at line 342 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 4212 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 4209 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 4214 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 3428 of file hexrays.hpp.

◆ boundaries_t

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

Definition at line 6940 of file hexrays.hpp.

◆ cfuncptr_t

typedef qrefcnt_t<cfunc_t> cfuncptr_t

Definition at line 282 of file hexrays.hpp.

◆ cfuncptrs_t

typedef qvector<cfuncptr_t> cfuncptrs_t

Definition at line 7135 of file hexrays.hpp.

◆ cinsn_list_t

typedef qlist<cinsn_t> cinsn_list_t

Definition at line 6567 of file hexrays.hpp.

◆ cinsnptrvec_t

typedef qvector<cinsn_t *> cinsnptrvec_t

Vector of pointers to statements.

Definition at line 6467 of file hexrays.hpp.

◆ cmt_type_t

typedef int cmt_type_t

Comment types.

Definition at line 7589 of file hexrays.hpp.

◆ ctree_items_t

typedef qvector<citem_t *> ctree_items_t

Vector of parents.

Definition at line 5781 of file hexrays.hpp.

◆ eamap_t

typedef std::map<ea_t, cinsnptrvec_t> eamap_t

Definition at line 6938 of file hexrays.hpp.

◆ easet_t

typedef std::set<ea_t> easet_t

Definition at line 274 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 7318 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 7517 of file hexrays.hpp.

◆ hexwarns_t

typedef qvector<hexwarn_t> hexwarns_t

Definition at line 4330 of file hexrays.hpp.

◆ history_t

typedef qstack<history_item_t> history_t

Navigation history.

Definition at line 7586 of file hexrays.hpp.

◆ iterator_word

typedef size_t iterator_word

Definition at line 8594 of file hexrays.hpp.

◆ lvar_mapping_t

Local variable mapping (is used to merge variables)

Definition at line 1485 of file hexrays.hpp.

◆ lvar_saved_infos_t

typedef qvector<lvar_saved_info_t> lvar_saved_infos_t

Definition at line 1482 of file hexrays.hpp.

◆ maymust_t

typedef int maymust_t

Definition at line 442 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 5027 of file hexrays.hpp.

◆ mcallargs_t

typedef qvector<mcallarg_t> mcallargs_t

Definition at line 3047 of file hexrays.hpp.

◆ minsn_ptr_set_t

typedef std::set<minsn_t *> minsn_ptr_set_t

Definition at line 275 of file hexrays.hpp.

◆ minsnptrs_t

typedef qvector<minsn_t*> minsnptrs_t

Definition at line 277 of file hexrays.hpp.

◆ mlistvec_t

typedef qvector<mlist_t> mlistvec_t

Definition at line 2065 of file hexrays.hpp.

◆ mopptrs_t

typedef qvector<mop_t*> mopptrs_t

Definition at line 278 of file hexrays.hpp.

◆ mopt_t

typedef uint8 mopt_t

Instruction operand types.

Definition at line 2253 of file hexrays.hpp.

◆ mopvec_t

typedef qvector<mop_t> mopvec_t

Definition at line 279 of file hexrays.hpp.

◆ mreg_t

typedef int mreg_t

Micro register.

Definition at line 262 of file hexrays.hpp.

◆ mregvec_t

typedef qvector<mreg_t> mregvec_t

Definition at line 281 of file hexrays.hpp.

◆ parents_t

typedef ctree_items_t parents_t

Definition at line 5782 of file hexrays.hpp.

◆ strings_t

typedef std::set<qstring> strings_t

Definition at line 276 of file hexrays.hpp.

◆ svlr_t

typedef int64 svlr_t

Definition at line 304 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 7939 of file hexrays.hpp.

◆ uint64vec_t

typedef qvector<uint64> uint64vec_t

Definition at line 280 of file hexrays.hpp.

◆ user_cmts_t

typedef std::map<treeloc_t, citem_cmt_t> user_cmts_t

Definition at line 6024 of file hexrays.hpp.

◆ user_iflags_t

typedef std::map<citem_locator_t, int32> user_iflags_t

Definition at line 6041 of file hexrays.hpp.

◆ user_labels_t

typedef std::map<int, qstring> user_labels_t

Definition at line 6755 of file hexrays.hpp.

◆ user_numforms_t

Definition at line 843 of file hexrays.hpp.

◆ user_unions_t

typedef std::map<ea_t, intvec_t> user_unions_t

Definition at line 6047 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 303 of file hexrays.hpp.

◆ voff_set_t

typedef std::set<voff_t> voff_set_t

Definition at line 260 of file hexrays.hpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Definition at line 305 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 6749 of file hexrays.hpp.

◆ cmpop_t

enum cmpop_t

Definition at line 310 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 6008 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 5934 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 5535 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 6655 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 3052 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 5051 of file hexrays.hpp.

◆ hexcall_t

enum hexcall_t

API call numbers.

Definition at line 7981 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 5960 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. see also hxe_calls_done

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 4334 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 3784 of file hexrays.hpp.

◆ mcode_t

enum mcode_t

Definition at line 540 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 4349 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 2424 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 6387 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 's' 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 4247 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 5726 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 5650 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 10012 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 11597 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 11603 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 9630 of file hexrays.hpp.

◆ block_chains_clear()

void block_chains_clear ( block_chains_t set)

Clear block_chains_t.

Definition at line 9671 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 9639 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 9664 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 9612 of file hexrays.hpp.

◆ block_chains_free()

void block_chains_free ( block_chains_t set)

Delete block_chains_t instance.

Definition at line 9685 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 9605 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 9621 of file hexrays.hpp.

◆ block_chains_new()

block_chains_t * block_chains_new ( )

Create a new block_chains_t instance.

Definition at line 9692 of file hexrays.hpp.

◆ block_chains_next()

Move to the next element.

Definition at line 9648 of file hexrays.hpp.

◆ block_chains_prev()

Move to the previous element.

Definition at line 9656 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 9678 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 9528 of file hexrays.hpp.

◆ boundaries_clear()

void boundaries_clear ( boundaries_t *  map)

Clear boundaries_t.

Definition at line 9569 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 9537 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 9562 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 9510 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 9496 of file hexrays.hpp.

◆ boundaries_free()

void boundaries_free ( boundaries_t *  map)

Delete boundaries_t instance.

Definition at line 9583 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 9519 of file hexrays.hpp.

◆ boundaries_new()

boundaries_t * boundaries_new ( )

Create a new boundaries_t instance.

Definition at line 9590 of file hexrays.hpp.

◆ boundaries_next()

Move to the next element.

Definition at line 9546 of file hexrays.hpp.

◆ boundaries_prev()

Move to the previous element.

Definition at line 9554 of file hexrays.hpp.

◆ boundaries_second()

rangeset_t & boundaries_second ( boundaries_iterator_t  p)

Get reference to the current map value.

Definition at line 9503 of file hexrays.hpp.

◆ boundaries_size()

size_t boundaries_size ( boundaries_t *  map)

Get size of boundaries_t.

Definition at line 9576 of file hexrays.hpp.

◆ call_helper()

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

Definition at line 6809 of file hexrays.hpp.

◆ change_hexrays_config()

bool change_hexrays_config ( const char *  directive)

Parse DIRECTIVE and update the current configuration variables.

For the syntax see hexrays.cfg

Definition at line 11505 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 11517 of file hexrays.hpp.

◆ clear_cached_cfuncs()

void clear_cached_cfuncs ( )

Flush all cached decompilation results.

Definition at line 12337 of file hexrays.hpp.

◆ close_hexrays_waitbox()

void close_hexrays_waitbox ( )

Close the waitbox displayed by the decompiler.

Useful if DECOMP_NO_HIDE was used during decompilation.

Definition at line 12307 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 11529 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 10132 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 12325 of file hexrays.hpp.

◆ create_empty_mba()

mba_t * create_empty_mba ( const mba_ranges_t mbr,
hexrays_failure_t hf = nullptr 
)

Create an empty microcode object.

Definition at line 7225 of file hexrays.hpp.

References DECOMP_VOID_MBA, and gen_microcode().

◆ create_field_name()

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

Definition at line 12355 of file hexrays.hpp.

◆ create_helper()

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

Definition at line 6787 of file hexrays.hpp.

◆ decompile()

cfuncptr_t decompile ( const mba_ranges_t mbr,
hexrays_failure_t hf = nullptr,
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 12313 of file hexrays.hpp.

Referenced by decompile_func(), and decompile_snippet().

◆ decompile_func()

cfuncptr_t decompile_func ( func_t *  pfn,
hexrays_failure_t hf = nullptr,
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 7182 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 11541 of file hexrays.hpp.

◆ decompile_snippet()

cfuncptr_t decompile_snippet ( const rangevec_t &  ranges,
hexrays_failure_t hf = nullptr,
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 7199 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 12041 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 9419 of file hexrays.hpp.

◆ eamap_clear()

void eamap_clear ( eamap_t *  map)

Clear eamap_t.

Definition at line 9460 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 9428 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 9453 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 9401 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 9387 of file hexrays.hpp.

◆ eamap_free()

void eamap_free ( eamap_t *  map)

Delete eamap_t instance.

Definition at line 9474 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 9410 of file hexrays.hpp.

◆ eamap_new()

eamap_t * eamap_new ( )

Create a new eamap_t instance.

Definition at line 9481 of file hexrays.hpp.

◆ eamap_next()

Move to the next element.

Definition at line 9437 of file hexrays.hpp.

◆ eamap_prev()

Move to the previous element.

Definition at line 9445 of file hexrays.hpp.

◆ eamap_second()

cinsnptrvec_t & eamap_second ( eamap_iterator_t  p)

Get reference to the current map value.

Definition at line 9394 of file hexrays.hpp.

◆ eamap_size()

size_t eamap_size ( eamap_t *  map)

Get size of eamap_t.

Definition at line 9467 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 -1 if the instruction should not be combined 0 else

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

< A call instruction has been anallyzed.

Parameters
blk(mblock_t *) blk->tail is the call.

< All calls have been analyzed.

Parameters
mba(mba_t *) This event is generated immediately after analyzing all calls, before any optimizitions, call unmerging and block merging.

< 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 7325 of file hexrays.hpp.

◆ gen_microcode()

mba_t * gen_microcode ( const mba_ranges_t mbr,
hexrays_failure_t hf = nullptr,
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 12319 of file hexrays.hpp.

Referenced by create_empty_mba().

◆ get_ctype_name()

const char * get_ctype_name ( ctype_t  op)

Definition at line 12349 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 11567 of file hexrays.hpp.

◆ get_hexrays_version()

const char * get_hexrays_version ( )

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 11511 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 9800 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 10471 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 11591 of file hexrays.hpp.

◆ get_signed_mcode()

THREAD_SAFE mcode_t get_signed_mcode ( mcode_t  code)

Definition at line 9832 of file hexrays.hpp.

◆ get_temp_regs()

const mlist_t & get_temp_regs ( )

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 10447 of file hexrays.hpp.

◆ get_unsigned_mcode()

THREAD_SAFE mcode_t get_unsigned_mcode ( mcode_t  code)

Definition at line 9838 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 11535 of file hexrays.hpp.

◆ getb_reginsn() [1/2]

const minsn_t * getb_reginsn ( const minsn_t ins)

Skip assertions backward.

Definition at line 11053 of file hexrays.hpp.

◆ getb_reginsn() [2/2]

minsn_t * getb_reginsn ( minsn_t ins)

Definition at line 3780 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 11047 of file hexrays.hpp.

◆ getf_reginsn() [2/2]

minsn_t * getf_reginsn ( minsn_t ins)

Definition at line 3779 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 12343 of file hexrays.hpp.

◆ has_mcode_seloff()

THREAD_SAFE bool has_mcode_seloff ( mcode_t  op)

Definition at line 684 of file hexrays.hpp.

◆ hexrays_alloc()

void * hexrays_alloc ( size_t  size)

Definition at line 9698 of file hexrays.hpp.

◆ hexrays_free()

void hexrays_free ( void *  ptr)

Definition at line 9704 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 8601 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 12363 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 10138 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 10490 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 10477 of file hexrays.hpp.

◆ is_additive()

bool is_additive ( ctype_t  op)

Is additive operator?

Definition at line 5667 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 5648 of file hexrays.hpp.

References cot_asg, and cot_asgumod.

◆ is_binary()

bool is_binary ( ctype_t  op)

Is binary operator?

Definition at line 5642 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 5685 of file hexrays.hpp.

References cot_band, cot_bnot, cot_bor, and cot_xor.

◆ is_break_consumer()

bool is_break_consumer ( ctype_t  op)

Does a break statement influence the specified statement code?

Definition at line 5709 of file hexrays.hpp.

References cit_switch, and is_loop().

◆ is_commutative()

bool is_commutative ( ctype_t  op)

Is commutative operator?

Definition at line 5654 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_kreg()

bool is_kreg ( mreg_t  r)

Is a kernel register? Kernel registers are temporary registers that can be used freely.

They may be used to store values that cross instruction or basic block boundaries. Kernel registers do not map to regular processor registers. See also mba_t::alloc_kreg()

Definition at line 10453 of file hexrays.hpp.

Referenced by mop_t::is_kreg().

◆ is_logical()

bool is_logical ( ctype_t  op)

Is logical operator?

Definition at line 5694 of file hexrays.hpp.

References cot_land, cot_lnot, and cot_lor.

◆ is_loop()

bool is_loop ( ctype_t  op)

Is loop statement code?

Definition at line 5702 of file hexrays.hpp.

References cit_do, cit_for, and cit_while.

Referenced by is_break_consumer().

◆ is_lvalue()

bool is_lvalue ( ctype_t  op)

Is Lvalue operator?

Definition at line 5715 of file hexrays.hpp.

References cot_idx, cot_memptr, cot_memref, cot_obj, cot_ptr, and cot_var.

◆ is_may_access()

THREAD_SAFE bool is_may_access ( maymust_t  maymust)

Definition at line 473 of file hexrays.hpp.

◆ is_mcode_addsub()

THREAD_SAFE bool is_mcode_addsub ( mcode_t  mcode)

Definition at line 639 of file hexrays.hpp.

◆ is_mcode_call()

THREAD_SAFE bool is_mcode_call ( mcode_t  mcode)

Definition at line 655 of file hexrays.hpp.

◆ is_mcode_commutative()

THREAD_SAFE bool is_mcode_commutative ( mcode_t  mcode)

Definition at line 659 of file hexrays.hpp.

◆ is_mcode_convertible_to_jmp()

THREAD_SAFE bool is_mcode_convertible_to_jmp ( mcode_t  mcode)

Definition at line 651 of file hexrays.hpp.

◆ is_mcode_convertible_to_set()

THREAD_SAFE bool is_mcode_convertible_to_set ( mcode_t  mcode)

Definition at line 653 of file hexrays.hpp.

◆ is_mcode_divmod()

THREAD_SAFE bool is_mcode_divmod ( mcode_t  op)

Definition at line 679 of file hexrays.hpp.

◆ is_mcode_fpu()

THREAD_SAFE bool is_mcode_fpu ( mcode_t  mcode)

Definition at line 657 of file hexrays.hpp.

◆ is_mcode_j1()

THREAD_SAFE bool is_mcode_j1 ( mcode_t  mcode)

Definition at line 647 of file hexrays.hpp.

◆ is_mcode_jcond()

THREAD_SAFE bool is_mcode_jcond ( mcode_t  mcode)

Definition at line 649 of file hexrays.hpp.

◆ is_mcode_propagatable()

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.

Definition at line 9814 of file hexrays.hpp.

◆ is_mcode_set()

THREAD_SAFE bool is_mcode_set ( mcode_t  mcode)

Definition at line 643 of file hexrays.hpp.

◆ is_mcode_set1()

THREAD_SAFE bool is_mcode_set1 ( mcode_t  mcode)

Definition at line 645 of file hexrays.hpp.

◆ is_mcode_shift()

THREAD_SAFE bool is_mcode_shift ( mcode_t  mcode)

Definition at line 672 of file hexrays.hpp.

◆ is_mcode_xdsu()

THREAD_SAFE bool is_mcode_xdsu ( mcode_t  mcode)

Definition at line 641 of file hexrays.hpp.

◆ is_multiplicative()

bool is_multiplicative ( ctype_t  op)

Is multiplicative operator?

Definition at line 5675 of file hexrays.hpp.

References cot_fdiv, cot_fmul, cot_mul, cot_sdiv, and cot_udiv.

◆ is_prepost()

bool is_prepost ( ctype_t  op)

Is pre/post increment/decrement operator?

Definition at line 5652 of file hexrays.hpp.

References cot_postinc, and cot_predec.

◆ is_relational()

bool is_relational ( ctype_t  op)

Is comparison operator?

Definition at line 5646 of file hexrays.hpp.

References cot_eq, and cot_ult.

◆ is_signed_mcode()

THREAD_SAFE bool is_signed_mcode ( mcode_t  code)

Definition at line 732 of file hexrays.hpp.

◆ is_unary()

bool is_unary ( ctype_t  op)

Is unary operator?

Definition at line 5644 of file hexrays.hpp.

References cot_fneg, and cot_predec.

◆ is_unsigned_mcode()

THREAD_SAFE bool is_unsigned_mcode ( mcode_t  code)

Definition at line 734 of file hexrays.hpp.

◆ jcnd2set()

THREAD_SAFE mcode_t jcnd2set ( mcode_t  code)

Definition at line 698 of file hexrays.hpp.

◆ lnot()

cexpr_t * lnot ( cexpr_t e)

Logically negate the specified expression.

The specified expression will be logically negated. For example, "x == y" is converted into "x != y" by this function.

Parameters
eexpression to negate. After the call, e must not be used anymore because it can be changed by the function. The function return value must be used to refer to the expression.
Returns
logically negated expression.
Examples
hexrays_sample3.cpp.

Definition at line 12005 of file hexrays.hpp.

◆ locate_lvar()

bool locate_lvar ( lvar_locator_t out,
ea_t  func_ea,
const char *  varname 
)

Find a variable by name.

Parameters
outoutput buffer for the variable locator
func_eafunction start address
varnamevariable name
Returns
success Since VARNAME is not always enough to find the variable, it may decompile the function.

Definition at line 10108 of file hexrays.hpp.

Referenced by rename_lvar().

◆ lvar_mapping_begin()

lvar_mapping_iterator_t lvar_mapping_begin ( const lvar_mapping_t map)

Get iterator pointing to the beginning of lvar_mapping_t.

Definition at line 8765 of file hexrays.hpp.

◆ lvar_mapping_clear()

void lvar_mapping_clear ( lvar_mapping_t map)

Clear lvar_mapping_t.

Definition at line 8806 of file hexrays.hpp.

◆ lvar_mapping_end()

lvar_mapping_iterator_t lvar_mapping_end ( const lvar_mapping_t map)

Get iterator pointing to the end of lvar_mapping_t.

Definition at line 8774 of file hexrays.hpp.

◆ lvar_mapping_erase()

void lvar_mapping_erase ( lvar_mapping_t map,
lvar_mapping_iterator_t  p 
)

Erase current element from lvar_mapping_t.

Definition at line 8799 of file hexrays.hpp.

◆ lvar_mapping_find()

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.

Definition at line 8747 of file hexrays.hpp.

◆ lvar_mapping_first()

lvar_locator_t const & lvar_mapping_first ( lvar_mapping_iterator_t  p)

Get reference to the current map key.

Definition at line 8733 of file hexrays.hpp.

◆ lvar_mapping_free()

void lvar_mapping_free ( lvar_mapping_t map)

Delete lvar_mapping_t instance.

Definition at line 8820 of file hexrays.hpp.

◆ lvar_mapping_insert()

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.

Definition at line 8756 of file hexrays.hpp.

◆ lvar_mapping_new()

lvar_mapping_t * lvar_mapping_new ( )

Create a new lvar_mapping_t instance.

Definition at line 8827 of file hexrays.hpp.

◆ lvar_mapping_next()

Move to the next element.

Definition at line 8783 of file hexrays.hpp.

◆ lvar_mapping_prev()

Move to the previous element.

Definition at line 8791 of file hexrays.hpp.

◆ lvar_mapping_second()

lvar_locator_t & lvar_mapping_second ( lvar_mapping_iterator_t  p)

Get reference to the current map value.

Definition at line 8740 of file hexrays.hpp.

◆ lvar_mapping_size()

size_t lvar_mapping_size ( lvar_mapping_t map)

Get size of lvar_mapping_t.

Definition at line 8813 of file hexrays.hpp.

◆ make_num()

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

Parameters
nvalue
funccurrent function
eadefinition address of the number
opnumoperand number of the number (in the disassembly listing)
signnumber sign
sizesize of number in bytes Please note that the type of the resulting expression can be anything because it can be inherited from the disassembly listing or taken from the user specified number representation in the pseudocode view.

Definition at line 12029 of file hexrays.hpp.

◆ make_ref()

cexpr_t * make_ref ( cexpr_t e)

Create a reference.

This function performs the following conversion: "obj" => "&obj". It can handle casts, annihilate "&*", and process other special cases.

Definition at line 12035 of file hexrays.hpp.

◆ mark_cfunc_dirty()

bool mark_cfunc_dirty ( ea_t  ea,
bool  close_views = false 
)

Flush the cached decompilation results.

Erases a cache entry for the specified function.

Parameters
eafunction to erase from the cache
close_viewsclose pseudocode windows that show the function
Returns
if a cache entry existed.

Definition at line 12331 of file hexrays.hpp.

◆ mcode_modifies_d()

THREAD_SAFE bool mcode_modifies_d ( mcode_t  mcode)

Definition at line 9844 of file hexrays.hpp.

◆ modify_user_lvar_info()

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.

Parameters
func_eafunction start address
infolocal variable info attrs
mli_flagsbits that specify which attrs defined by INFO are to be set
Returns
true if modified, false if invalid MLI_FLAGS passed

Definition at line 10102 of file hexrays.hpp.

Referenced by rename_lvar().

◆ modify_user_lvars()

bool modify_user_lvars ( ea_t  entry_ea,
user_lvar_modifier_t mlv 
)

Modify saved local variable settings.

Parameters
entry_eafunction start address
mlvlocal variable modifier
Returns
true if modified variables

Definition at line 10096 of file hexrays.hpp.

◆ mreg2reg()

int mreg2reg ( mreg_t  reg,
int  width 
)

Map a microregister to a processor register.

Parameters
regmicroregister number
widthsize of microregister in bytes
Returns
processor register id or -1

Definition at line 10465 of file hexrays.hpp.

◆ must_mcode_close_block()

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.

Parameters
mcodeinstruction opcode
including_callsshould m_call/m_icall be considered as the closing opcodes? If this function returns true, the opcode cannot appear in the middle of a block. Calls are a special case: unknown calls (is_unknown_call) are considered as closing opcodes.

Definition at line 9808 of file hexrays.hpp.

◆ negate_mcode_relation()

THREAD_SAFE mcode_t negate_mcode_relation ( mcode_t  code)

Definition at line 9820 of file hexrays.hpp.

◆ negated_relation()

ctype_t negated_relation ( ctype_t  op)

Negate a comparison operator. For example, cot_sge becomes cot_slt.

Definition at line 11579 of file hexrays.hpp.

◆ new_block()

cinsn_t * new_block ( )

Create a new block-statement.

Definition at line 12011 of file hexrays.hpp.

◆ op_uses_x()

bool op_uses_x ( ctype_t  op)

Does operator use the 'x' field of cexpr_t?

Definition at line 5636 of file hexrays.hpp.

References cot_comma, cot_memptr, and cot_sizeof.

◆ op_uses_y()

bool op_uses_y ( ctype_t  op)

Does operator use the 'y' field of cexpr_t?

Definition at line 5638 of file hexrays.hpp.

References cot_comma, cot_fdiv, and cot_idx.

Referenced by is_binary().

◆ op_uses_z()

bool op_uses_z ( ctype_t  op)

Does operator use the 'z' field of cexpr_t?

Definition at line 5640 of file hexrays.hpp.

References cot_tern.

◆ open_pseudocode()

vdui_t * open_pseudocode ( ea_t  ea,
int  flags 
)

Open pseudocode window.

The specified function is decompiled and the pseudocode window is opened.

Parameters
eafunction to decompile
flagsa combination of OPF_ flags
Returns
false if failed

Definition at line 11523 of file hexrays.hpp.

◆ parse_user_call()

bool parse_user_call ( udcall_t udc,
const char *  decl,
bool  silent 
)

Convert function type declaration into internal structure.

Parameters
udc- pointer to output structure
decl- function type declaration
silent- if TRUE: do not show warning in case of incorrect type
Returns
success

Definition at line 10126 of file hexrays.hpp.

◆ print_vdloc()

void print_vdloc ( qstring *  vout,
const vdloc_t loc,
int  nbytes 
)

Print vdloc.

Since vdloc does not always carry the size info, we pass it as NBYTES..

Examples
hexrays_sample4.cpp.

Definition at line 10006 of file hexrays.hpp.

◆ reg2mreg()

mreg_t reg2mreg ( int  reg)

Map a processor register to a microregister.

Parameters
regprocessor register number
Returns
microregister register id or mr_none
Examples
hexrays_sample18.cpp.

Definition at line 10459 of file hexrays.hpp.

◆ remitem()

void remitem ( const citem_t e)

Definition at line 11573 of file hexrays.hpp.

◆ remove_hexrays_callback()

int remove_hexrays_callback ( hexrays_cb_t callback,
void *  ud 
)

Uninstall handler for decompiler events.

Parameters
callbackhandler to uninstall
uduser data. if nullptr, all handler corresponding to callback is uninstalled. if not nullptr, only the callback instance with the specified ud value is uninstalled.
Returns
number of uninstalled handlers.
Examples
hexrays_sample18.cpp, hexrays_sample2.cpp, hexrays_sample3.cpp, hexrays_sample5.cpp, hexrays_sample6.cpp, and hexrays_sample7.cpp.

Definition at line 12369 of file hexrays.hpp.

◆ remove_optblock_handler()

bool remove_optblock_handler ( optblock_t opt)

Remove a block level custom optimizer.

Examples
hexrays_sample11.cpp.

Definition at line 10496 of file hexrays.hpp.

◆ remove_optinsn_handler()

bool remove_optinsn_handler ( optinsn_t opt)

Remove an instruction level custom optimizer.

Examples
hexrays_sample10.cpp, and hexrays_sample16.cpp.

Definition at line 10483 of file hexrays.hpp.

◆ rename_lvar()

bool rename_lvar ( ea_t  func_ea,
const char *  oldname,
const char *  newname 
)

Rename a local variable.

Parameters
func_eafunction start address
oldnameold name of the variable
newnamenew name of the variable
Returns
success This is a convenience function. For bulk renaming consider using modify_user_lvars.

Definition at line 1625 of file hexrays.hpp.

References lvar_saved_info_t::ll, locate_lvar(), MLI_NAME, modify_user_lvar_info(), and lvar_saved_info_t::name.

◆ restore_user_cmts()

user_cmts_t * restore_user_cmts ( ea_t  func_ea)

Restore user defined comments from the database.

Parameters
func_eathe entry address of the function
Returns
collection of user defined comments. The returned object must be deleted by the caller using delete_user_cmts()
Examples
hexrays_sample4.cpp.

Definition at line 12095 of file hexrays.hpp.

◆ restore_user_defined_calls()

bool restore_user_defined_calls ( udcall_map_t *  udcalls,
ea_t  func_ea 
)

Restore user defined function calls from the database.

Parameters
udcallsptr to output buffer
func_eaentry address of the function
Returns
success

Definition at line 10114 of file hexrays.hpp.

◆ restore_user_iflags()

user_iflags_t * restore_user_iflags ( ea_t  func_ea)

Restore user defined citem iflags from the database.

Parameters
func_eathe entry address of the function
Returns
collection of user defined iflags. The returned object must be deleted by the caller using delete_user_iflags()
Examples
hexrays_sample4.cpp.

Definition at line 12107 of file hexrays.hpp.

◆ restore_user_labels()

user_labels_t * restore_user_labels ( ea_t  func_ea)

Restore user defined labels from the database.

Parameters
func_eathe entry address of the function, ignored if FUNC != nullptr
funcpointer to current function
Returns
collection of user defined labels. The returned object must be deleted by the caller using delete_user_labels()
Examples
hexrays_sample4.cpp.

Definition at line 12083 of file hexrays.hpp.

◆ restore_user_labels2()

user_labels_t * restore_user_labels2 ( ea_t  func_ea,
const cfunc_t func = nullptr 
)

Definition at line 12089 of file hexrays.hpp.

◆ restore_user_lvar_settings()

bool restore_user_lvar_settings ( lvar_uservec_t lvinf,
ea_t  func_ea 
)

Restore user defined local variable settings in the database.

Parameters
func_eaentry address of the function
lvinfptr to output buffer
Returns
success
Examples
hexrays_sample4.cpp.

Definition at line 10084 of file hexrays.hpp.

◆ restore_user_numforms()

user_numforms_t * restore_user_numforms ( ea_t  func_ea)

Restore user defined number formats from the database.

Parameters
func_eathe entry address of the function
Returns
collection of user defined number formats. The returned object must be deleted by the caller using delete_user_numforms()
Examples
hexrays_sample4.cpp.

Definition at line 12101 of file hexrays.hpp.

◆ restore_user_unions()

user_unions_t * restore_user_unions ( ea_t  func_ea)

Restore user defined union field selections from the database.

Parameters
func_eathe entry address of the function
Returns
collection of union field selections The returned object must be deleted by the caller using delete_user_unions()

Definition at line 12113 of file hexrays.hpp.

◆ save_user_cmts()

void save_user_cmts ( ea_t  func_ea,
const user_cmts_t user_cmts 
)

Save user defined comments into the database.

Parameters
func_eathe entry address of the function
user_cmtscollection of user defined comments

Definition at line 12059 of file hexrays.hpp.

◆ save_user_defined_calls()

void save_user_defined_calls ( ea_t  func_ea,
const udcall_map_t &  udcalls 
)

Save user defined local function calls into the database.

Parameters
func_eaentry address of the function
udcallsuser-specified info about user defined function calls

Definition at line 10120 of file hexrays.hpp.

◆ save_user_iflags()

void save_user_iflags ( ea_t  func_ea,
const user_iflags_t *  iflags 
)

Save user defined citem iflags into the database.

Parameters
func_eathe entry address of the function
iflagscollection of user defined citem iflags

Definition at line 12071 of file hexrays.hpp.

◆ save_user_labels()

void save_user_labels ( ea_t  func_ea,
const user_labels_t user_labels 
)

Save user defined labels into the database.

Parameters
func_eathe entry address of the function, ignored if FUNC != nullptr
user_labelscollection of user defined labels
funcpointer to current function, if FUNC != nullptr, then save labels using a more stable method that preserves them even when the decompiler output drastically changes

Definition at line 12047 of file hexrays.hpp.

◆ save_user_labels2()

void save_user_labels2 ( ea_t  func_ea,
const user_labels_t user_labels,
const cfunc_t func = nullptr 
)

Definition at line 12053 of file hexrays.hpp.

◆ save_user_lvar_settings()

void save_user_lvar_settings ( ea_t  func_ea,
const lvar_uservec_t lvinf 
)

Save user defined local variable settings into the database.

Parameters
func_eaentry address of the function
lvinfuser-specified info about local variables

Definition at line 10090 of file hexrays.hpp.

◆ save_user_numforms()

void save_user_numforms ( ea_t  func_ea,
const user_numforms_t numforms 
)

Save user defined number formats into the database.

Parameters
func_eathe entry address of the function
numformscollection of user defined comments

Definition at line 12065 of file hexrays.hpp.

◆ save_user_unions()

void save_user_unions ( ea_t  func_ea,
const user_unions_t *  unions 
)

Save user defined union field selections into the database.

Parameters
func_eathe entry address of the function
unionscollection of union field selections

Definition at line 12077 of file hexrays.hpp.

◆ select_udt_by_offset()

int select_udt_by_offset ( const qvector< tinfo_t > *  udts,
const ui_stroff_ops_t &  ops,
ui_stroff_applicator_t applicator 
)

Select UDT.

Parameters
udtslist of UDT tinfo_t for the selection, if nullptr or empty then UDTs from the "Local types" will be used
opsoperands
applicatorcallback will be called to apply the selection for every operand
Examples
hexrays_sample17.cpp.

Definition at line 12622 of file hexrays.hpp.

◆ send_database()

void send_database ( const hexrays_failure_t err,
bool  silent 
)

Send the database to Hex-Rays.

This function sends the current database to the Hex-Rays server. The database is sent in the compressed form over an encrypted (SSL) connection.

Parameters
errfailure description object. Empty hexrays_failure_t object can be used if error information is not available.
silentif false, a dialog box will be displayed before sending the database.

Definition at line 11555 of file hexrays.hpp.

◆ set2jcnd()

THREAD_SAFE mcode_t set2jcnd ( mcode_t  code)

Definition at line 691 of file hexrays.hpp.

◆ swap_mcode_relation()

THREAD_SAFE mcode_t swap_mcode_relation ( mcode_t  code)

Definition at line 9826 of file hexrays.hpp.

◆ swapped_relation()

ctype_t swapped_relation ( ctype_t  op)

Swap a comparison operator. For example, cot_sge becomes cot_sle.

Definition at line 11585 of file hexrays.hpp.

◆ term_hexrays_plugin()

◆ udcall_map_begin()

udcall_map_iterator_t udcall_map_begin ( const udcall_map_t *  map)

Get iterator pointing to the beginning of udcall_map_t.

Definition at line 8874 of file hexrays.hpp.

◆ udcall_map_clear()

void udcall_map_clear ( udcall_map_t *  map)

Clear udcall_map_t.

Definition at line 8915 of file hexrays.hpp.

◆ udcall_map_end()

udcall_map_iterator_t udcall_map_end ( const udcall_map_t *  map)

Get iterator pointing to the end of udcall_map_t.

Definition at line 8883 of file hexrays.hpp.

◆ udcall_map_erase()

void udcall_map_erase ( udcall_map_t *  map,
udcall_map_iterator_t  p 
)

Erase current element from udcall_map_t.

Definition at line 8908 of file hexrays.hpp.

◆ udcall_map_find()

udcall_map_iterator_t udcall_map_find ( const udcall_map_t *  map,
const ea_t &  key 
)

Find the specified key in udcall_map_t.

Definition at line 8856 of file hexrays.hpp.

◆ udcall_map_first()

ea_t const & udcall_map_first ( udcall_map_iterator_t  p)

Get reference to the current map key.

Definition at line 8842 of file hexrays.hpp.

◆ udcall_map_free()

void udcall_map_free ( udcall_map_t *  map)

Delete udcall_map_t instance.

Definition at line 8929 of file hexrays.hpp.

◆ udcall_map_insert()

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.

Definition at line 8865 of file hexrays.hpp.

◆ udcall_map_new()

udcall_map_t * udcall_map_new ( )

Create a new udcall_map_t instance.

Definition at line 8936 of file hexrays.hpp.

◆ udcall_map_next()

Move to the next element.

Definition at line 8892 of file hexrays.hpp.

◆ udcall_map_prev()

Move to the previous element.

Definition at line 8900 of file hexrays.hpp.

◆ udcall_map_second()

udcall_t & udcall_map_second ( udcall_map_iterator_t  p)

Get reference to the current map value.

Definition at line 8849 of file hexrays.hpp.

◆ udcall_map_size()

size_t udcall_map_size ( udcall_map_t *  map)

Get size of udcall_map_t.

Definition at line 8922 of file hexrays.hpp.

◆ user_cmts_begin()

user_cmts_iterator_t user_cmts_begin ( const user_cmts_t map)

Get iterator pointing to the beginning of user_cmts_t.

Examples
hexrays_sample4.cpp.

Definition at line 8983 of file hexrays.hpp.

◆ user_cmts_clear()

void user_cmts_clear ( user_cmts_t map)

Clear user_cmts_t.

Definition at line 9024 of file hexrays.hpp.

◆ user_cmts_end()

user_cmts_iterator_t user_cmts_end ( const user_cmts_t map)

Get iterator pointing to the end of user_cmts_t.

Examples
hexrays_sample4.cpp.

Definition at line 8992 of file hexrays.hpp.

◆ user_cmts_erase()

void user_cmts_erase ( user_cmts_t map,
user_cmts_iterator_t  p 
)

Erase current element from user_cmts_t.

Definition at line 9017 of file hexrays.hpp.

◆ user_cmts_find()

user_cmts_iterator_t user_cmts_find ( const user_cmts_t map,
const treeloc_t key 
)

Find the specified key in user_cmts_t.

Definition at line 8965 of file hexrays.hpp.

◆ user_cmts_first()

treeloc_t const & user_cmts_first ( user_cmts_iterator_t  p)

Get reference to the current map key.

Examples
hexrays_sample4.cpp.

Definition at line 8951 of file hexrays.hpp.

◆ user_cmts_free()

void user_cmts_free ( user_cmts_t map)

Delete user_cmts_t instance.

Examples
hexrays_sample4.cpp.

Definition at line 9038 of file hexrays.hpp.

◆ user_cmts_insert()

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.

Definition at line 8974 of file hexrays.hpp.

◆ user_cmts_new()

user_cmts_t * user_cmts_new ( )

Create a new user_cmts_t instance.

Definition at line 9045 of file hexrays.hpp.

◆ user_cmts_next()

Move to the next element.

Examples
hexrays_sample4.cpp.

Definition at line 9001 of file hexrays.hpp.

◆ user_cmts_prev()

Move to the previous element.

Definition at line 9009 of file hexrays.hpp.

◆ user_cmts_second()

citem_cmt_t & user_cmts_second ( user_cmts_iterator_t  p)

Get reference to the current map value.

Examples
hexrays_sample4.cpp.

Definition at line 8958 of file hexrays.hpp.

◆ user_cmts_size()

size_t user_cmts_size ( user_cmts_t map)

Get size of user_cmts_t.

Examples
hexrays_sample4.cpp.

Definition at line 9031 of file hexrays.hpp.

◆ user_iflags_begin()

user_iflags_iterator_t user_iflags_begin ( const user_iflags_t *  map)

Get iterator pointing to the beginning of user_iflags_t.

Examples
hexrays_sample4.cpp.

Definition at line 9092 of file hexrays.hpp.

◆ user_iflags_clear()

void user_iflags_clear ( user_iflags_t *  map)

Clear user_iflags_t.

Definition at line 9133 of file hexrays.hpp.

◆ user_iflags_end()

user_iflags_iterator_t user_iflags_end ( const user_iflags_t *  map)

Get iterator pointing to the end of user_iflags_t.

Examples
hexrays_sample4.cpp.

Definition at line 9101 of file hexrays.hpp.

◆ user_iflags_erase()

void user_iflags_erase ( user_iflags_t *  map,
user_iflags_iterator_t  p 
)

Erase current element from user_iflags_t.

Definition at line 9126 of file hexrays.hpp.

◆ user_iflags_find()

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.

Definition at line 9074 of file hexrays.hpp.

◆ user_iflags_first()

citem_locator_t const & user_iflags_first ( user_iflags_iterator_t  p)

Get reference to the current map key.

Examples
hexrays_sample4.cpp.

Definition at line 9060 of file hexrays.hpp.

◆ user_iflags_free()

void user_iflags_free ( user_iflags_t *  map)

Delete user_iflags_t instance.

Examples
hexrays_sample4.cpp.

Definition at line 9147 of file hexrays.hpp.

◆ user_iflags_insert()

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.

Definition at line 9083 of file hexrays.hpp.

◆ user_iflags_new()

user_iflags_t * user_iflags_new ( )

Create a new user_iflags_t instance.

Definition at line 9154 of file hexrays.hpp.

◆ user_iflags_next()

Move to the next element.

Examples
hexrays_sample4.cpp.

Definition at line 9110 of file hexrays.hpp.

◆ user_iflags_prev()

Move to the previous element.

Definition at line 9118 of file hexrays.hpp.

◆ user_iflags_second()

int32 & user_iflags_second ( user_iflags_iterator_t  p)

Get reference to the current map value.

Examples
hexrays_sample4.cpp.

Definition at line 9067 of file hexrays.hpp.

◆ user_iflags_size()

size_t user_iflags_size ( user_iflags_t *  map)

Get size of user_iflags_t.

Examples
hexrays_sample4.cpp.

Definition at line 9140 of file hexrays.hpp.

◆ user_labels_begin()

user_labels_iterator_t user_labels_begin ( const user_labels_t map)

Get iterator pointing to the beginning of user_labels_t.

Examples
hexrays_sample4.cpp.

Definition at line 9310 of file hexrays.hpp.

◆ user_labels_clear()

void user_labels_clear ( user_labels_t map)

Clear user_labels_t.

Definition at line 9351 of file hexrays.hpp.

◆ user_labels_end()

user_labels_iterator_t user_labels_end ( const user_labels_t map)

Get iterator pointing to the end of user_labels_t.

Examples
hexrays_sample4.cpp.

Definition at line 9319 of file hexrays.hpp.

◆ user_labels_erase()

void user_labels_erase ( user_labels_t map,
user_labels_iterator_t  p 
)

Erase current element from user_labels_t.

Definition at line 9344 of file hexrays.hpp.

◆ user_labels_find()

user_labels_iterator_t user_labels_find ( const user_labels_t map,
const int &  key 
)

Find the specified key in user_labels_t.

Definition at line 9292 of file hexrays.hpp.

◆ user_labels_first()

int const & user_labels_first ( user_labels_iterator_t  p)

Get reference to the current map key.

Examples
hexrays_sample4.cpp.

Definition at line 9278 of file hexrays.hpp.

◆ user_labels_free()

void user_labels_free ( user_labels_t map)

Delete user_labels_t instance.

Examples
hexrays_sample4.cpp.

Definition at line 9365 of file hexrays.hpp.

◆ user_labels_insert()

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.

Definition at line 9301 of file hexrays.hpp.

◆ user_labels_new()

user_labels_t * user_labels_new ( )

Create a new user_labels_t instance.

Definition at line 9372 of file hexrays.hpp.

◆ user_labels_next()

Move to the next element.

Examples
hexrays_sample4.cpp.

Definition at line 9328 of file hexrays.hpp.

◆ user_labels_prev()

Move to the previous element.

Definition at line 9336 of file hexrays.hpp.

◆ user_labels_second()

qstring & user_labels_second ( user_labels_iterator_t  p)

Get reference to the current map value.

Examples
hexrays_sample4.cpp.

Definition at line 9285 of file hexrays.hpp.

◆ user_labels_size()

size_t user_labels_size ( user_labels_t map)

Get size of user_labels_t.

Examples
hexrays_sample4.cpp.

Definition at line 9358 of file hexrays.hpp.

◆ user_numforms_begin()

user_numforms_iterator_t user_numforms_begin ( const user_numforms_t map)

Get iterator pointing to the beginning of user_numforms_t.

Examples
hexrays_sample4.cpp.

Definition at line 8656 of file hexrays.hpp.

◆ user_numforms_clear()

void user_numforms_clear ( user_numforms_t map)

Clear user_numforms_t.

Definition at line 8697 of file hexrays.hpp.

◆ user_numforms_end()

user_numforms_iterator_t user_numforms_end ( const user_numforms_t map)

Get iterator pointing to the end of user_numforms_t.

Examples
hexrays_sample4.cpp.

Definition at line 8665 of file hexrays.hpp.

◆ user_numforms_erase()

void user_numforms_erase ( user_numforms_t map,
user_numforms_iterator_t  p 
)

Erase current element from user_numforms_t.

Definition at line 8690 of file hexrays.hpp.

◆ user_numforms_find()

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.

Definition at line 8638 of file hexrays.hpp.

◆ user_numforms_first()

operand_locator_t const & user_numforms_first ( user_numforms_iterator_t  p)

Get reference to the current map key.

Examples
hexrays_sample4.cpp.

Definition at line 8624 of file hexrays.hpp.

◆ user_numforms_free()

void user_numforms_free ( user_numforms_t map)

Delete user_numforms_t instance.

Examples
hexrays_sample4.cpp.

Definition at line 8711 of file hexrays.hpp.

◆ user_numforms_insert()

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.

Definition at line 8647 of file hexrays.hpp.

◆ user_numforms_new()

user_numforms_t * user_numforms_new ( )

Create a new user_numforms_t instance.

Definition at line 8718 of file hexrays.hpp.

◆ user_numforms_next()

Move to the next element.

Examples
hexrays_sample4.cpp.

Definition at line 8674 of file hexrays.hpp.

◆ user_numforms_prev()

Move to the previous element.

Definition at line 8682 of file hexrays.hpp.

◆ user_numforms_second()

number_format_t & user_numforms_second ( user_numforms_iterator_t  p)

Get reference to the current map value.

Examples
hexrays_sample4.cpp.

Definition at line 8631 of file hexrays.hpp.

◆ user_numforms_size()

size_t user_numforms_size ( user_numforms_t map)

Get size of user_numforms_t.

Examples
hexrays_sample4.cpp.

Definition at line 8704 of file hexrays.hpp.

◆ user_unions_begin()

user_unions_iterator_t user_unions_begin ( const user_unions_t *  map)

Get iterator pointing to the beginning of user_unions_t.

Definition at line 9201 of file hexrays.hpp.

◆ user_unions_clear()

void user_unions_clear ( user_unions_t *  map)

Clear user_unions_t.

Definition at line 9242 of file hexrays.hpp.

◆ user_unions_end()

user_unions_iterator_t user_unions_end ( const user_unions_t *  map)

Get iterator pointing to the end of user_unions_t.

Definition at line 9210 of file hexrays.hpp.

◆ user_unions_erase()

void user_unions_erase ( user_unions_t *  map,
user_unions_iterator_t  p 
)

Erase current element from user_unions_t.

Definition at line 9235 of file hexrays.hpp.

◆ user_unions_find()

user_unions_iterator_t user_unions_find ( const user_unions_t *  map,
const ea_t &  key 
)

Find the specified key in user_unions_t.

Definition at line 9183 of file hexrays.hpp.

◆ user_unions_first()

ea_t const & user_unions_first ( user_unions_iterator_t  p)

Get reference to the current map key.

Definition at line 9169 of file hexrays.hpp.

◆ user_unions_free()

void user_unions_free ( user_unions_t *  map)

Delete user_unions_t instance.

Definition at line 9256 of file hexrays.hpp.

◆ user_unions_insert()

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.

Definition at line 9192 of file hexrays.hpp.

◆ user_unions_new()

user_unions_t * user_unions_new ( )

Create a new user_unions_t instance.

Definition at line 9263 of file hexrays.hpp.

◆ user_unions_next()

Move to the next element.

Definition at line 9219 of file hexrays.hpp.

◆ user_unions_prev()

Move to the previous element.

Definition at line 9227 of file hexrays.hpp.

◆ user_unions_second()

intvec_t & user_unions_second ( user_unions_iterator_t  p)

Get reference to the current map value.

Definition at line 9176 of file hexrays.hpp.

◆ user_unions_size()

size_t user_unions_size ( user_unions_t *  map)

Get size of user_unions_t.

Definition at line 9249 of file hexrays.hpp.

◆ vcall_helper()

cexpr_t * vcall_helper ( const tinfo_t &  rettype,
carglist_t args,
const char *  format,
va_list  va 
)

Definition at line 12023 of file hexrays.hpp.

◆ vcreate_helper()

cexpr_t * vcreate_helper ( bool  standalone,
const tinfo_t &  type,
const char *  format,
va_list  va 
)

Definition at line 12017 of file hexrays.hpp.

Variable Documentation

◆ bitset_align

const size_t bitset_align = bitset_width - 1

Definition at line 1744 of file hexrays.hpp.

◆ bitset_shift

const size_t bitset_shift = 6

Definition at line 1745 of file hexrays.hpp.

◆ bitset_width

const size_t bitset_width = sizeof(mbitmap_t) * CHAR_BIT

Definition at line 1743 of file hexrays.hpp.

◆ CALL_SPOILS_ONLY_ARGS

const maymust_t CALL_SPOILS_ONLY_ARGS = 0x4000

Definition at line 469 of file hexrays.hpp.

◆ cc_count

const int cc_count = mr_pf - mr_cf + 1

Definition at line 754 of file hexrays.hpp.

◆ CMT_ALL

const cmt_type_t CMT_ALL = 0x001F

All comments.

Definition at line 7597 of file hexrays.hpp.

◆ CMT_BLOCK1

const cmt_type_t CMT_BLOCK1 = 0x0002

Anterioir block comment.

Definition at line 7593 of file hexrays.hpp.

◆ CMT_BLOCK2

const cmt_type_t CMT_BLOCK2 = 0x0004

Posterior block comment.

Definition at line 7594 of file hexrays.hpp.

◆ CMT_FUNC

const cmt_type_t CMT_FUNC = 0x0010

Function comment.

Definition at line 7596 of file hexrays.hpp.

◆ CMT_LVAR

const cmt_type_t CMT_LVAR = 0x0008

Local variable comment.

Definition at line 7595 of file hexrays.hpp.

◆ CMT_NONE

const cmt_type_t CMT_NONE = 0x0000

No comment is possible.

Definition at line 7591 of file hexrays.hpp.

◆ CMT_TAIL

const cmt_type_t CMT_TAIL = 0x0001

Indented comment.

Definition at line 7592 of file hexrays.hpp.

◆ EXCLUDE_PASS_REGS

const maymust_t EXCLUDE_PASS_REGS = 0x80

Definition at line 455 of file hexrays.hpp.

◆ EXCLUDE_VOLATILE

const maymust_t EXCLUDE_VOLATILE = 0x400

Definition at line 462 of file hexrays.hpp.

◆ FULL_XDSU

const maymust_t FULL_XDSU = 0x100

Definition at line 457 of file hexrays.hpp.

◆ HEXRAYS_API_MAGIC

const int64 HEXRAYS_API_MAGIC = 0x00DEC0DE00000003LL

Definition at line 7319 of file hexrays.hpp.

◆ INCLUDE_DEAD_RETREGS

const maymust_t INCLUDE_DEAD_RETREGS = 0x1000

Definition at line 466 of file hexrays.hpp.

◆ INCLUDE_RESTRICTED

const maymust_t INCLUDE_RESTRICTED = 0x2000

Definition at line 468 of file hexrays.hpp.

◆ INCLUDE_SPOILED_REGS

const maymust_t INCLUDE_SPOILED_REGS = 0x40

Definition at line 453 of file hexrays.hpp.

◆ INCLUDE_UNUSED_SRC

const maymust_t INCLUDE_UNUSED_SRC = 0x800

Definition at line 464 of file hexrays.hpp.

◆ MAX_SVALUE

const svlr_t MAX_SVALUE = svlr_t(uvlr_t(-1) >> 1)

Definition at line 307 of file hexrays.hpp.

◆ MAX_VALUE

const uvlr_t MAX_VALUE = uvlr_t(-1)

Definition at line 306 of file hexrays.hpp.

◆ MAY_ACCESS

const maymust_t MAY_ACCESS = 0x01

Definition at line 446 of file hexrays.hpp.

◆ MAYMUST_ACCESS_MASK

const maymust_t MAYMUST_ACCESS_MASK = 0x01

Definition at line 448 of file hexrays.hpp.

◆ MIN_SVALUE

const svlr_t MIN_SVALUE = ~MAX_SVALUE

Definition at line 308 of file hexrays.hpp.

◆ mop_a

const mopt_t mop_a = 10

mop_addr_t: address of operand (mop_l, mop_v, mop_S, mop_r)

Definition at line 2265 of file hexrays.hpp.

Referenced by mop_t::is_glbaddr(), and mop_t::is_stkaddr().

◆ mop_b

const mopt_t mop_b = 7

micro basic block (mblock_t)

Definition at line 2262 of file hexrays.hpp.

Referenced by mop_t::_make_blkref(), and mop_t::is_mob().

◆ mop_c

const mopt_t mop_c = 12

mcases

Definition at line 2267 of file hexrays.hpp.

Referenced by mop_t::_make_cases().

◆ mop_d

const mopt_t mop_d = 4

result of another instruction

Definition at line 2259 of file hexrays.hpp.

Referenced by mop_t::_make_insn(), and mop_t::is_insn().

◆ mop_f

const mopt_t mop_f = 8

list of arguments

Definition at line 2263 of file hexrays.hpp.

Referenced by mop_t::_make_callinfo(), and mop_t::is_arglist().

◆ mop_fn

const mopt_t mop_fn = 13

floating point constant

Definition at line 2268 of file hexrays.hpp.

◆ mop_h

const mopt_t mop_h = 11

helper function

Definition at line 2266 of file hexrays.hpp.

◆ mop_l

const mopt_t mop_l = 9

local variable

Definition at line 2264 of file hexrays.hpp.

Referenced by mop_t::_make_lvar().

◆ mop_n

const mopt_t mop_n = 2

immediate number constant

Examples
hexrays_sample16.cpp.

Definition at line 2257 of file hexrays.hpp.

◆ mop_p

const mopt_t mop_p = 14

operand pair

Definition at line 2269 of file hexrays.hpp.

Referenced by mop_t::_make_pair().

◆ mop_r

const mopt_t mop_r = 1

register (they exist until MMAT_LVARS)

Definition at line 2256 of file hexrays.hpp.

Referenced by mop_t::_make_reg(), block_chains_t::get_reg_chain(), mop_t::is_kreg(), and mop_t::is_reg().

◆ mop_S

const mopt_t mop_S = 5

local stack variable (they exist until MMAT_LVARS)

Definition at line 2260 of file hexrays.hpp.

Referenced by mop_t::_make_stkvar(), block_chains_t::get_stk_chain(), and mop_t::is_stkaddr().

◆ mop_sc

const mopt_t mop_sc = 15

scattered

Definition at line 2270 of file hexrays.hpp.

Referenced by mop_t::is_scattered().

◆ mop_str

const mopt_t mop_str = 3

immediate string constant (user representation)

Examples
hexrays_sample10.cpp.

Definition at line 2258 of file hexrays.hpp.

Referenced by mop_t::_make_strlit().

◆ mop_v

const mopt_t mop_v = 6

global variable

Definition at line 2261 of file hexrays.hpp.

Referenced by mop_t::is_glbaddr().

◆ mop_z

const mopt_t mop_z = 0

none

Definition at line 2255 of file hexrays.hpp.

◆ mr_cc

const mreg_t mr_cc = mreg_t(5)

Definition at line 755 of file hexrays.hpp.

◆ mr_cf

const mreg_t mr_cf = mreg_t(0)

Definition at line 749 of file hexrays.hpp.

◆ mr_first

const mreg_t mr_first = mreg_t(8)

Definition at line 756 of file hexrays.hpp.

◆ mr_none

const mreg_t mr_none = mreg_t(-1)

Definition at line 748 of file hexrays.hpp.

◆ mr_of

const mreg_t mr_of = mreg_t(3)

Definition at line 752 of file hexrays.hpp.

◆ mr_pf

const mreg_t mr_pf = mreg_t(4)

Definition at line 753 of file hexrays.hpp.

◆ mr_sf

const mreg_t mr_sf = mreg_t(2)

Definition at line 751 of file hexrays.hpp.

◆ mr_zf

const mreg_t mr_zf = mreg_t(1)

Definition at line 750 of file hexrays.hpp.

◆ MUST_ACCESS

const maymust_t MUST_ACCESS = 0x00

Definition at line 445 of file hexrays.hpp.

◆ NOSIZE

const int NOSIZE = -1

wrong or unexisting operand size

Definition at line 2272 of file hexrays.hpp.

◆ ONE_ACCESS_TYPE

const maymust_t ONE_ACCESS_TYPE = 0x20

Definition at line 450 of file hexrays.hpp.

◆ WITH_ASSERTS

const maymust_t WITH_ASSERTS = 0x200

Definition at line 460 of file hexrays.hpp.