IDA C++ SDK 9.2
Loading...
Searching...
No Matches
hexrays.hpp File Reference

There are 2 representations of the binary code in the decompiler: 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  node_bitset_t
class  array_of_node_bitset_t
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
class  simple_graph_t::iterator
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  intval64_t
class  int64_emulator_t
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
 Array of micro blocks representing microcode for a decompiled function. 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  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  catchexpr_t
 Catch expression. More...
struct  ccatch_t
 Catch clause: "catch ( type obj )". More...
struct  ctry_t
 C++ Try statement. More...
struct  cthrow_t
 Throw statement. More...
struct  cblock_pos_t
 Additional position information for cblocks. 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  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
struct  lvar_mapping_iterator_t
struct  udcall_map_iterator_t
struct  user_cmts_iterator_t
struct  user_iflags_iterator_t
struct  user_unions_iterator_t
struct  user_labels_iterator_t
struct  eamap_iterator_t
struct  boundaries_iterator_t
struct  block_chains_iterator_t

Typedefs

typedef std::set< voff_tvoff_set_t
typedef int mreg_t
 Micro register.
typedef std::set< ea_teaset_t
typedef std::set< minsn_t * > minsn_ptr_set_t
typedef std::set< qstringstrings_t
typedef qvector< minsn_t * > minsnptrs_t
typedef qvector< mop_t * > mopptrs_t
typedef qvector< mop_tmopvec_t
typedef qvector< uint64uint64vec_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)
typedef std::map< ea_t, udcall_tudcall_map_t
typedef size_t mbitmap_t
typedef qvector< bitset_tarray_of_bitsets
typedef ivl_tpl< uval_tuval_ivl_t
typedef ivlset_tpl< ivl_t, uval_tuval_ivl_ivlset_t
 Set of address intervals.
typedef qvector< ivlset_tarray_of_ivlsets
typedef qvector< mlist_tmlistvec_t
typedef uint8 mopt_t
 Instruction operand types.
typedef qvector< mcallarg_tmcallargs_t
typedef qvector< block_chains_tblock_chains_vec_t
 Graph chains.
typedef qvector< hexwarn_thexwarns_t
using mbl_array_t = mba_t
typedef qvector< citem_t * > citem_pointers_t
 Vector of parents.
typedef citem_pointers_t parents_t
typedef std::map< treeloc_t, citem_cmt_tuser_cmts_t
typedef std::map< citem_locator_t, int32user_iflags_t
typedef std::map< ea_t, intvec_tuser_unions_t
typedef qvector< cinsn_t * > cinsnptrvec_t
 Vector of pointers to statements.
typedef qlist< cinsn_tcinsn_list_t
typedef qvector< catchexpr_tcatchexprs_t
typedef qvector< ccatch_tccatchvec_t
typedef qvector< cblock_pos_tcblock_posvec_t
typedef std::map< int, qstringuser_labels_t
typedef std::map< ea_t, cinsnptrvec_teamap_t
typedef std::map< cinsn_t *, rangeset_t > boundaries_t
typedef qvector< cfuncptr_tcfuncptrs_t
typedef voidhexdsp_t(int code,...)
 Hex-Rays decompiler dispatcher.
typedef ssize_t idaapi hexrays_cb_t(void *ud, hexrays_event_t event, va_list va)
 Handler of decompiler events.
typedef qstack< history_item_thistory_t
 Navigation history.
typedef int cmt_type_t
 Comment types.
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_EMULATOR = -35 , MERR_MAX_ERR = 35 , MERR_LOOP = -36
}
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_INSN , 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_SUBFRAME_OVERFLOW ,
  WARN_OPT_VALRNG4 , 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_try = 83 , cit_throw = 84 , 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_TRY ,
  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_hexrays_alloc , hx_hexrays_free , 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_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_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_modify_user_lvar_info , hx_locate_lvar , 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_cleanup , 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_fill_gaps , 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_rlist_t_print , hx_rlist_t_dstr , hx_mlist_t_addmem , hx_mlist_t_print ,
  hx_mlist_t_dstr , hx_mlist_t_compare , hx_get_temp_regs , hx_is_kreg ,
  hx_reg2mreg , hx_mreg2reg , hx_get_mreg_name , hx_install_optinsn_handler ,
  hx_remove_optinsn_handler , hx_install_optblock_handler , hx_remove_optblock_handler , hx_simple_graph_t_compute_dominators ,
  hx_simple_graph_t_compute_immediate_dominators , hx_simple_graph_t_depth_first_preorder , hx_simple_graph_t_depth_first_postorder , hx_simple_graph_t_goup ,
  hx_mutable_graph_t_resize , hx_mutable_graph_t_goup , hx_mutable_graph_t_del_edge , 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_gvar , hx_mop_t_make_gvar ,
  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_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_set_combined ,
  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_minsn_t_serialize , hx_minsn_t_deserialize , 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_optimize_useless_jump , 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_mblock_t_get_valranges_ , hx_mblock_t_get_reginsn_qty ,
  hx_mba_ranges_t_range_contains , hx_mba_t_stkoff_vd2ida , hx_mba_t_stkoff_ida2vd , hx_mba_t_idaloc2vd ,
  hx_mba_t_idaloc2vd_ , hx_mba_t_vd2idaloc , hx_mba_t_vd2idaloc_ , hx_mba_t_term ,
  hx_mba_t_get_curfunc , hx_mba_t_set_maturity , 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_copy_block ,
  hx_mba_t_remove_empty_and_unreachable_blocks , hx_mba_t_merge_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_create_helper_call , hx_mba_t_get_func_output_lists ,
  hx_mba_t_arg , hx_mba_t_alloc_fict_ea , hx_mba_t_map_fict_ea , hx_mba_t_serialize ,
  hx_mba_t_deserialize , hx_mba_t_save_snapshot , hx_mba_t_alloc_kreg , hx_mba_t_free_kreg ,
  hx_mba_t_inline_func , hx_mba_t_locate_stkpnt , hx_mba_t_set_lvar_name , hx_mbl_graph_t_is_accessed_globally ,
  hx_mbl_graph_t_get_ud , hx_mbl_graph_t_get_du , hx_cdg_insn_iterator_t_next , hx_codegen_t_clear ,
  hx_codegen_t_emit , hx_codegen_t_emit_ , hx_change_hexrays_config , 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_cexpr_t_maybe_ptr , hx_cexpr_t_dstr ,
  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_cthrow_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_cinsn_t_dstr , hx_cblock_t_compare ,
  hx_carglist_t_compare , hx_ccase_t_compare , hx_ccases_t_compare , hx_cswitch_t_compare ,
  hx_ccatch_t_compare , hx_ctry_t_compare , hx_ctree_item_t_get_udm , hx_ctree_item_t_get_edm ,
  hx_ctree_item_t_get_lvar , hx_ctree_item_t_get_ea , hx_ctree_item_t_get_label_num , hx_ctree_item_t_print ,
  hx_ctree_item_t_dstr , 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_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_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_refresh_func_ctext , hx_cfunc_t_gather_derefs , hx_cfunc_t_find_item_coords ,
  hx_cfunc_t_cleanup , hx_close_hexrays_waitbox , hx_decompile , hx_gen_microcode ,
  hx_create_cfunc , 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_set_noptr_lvar , 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_udm_type , hx_vdui_t_rename_udm , 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_select_udt_by_offset ,
  hx_catchexpr_t_compare , hx_mba_t_split_block , hx_mba_t_remove_blocks , hx_cfunc_t_recalc_item_addresses ,
  hx_int64_emulator_t_mop_value , hx_int64_emulator_t_minsn_value
}
 API call numbers. More...

Functions

void *hexapi hexrays_alloc (size_t size)
void hexapi hexrays_free (void *ptr)
uvlr_t max_vlr_value (int size)
uvlr_t min_vlr_svalue (int size)
uvlr_t max_vlr_svalue (int size)
bool is_unsigned_cmpop (cmpop_t cmpop)
bool is_signed_cmpop (cmpop_t cmpop)
bool is_cmpop_with_eq (cmpop_t cmpop)
bool is_cmpop_without_eq (cmpop_t cmpop)
 DECLARE_TYPE_AS_MOVABLE (valrng_t)
THREAD_SAFE bool is_may_access (maymust_t maymust)
ea_t hexapi get_merror_desc (qstring *out, merror_t code, mba_t *mba)
 Get textual description of an error code.
THREAD_SAFE bool hexapi must_mcode_close_block (mcode_t mcode, bool including_calls)
 Must an instruction with the given opcode be the last one in a block?
THREAD_SAFE bool hexapi is_mcode_propagatable (mcode_t mcode)
 May opcode be propagated?
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 hexapi negate_mcode_relation (mcode_t code)
THREAD_SAFE mcode_t hexapi swap_mcode_relation (mcode_t code)
THREAD_SAFE mcode_t hexapi get_signed_mcode (mcode_t code)
THREAD_SAFE mcode_t hexapi 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 hexapi mcode_modifies_d (mcode_t mcode)
const char *hexapi dstr (const tinfo_t *tif)
 Print the specified type info.
bool hexapi is_type_correct (const type_t *ptr)
 Verify a type string.
bool hexapi is_small_udt (const tinfo_t &tif)
 Is a small structure or union?
bool hexapi is_nonbool_type (const tinfo_t &type)
 Is definitely a non-boolean type?
bool hexapi is_bool_type (const tinfo_t &type)
 Is a boolean type?
THREAD_SAFE bool is_ptr_or_array (type_t t)
 Is a pointer or array type?
THREAD_SAFE bool is_paf (type_t t)
 Is a pointer, array, or function type?
THREAD_SAFE bool is_inplace_def (const tinfo_t &type)
 Is struct/union/enum definition (not declaration)?
int hexapi partial_type_num (const tinfo_t &type)
 Calculate number of partial subtypes.
tinfo_t hexapi get_float_type (int width)
 Get a type of a floating point value with the specified width.
tinfo_t hexapi get_int_type_by_width_and_sign (int srcwidth, type_sign_t sign)
 Create a type info by width and sign.
tinfo_t hexapi get_unk_type (int size)
 Create a partial type info by width.
tinfo_t hexapi dummy_ptrtype (int ptrsize, bool isfp)
 Generate a dummy pointer type.
tinfo_t hexapi make_pointer (const tinfo_t &type)
 Create a pointer type.
tinfo_t hexapi create_typedef (const char *name)
 Create a reference to a named type.
tinfo_t create_typedef (int n)
 Create a reference to an ordinal type.
bool hexapi get_type (uval_t id, tinfo_t *tif, type_source_t guess)
 Get a global type.
bool hexapi set_type (uval_t id, const tinfo_t &tif, type_source_t source, bool force=false)
 Set a global type.
void hexapi print_vdloc (qstring *vout, const vdloc_t &loc, int nbytes)
 Print vdloc.
bool hexapi arglocs_overlap (const vdloc_t &loc1, size_t w1, const vdloc_t &loc2, size_t w2)
 Do two arglocs overlap?
 DECLARE_TYPE_AS_MOVABLE (lvar_t)
 DECLARE_TYPE_AS_MOVABLE (lvar_saved_info_t)
bool hexapi restore_user_lvar_settings (lvar_uservec_t *lvinf, ea_t func_ea)
 Restore user defined local variable settings in the database.
void hexapi save_user_lvar_settings (ea_t func_ea, const lvar_uservec_t &lvinf)
 Save user defined local variable settings into the database.
bool hexapi modify_user_lvars (ea_t entry_ea, user_lvar_modifier_t &mlv)
 Modify saved local variable settings.
bool hexapi 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.
bool hexapi locate_lvar (lvar_locator_t *out, ea_t func_ea, const char *varname)
 Find a variable by name.
bool rename_lvar (ea_t func_ea, const char *oldname, const char *newname)
 Rename a local variable.
bool hexapi restore_user_defined_calls (udcall_map_t *udcalls, ea_t func_ea)
 Restore user defined function calls from the database.
void hexapi save_user_defined_calls (ea_t func_ea, const udcall_map_t &udcalls)
 Save user defined local function calls into the database.
bool hexapi parse_user_call (udcall_t *udc, const char *decl, bool silent)
 Convert function type declaration into internal structure.
merror_t hexapi convert_to_user_call (const udcall_t &udc, codegen_t &cdg)
 try to generate user-defined call for an instruction
bool hexapi install_microcode_filter (microcode_filter_t *filter, bool install=true)
 register/unregister non-standard microcode generator
 DECLARE_TYPE_AS_MOVABLE (bitset_t)
 DECLARE_TYPE_AS_MOVABLE (node_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_t &hexapi get_temp_regs ()
 Get list of temporary registers.
bool hexapi is_kreg (mreg_t r)
 Is a kernel register?
mreg_t hexapi reg2mreg (int reg)
 Map a processor register to a microregister.
int hexapi mreg2reg (mreg_t reg, int width)
 Map a microregister to a processor register.
int hexapi get_mreg_name (qstring *out, mreg_t reg, int width, void *ud=nullptr)
 Get the microregister name.
void hexapi install_optinsn_handler (optinsn_t *opt)
 Install an instruction level custom optimizer.
bool hexapi remove_optinsn_handler (optinsn_t *opt)
 Remove an instruction level custom optimizer.
void hexapi install_optblock_handler (optblock_t *opt)
 Install a block level custom optimizer.
bool hexapi remove_optblock_handler (optblock_t *opt)
 Remove a block level custom optimizer.
 DECLARE_TYPE_AS_MOVABLE (mop_t)
 DECLARE_TYPE_AS_MOVABLE (mcallarg_t)
const minsn_t *hexapi getf_reginsn (const minsn_t *ins)
 Skip assertions forward.
const minsn_t *hexapi getb_reginsn (const minsn_t *ins)
 Skip assertions backward.
minsn_tgetf_reginsn (minsn_t *ins)
minsn_tgetb_reginsn (minsn_t *ins)
 DECLARE_TYPE_AS_MOVABLE (hexwarn_t)
bool hexapi change_hexrays_config (const char *directive)
 Parse DIRECTIVE and update the current configuration variables.
const char *hexapi get_hexrays_version ()
 Get decompiler version.
vdui_t *hexapi open_pseudocode (ea_t ea, int flags)
 Open pseudocode window.
bool hexapi close_pseudocode (TWidget *f)
 Close pseudocode window.
vdui_t *hexapi get_widget_vdui (TWidget *f)
 Get the vdui_t instance associated to the TWidget.
bool hexapi decompile_many (const char *outfile, const eavec_t *funcaddrs, int flags)
 Batch decompilation.
void hexapi send_database (const hexrays_failure_t &err, bool silent)
 Send the database to Hex-Rays.
bool hexapi get_current_operand (gco_info_t *out)
 Get the instruction operand under the cursor.
void hexapi remitem (const citem_t *e)
ctype_t hexapi negated_relation (ctype_t op)
 Negate a comparison operator. For example, cot_sge becomes cot_slt.
ctype_t hexapi swapped_relation (ctype_t op)
 Swap a comparison operator. For example, cot_sge becomes cot_sle.
type_sign_t hexapi get_op_signness (ctype_t op)
 Get operator sign. Meaningful for sign-dependent operators, like cot_sdiv.
ctype_t hexapi asgop (ctype_t cop)
 Convert plain operator into assignment operator. For example, cot_add returns cot_asgadd.
ctype_t hexapi asgop_revert (ctype_t cop)
 Convert assignment operator into plain operator.
bool op_uses_x (ctype_t op)
 Does operator use the 'x' field of cexpr_t?
bool op_uses_y (ctype_t op)
 Does operator use the 'y' field of cexpr_t?
bool op_uses_z (ctype_t op)
 Does operator use the 'z' field of cexpr_t?
bool is_binary (ctype_t op)
 Is binary operator?
bool is_unary (ctype_t op)
 Is unary operator?
bool is_relational (ctype_t op)
 Is comparison operator?
bool is_assignment (ctype_t op)
 Is assignment operator?
bool accepts_udts (ctype_t op)
bool is_prepost (ctype_t op)
 Is pre/post increment/decrement operator?
bool is_commutative (ctype_t op)
 Is commutative operator?
bool is_additive (ctype_t op)
 Is additive operator?
bool is_multiplicative (ctype_t op)
 Is multiplicative operator?
bool is_bitop (ctype_t op)
 Is bit related operator?
bool is_logical (ctype_t op)
 Is logical operator?
bool is_loop (ctype_t op)
 Is loop statement code?
bool is_break_consumer (ctype_t op)
 Does a break statement influence the specified statement code?
bool is_lvalue (ctype_t op)
 Is Lvalue operator?
bool accepts_small_udts (ctype_t op)
 Is the operator allowed on small structure or union?
 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)
 DECLARE_TYPE_AS_MOVABLE (catchexpr_t)
 DECLARE_TYPE_AS_MOVABLE (cblock_pos_t)
cexpr_t *hexapi lnot (cexpr_t *e)
 Logically negate the specified expression.
cinsn_t *hexapi new_block ()
 Create a new block-statement.
 AS_PRINTF (3, 0) cexpr_t *hexapi vcreate_helper(bool standalone
 Create a helper object.
const tinfo_t const char va_start (va, format)
 va_end (va)
 AS_PRINTF (3, 0) cexpr_t *hexapi vcall_helper(const tinfo_t &rettype
 Create a helper call expression.
 AS_PRINTF (3, 4) inline cexpr_t *call_helper(const tinfo_t &rettype
 Create a helper call.
cexpr_t *hexapi 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.
cexpr_t *hexapi make_ref (cexpr_t *e)
 Create a reference.
cexpr_t *hexapi dereference (cexpr_t *e, int ptrsize, bool is_flt=false)
 Dereference a pointer.
void hexapi save_user_labels (ea_t func_ea, const user_labels_t *user_labels, const cfunc_t *func=nullptr)
 Save user defined labels into the database.
void hexapi save_user_cmts (ea_t func_ea, const user_cmts_t *user_cmts)
 Save user defined comments into the database.
void hexapi save_user_numforms (ea_t func_ea, const user_numforms_t *numforms)
 Save user defined number formats into the database.
void hexapi save_user_iflags (ea_t func_ea, const user_iflags_t *iflags)
 Save user defined citem iflags into the database.
void hexapi save_user_unions (ea_t func_ea, const user_unions_t *unions)
 Save user defined union field selections into the database.
user_labels_t *hexapi restore_user_labels (ea_t func_ea, const cfunc_t *func=nullptr)
 Restore user defined labels from the database.
user_cmts_t *hexapi restore_user_cmts (ea_t func_ea)
 Restore user defined comments from the database.
user_numforms_t *hexapi restore_user_numforms (ea_t func_ea)
 Restore user defined number formats from the database.
user_iflags_t *hexapi restore_user_iflags (ea_t func_ea)
 Restore user defined citem iflags from the database.
user_unions_t *hexapi restore_user_unions (ea_t func_ea)
 Restore user defined union field selections from the database.
void hexapi close_hexrays_waitbox ()
 Close the waitbox displayed by the decompiler.
cfuncptr_t hexapi decompile (const mba_ranges_t &mbr, hexrays_failure_t *hf=nullptr, int decomp_flags=0)
 Decompile a snippet or a function.
cfuncptr_t decompile_func (func_t *pfn, hexrays_failure_t *hf=nullptr, int decomp_flags=0)
 Decompile a function.
cfuncptr_t decompile_snippet (const rangevec_t &ranges, hexrays_failure_t *hf=nullptr, int decomp_flags=0)
 Decompile a snippet.
mba_t *hexapi 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.
mba_tcreate_empty_mba (const mba_ranges_t &mbr, hexrays_failure_t *hf=nullptr)
 Create an empty microcode object.
cfuncptr_t hexapi create_cfunc (mba_t *mba)
 Create a new cfunc_t object.
bool hexapi mark_cfunc_dirty (ea_t ea, bool close_views=false)
 Flush the cached decompilation results.
void hexapi clear_cached_cfuncs ()
 Flush all cached decompilation results.
bool hexapi has_cached_cfunc (ea_t ea)
 Do we have a cached decompilation result for 'ea'?
const char *hexapi get_ctype_name (ctype_t op)
qstring hexapi create_field_name (const tinfo_t &type, uval_t offset=BADADDR)
enum hexrays_event_t ENUM_SIZE (int)
 Decompiler events.
bool hexapi install_hexrays_callback (hexrays_cb_t *callback, void *ud)
 Install handler for decompiler events.
int hexapi remove_hexrays_callback (hexrays_cb_t *callback, void *ud)
 Uninstall handler for decompiler events.
 DECLARE_TYPE_AS_MOVABLE (ui_stroff_op_t)
int hexapi select_udt_by_offset (const qvector< tinfo_t > *udts, const ui_stroff_ops_t &ops, ui_stroff_applicator_t &applicator)
 Select UDT.
bool init_hexrays_plugin (int flags=0)
 Check that your plugin is compatible with hex-rays decompiler.
void term_hexrays_plugin ()
 Stop working with hex-rays decompiler.
operand_locator_t const & user_numforms_first (user_numforms_iterator_t p)
 Get reference to the current map key.
number_format_tuser_numforms_second (user_numforms_iterator_t p)
 Get reference to the current map value.
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.
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.
user_numforms_iterator_t user_numforms_begin (const user_numforms_t *map)
 Get iterator pointing to the beginning of user_numforms_t.
user_numforms_iterator_t user_numforms_end (const user_numforms_t *map)
 Get iterator pointing to the end of user_numforms_t.
user_numforms_iterator_t user_numforms_next (user_numforms_iterator_t p)
 Move to the next element.
user_numforms_iterator_t user_numforms_prev (user_numforms_iterator_t p)
 Move to the previous element.
void user_numforms_erase (user_numforms_t *map, user_numforms_iterator_t p)
 Erase current element from user_numforms_t.
void user_numforms_clear (user_numforms_t *map)
 Clear user_numforms_t.
size_t user_numforms_size (user_numforms_t *map)
 Get size of user_numforms_t.
void user_numforms_free (user_numforms_t *map)
 Delete user_numforms_t instance.
user_numforms_tuser_numforms_new ()
 Create a new user_numforms_t instance.
lvar_locator_t const & lvar_mapping_first (lvar_mapping_iterator_t p)
 Get reference to the current map key.
lvar_locator_tlvar_mapping_second (lvar_mapping_iterator_t p)
 Get reference to the current map value.
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.
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.
lvar_mapping_iterator_t lvar_mapping_begin (const lvar_mapping_t *map)
 Get iterator pointing to the beginning of lvar_mapping_t.
lvar_mapping_iterator_t lvar_mapping_end (const lvar_mapping_t *map)
 Get iterator pointing to the end of lvar_mapping_t.
lvar_mapping_iterator_t lvar_mapping_next (lvar_mapping_iterator_t p)
 Move to the next element.
lvar_mapping_iterator_t lvar_mapping_prev (lvar_mapping_iterator_t p)
 Move to the previous element.
void lvar_mapping_erase (lvar_mapping_t *map, lvar_mapping_iterator_t p)
 Erase current element from lvar_mapping_t.
void lvar_mapping_clear (lvar_mapping_t *map)
 Clear lvar_mapping_t.
size_t lvar_mapping_size (lvar_mapping_t *map)
 Get size of lvar_mapping_t.
void lvar_mapping_free (lvar_mapping_t *map)
 Delete lvar_mapping_t instance.
lvar_mapping_tlvar_mapping_new ()
 Create a new lvar_mapping_t instance.
ea_t const & udcall_map_first (udcall_map_iterator_t p)
 Get reference to the current map key.
udcall_tudcall_map_second (udcall_map_iterator_t p)
 Get reference to the current map value.
udcall_map_iterator_t udcall_map_find (const udcall_map_t *map, const ea_t &key)
 Find the specified key in udcall_map_t.
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.
udcall_map_iterator_t udcall_map_begin (const udcall_map_t *map)
 Get iterator pointing to the beginning of udcall_map_t.
udcall_map_iterator_t udcall_map_end (const udcall_map_t *map)
 Get iterator pointing to the end of udcall_map_t.
udcall_map_iterator_t udcall_map_next (udcall_map_iterator_t p)
 Move to the next element.
udcall_map_iterator_t udcall_map_prev (udcall_map_iterator_t p)
 Move to the previous element.
void udcall_map_erase (udcall_map_t *map, udcall_map_iterator_t p)
 Erase current element from udcall_map_t.
void udcall_map_clear (udcall_map_t *map)
 Clear udcall_map_t.
size_t udcall_map_size (udcall_map_t *map)
 Get size of udcall_map_t.
void udcall_map_free (udcall_map_t *map)
 Delete udcall_map_t instance.
udcall_map_tudcall_map_new ()
 Create a new udcall_map_t instance.
treeloc_t const & user_cmts_first (user_cmts_iterator_t p)
 Get reference to the current map key.
citem_cmt_tuser_cmts_second (user_cmts_iterator_t p)
 Get reference to the current map value.
user_cmts_iterator_t user_cmts_find (const user_cmts_t *map, const treeloc_t &key)
 Find the specified key in user_cmts_t.
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.
user_cmts_iterator_t user_cmts_begin (const user_cmts_t *map)
 Get iterator pointing to the beginning of user_cmts_t.
user_cmts_iterator_t user_cmts_end (const user_cmts_t *map)
 Get iterator pointing to the end of user_cmts_t.
user_cmts_iterator_t user_cmts_next (user_cmts_iterator_t p)
 Move to the next element.
user_cmts_iterator_t user_cmts_prev (user_cmts_iterator_t p)
 Move to the previous element.
void user_cmts_erase (user_cmts_t *map, user_cmts_iterator_t p)
 Erase current element from user_cmts_t.
void user_cmts_clear (user_cmts_t *map)
 Clear user_cmts_t.
size_t user_cmts_size (user_cmts_t *map)
 Get size of user_cmts_t.
void user_cmts_free (user_cmts_t *map)
 Delete user_cmts_t instance.
user_cmts_tuser_cmts_new ()
 Create a new user_cmts_t instance.
citem_locator_t const & user_iflags_first (user_iflags_iterator_t p)
 Get reference to the current map key.
int32user_iflags_second (user_iflags_iterator_t p)
 Get reference to the current map value.
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.
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.
user_iflags_iterator_t user_iflags_begin (const user_iflags_t *map)
 Get iterator pointing to the beginning of user_iflags_t.
user_iflags_iterator_t user_iflags_end (const user_iflags_t *map)
 Get iterator pointing to the end of user_iflags_t.
user_iflags_iterator_t user_iflags_next (user_iflags_iterator_t p)
 Move to the next element.
user_iflags_iterator_t user_iflags_prev (user_iflags_iterator_t p)
 Move to the previous element.
void user_iflags_erase (user_iflags_t *map, user_iflags_iterator_t p)
 Erase current element from user_iflags_t.
void user_iflags_clear (user_iflags_t *map)
 Clear user_iflags_t.
size_t user_iflags_size (user_iflags_t *map)
 Get size of user_iflags_t.
void user_iflags_free (user_iflags_t *map)
 Delete user_iflags_t instance.
user_iflags_tuser_iflags_new ()
 Create a new user_iflags_t instance.
ea_t const & user_unions_first (user_unions_iterator_t p)
 Get reference to the current map key.
intvec_tuser_unions_second (user_unions_iterator_t p)
 Get reference to the current map value.
user_unions_iterator_t user_unions_find (const user_unions_t *map, const ea_t &key)
 Find the specified key in user_unions_t.
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.
user_unions_iterator_t user_unions_begin (const user_unions_t *map)
 Get iterator pointing to the beginning of user_unions_t.
user_unions_iterator_t user_unions_end (const user_unions_t *map)
 Get iterator pointing to the end of user_unions_t.
user_unions_iterator_t user_unions_next (user_unions_iterator_t p)
 Move to the next element.
user_unions_iterator_t user_unions_prev (user_unions_iterator_t p)
 Move to the previous element.
void user_unions_erase (user_unions_t *map, user_unions_iterator_t p)
 Erase current element from user_unions_t.
void user_unions_clear (user_unions_t *map)
 Clear user_unions_t.
size_t user_unions_size (user_unions_t *map)
 Get size of user_unions_t.
void user_unions_free (user_unions_t *map)
 Delete user_unions_t instance.
user_unions_tuser_unions_new ()
 Create a new user_unions_t instance.
int const & user_labels_first (user_labels_iterator_t p)
 Get reference to the current map key.
qstringuser_labels_second (user_labels_iterator_t p)
 Get reference to the current map value.
user_labels_iterator_t user_labels_find (const user_labels_t *map, const int &key)
 Find the specified key in user_labels_t.
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.
user_labels_iterator_t user_labels_begin (const user_labels_t *map)
 Get iterator pointing to the beginning of user_labels_t.
user_labels_iterator_t user_labels_end (const user_labels_t *map)
 Get iterator pointing to the end of user_labels_t.
user_labels_iterator_t user_labels_next (user_labels_iterator_t p)
 Move to the next element.
user_labels_iterator_t user_labels_prev (user_labels_iterator_t p)
 Move to the previous element.
void user_labels_erase (user_labels_t *map, user_labels_iterator_t p)
 Erase current element from user_labels_t.
void user_labels_clear (user_labels_t *map)
 Clear user_labels_t.
size_t user_labels_size (user_labels_t *map)
 Get size of user_labels_t.
void user_labels_free (user_labels_t *map)
 Delete user_labels_t instance.
user_labels_tuser_labels_new ()
 Create a new user_labels_t instance.
ea_t const & eamap_first (eamap_iterator_t p)
 Get reference to the current map key.
cinsnptrvec_teamap_second (eamap_iterator_t p)
 Get reference to the current map value.
eamap_iterator_t eamap_find (const eamap_t *map, const ea_t &key)
 Find the specified key in eamap_t.
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.
eamap_iterator_t eamap_begin (const eamap_t *map)
 Get iterator pointing to the beginning of eamap_t.
eamap_iterator_t eamap_end (const eamap_t *map)
 Get iterator pointing to the end of eamap_t.
eamap_iterator_t eamap_next (eamap_iterator_t p)
 Move to the next element.
eamap_iterator_t eamap_prev (eamap_iterator_t p)
 Move to the previous element.
void eamap_erase (eamap_t *map, eamap_iterator_t p)
 Erase current element from eamap_t.
void eamap_clear (eamap_t *map)
 Clear eamap_t.
size_t eamap_size (eamap_t *map)
 Get size of eamap_t.
void eamap_free (eamap_t *map)
 Delete eamap_t instance.
eamap_teamap_new ()
 Create a new eamap_t instance.
cinsn_t *const & boundaries_first (boundaries_iterator_t p)
 Get reference to the current map key.
rangeset_t & boundaries_second (boundaries_iterator_t p)
 Get reference to the current map value.
boundaries_iterator_t boundaries_find (const boundaries_t *map, const cinsn_t *&key)
 Find the specified key in boundaries_t.
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.
boundaries_iterator_t boundaries_begin (const boundaries_t *map)
 Get iterator pointing to the beginning of boundaries_t.
boundaries_iterator_t boundaries_end (const boundaries_t *map)
 Get iterator pointing to the end of boundaries_t.
boundaries_iterator_t boundaries_next (boundaries_iterator_t p)
 Move to the next element.
boundaries_iterator_t boundaries_prev (boundaries_iterator_t p)
 Move to the previous element.
void boundaries_erase (boundaries_t *map, boundaries_iterator_t p)
 Erase current element from boundaries_t.
void boundaries_clear (boundaries_t *map)
 Clear boundaries_t.
size_t boundaries_size (boundaries_t *map)
 Get size of boundaries_t.
void boundaries_free (boundaries_t *map)
 Delete boundaries_t instance.
boundaries_tboundaries_new ()
 Create a new boundaries_t instance.
chain_tblock_chains_get (block_chains_iterator_t p)
 Get reference to the current set value.
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.
block_chains_iterator_t block_chains_insert (block_chains_t *set, const chain_t &val)
 Insert new (chain_t) into set block_chains_t.
block_chains_iterator_t block_chains_begin (const block_chains_t *set)
 Get iterator pointing to the beginning of block_chains_t.
block_chains_iterator_t block_chains_end (const block_chains_t *set)
 Get iterator pointing to the end of block_chains_t.
block_chains_iterator_t block_chains_next (block_chains_iterator_t p)
 Move to the next element.
block_chains_iterator_t block_chains_prev (block_chains_iterator_t p)
 Move to the previous element.
void block_chains_erase (block_chains_t *set, block_chains_iterator_t p)
 Erase current element from block_chains_t.
void block_chains_clear (block_chains_t *set)
 Clear block_chains_t.
size_t block_chains_size (block_chains_t *set)
 Get size of block_chains_t.
void block_chains_free (block_chains_t *set)
 Delete block_chains_t instance.
block_chains_tblock_chains_new ()
 Create a new block_chains_t instance.
 AS_PRINTF (2, 0) void mblock_t
Anterior/Posterior lines
 AS_PRINTF (3, 4) inline cexpr_t *create_helper(bool standalone
 Create a helper object..

Variables

const uvlr_t MAX_VLR_VALUE = uvlr_t(-1)
const svlr_t MAX_VLR_SVALUE = svlr_t(uvlr_t(-1) >> 1)
const svlr_t MIN_VLR_SVALUE = ~MAX_VLR_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
const mopt_t mop_r = 1
 register (they exist until MMAT_LVARS)
const mopt_t mop_n = 2
 immediate number constant
const mopt_t mop_str = 3
 immediate string constant (user representation)
const mopt_t mop_d = 4
 result of another instruction
const mopt_t mop_S = 5
 local stack variable (they exist until MMAT_LVARS)
const mopt_t mop_v = 6
 global variable
const mopt_t mop_b = 7
 micro basic block (mblock_t)
const mopt_t mop_f = 8
 list of arguments
const mopt_t mop_l = 9
 local variable
const mopt_t mop_a = 10
 mop_addr_t: address of operand (mop_l, mop_v, mop_S, mop_r)
const mopt_t mop_h = 11
 helper function
const mopt_t mop_c = 12
 mcases
const mopt_t mop_fn = 13
 floating point constant
const mopt_t mop_p = 14
 operand pair
const mopt_t mop_sc = 15
 scattered
const int NOSIZE = -1
 wrong or unexisting operand size
const tinfo_ttype
const tinfo_t const char * format
const tinfo_t const char va_list va
cexpr_te = vcreate_helper(standalone, type, format, va)
carglist_targs
const int64 HEXRAYS_API_MAGIC = 0x00DEC0DE00000004LL
const cmt_type_t CMT_NONE = 0x0000
 No comment is possible.
const cmt_type_t CMT_TAIL = 0x0001
 Indented comment.
const cmt_type_t CMT_BLOCK1 = 0x0002
 Anterioir block comment.
const cmt_type_t CMT_BLOCK2 = 0x0004
 Posterior block comment.
const cmt_type_t CMT_LVAR = 0x0008
 Local variable comment.
const cmt_type_t CMT_FUNC = 0x0010
 Function comment.
const cmt_type_t CMT_ALL = 0x001F
 All comments.

Detailed Description

There are 2 representations of the binary code in the decompiler:

 - microcode: processor instructions are translated into it and then
              the decompiler optimizes and transforms it
 - ctree:     ctree is built from the optimized microcode and represents
              AST-like tree with C statements and expressions. It can
              be printed as C code.

Microcode is represented by the following classes:

  • mba_t keeps general info about the decompiled code and array of basic blocks. usually mba_t is named 'mba'
  • mblock_t a basic block. includes list of instructions
  • minsn_t an instruction. contains 3 operands: left, right, and destination
  • mop_t an operand. depending on its type may hold various info like a number, register, stack variable, etc.
  • mlist_t list of memory or register locations; can hold vast areas of memory and multiple registers. this class is used very extensively in the decompiler. it may represent list of locations accessed by an instruction or even an entire basic block. it is also used as argument of many functions. for example, there is a function that searches for an instruction that refers to a mlist_t.

See https://hex-rays.com/blog/microcode-in-pictures for a few pictures.

Ctree is represented by:

  • cfunc_t keeps general info about the decompiled code, including a pointer to mba_t. deleting cfunc_t will delete mba_t too (however, decompiler returns cfuncptr_t, which is a reference counting object and deletes the underlying function as soon as all references to it go out of scope). cfunc_t has 'body', which represents the decompiled function body as cinsn_t.
  • cinsn_t a C statement. can be a compound statement or any other legal C statements (like if, for, while, return, expression-statement, etc). depending on the statement type has pointers to additional info. for example, the 'if' statement has poiner to cif_t, which holds the 'if' condition, 'then' branch, and optionally 'else' branch. Please note that despite of the name cinsn_t we say "statements", not "instructions". For us instructions are part of microcode, not ctree.
  • cexpr_t a C expression. is used as part of a C statement, when necessary. cexpr_t has 'type' field, which keeps the expression type.
  • citem_t a base class for cinsn_t and cexpr_t, holds common info like the address, label, and opcode.
  • cnumber_t a constant 64-bit number. in addition to its value also holds information how to represent it: decimal, hex, or as a symbolic constant (enum member). please note that numbers are represented by another class (mnumber_t) in microcode.

See https://hex-rays.com/blog/hex-rays-decompiler-primer for more pictures and more details.

Both microcode and ctree use the following class:

  • lvar_t a local variable. may represent a stack or register variable. a variable has a name, type, location, etc. the list of variables is stored in mba->vars.
  • lvar_locator_t holds a variable location (vdloc_t) and its definition address.
  • vdloc_t describes a variable location, like a register number, a stack offset, or, in complex cases, can be a mix of register and stack locations. very similar to argloc_t, which is used in ida. the differences between argloc_t and vdloc_t are:
    • vdloc_t never uses ARGLOC_REG2
    • vdloc_t uses micro register numbers instead of processor register numbers
    • the stack offsets are never negative in vdloc_t, while in argloc_t there can be negative offsets

The above are the most important classes in this header file. There are many auxiliary classes, please see their definitions in the header file.

See also the description of Virtual Machine used by Microcode.

Typedef Documentation

◆ voff_set_t

typedef std::set<voff_t> voff_set_t

◆ mreg_t

typedef int mreg_t

Micro register.

◆ easet_t

typedef std::set<ea_t> easet_t

◆ minsn_ptr_set_t

typedef std::set<minsn_t *> minsn_ptr_set_t

◆ strings_t

typedef std::set<qstring> strings_t

◆ minsnptrs_t

◆ mopptrs_t

typedef qvector<mop_t*> mopptrs_t

◆ mopvec_t

◆ uint64vec_t

◆ mregvec_t

◆ cfuncptr_t

◆ uvlr_t

typedef uint64 uvlr_t

◆ svlr_t

typedef int64 svlr_t

◆ maymust_t

typedef int maymust_t

◆ user_numforms_t

◆ lvar_saved_infos_t

◆ lvar_mapping_t

Local variable mapping (is used to merge variables)

◆ udcall_map_t

typedef std::map<ea_t, udcall_t> udcall_map_t

◆ mbitmap_t

typedef size_t mbitmap_t

◆ array_of_bitsets

◆ uval_ivl_t

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

◆ array_of_ivlsets

◆ mlistvec_t

◆ mopt_t

typedef uint8 mopt_t

Instruction operand types.

◆ mcallargs_t

◆ block_chains_vec_t

Graph chains.

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

◆ hexwarns_t

◆ mbl_array_t

using mbl_array_t = mba_t

◆ citem_pointers_t

Vector of parents.

◆ parents_t

◆ user_cmts_t

typedef std::map<treeloc_t, citem_cmt_t> user_cmts_t

◆ user_iflags_t

typedef std::map<citem_locator_t, int32> user_iflags_t

◆ user_unions_t

typedef std::map<ea_t, intvec_t> user_unions_t

◆ cinsnptrvec_t

Vector of pointers to statements.

◆ cinsn_list_t

◆ catchexprs_t

◆ ccatchvec_t

◆ cblock_posvec_t

◆ user_labels_t

typedef std::map<int, qstring> user_labels_t

◆ eamap_t

typedef std::map<ea_t, cinsnptrvec_t> eamap_t

◆ boundaries_t

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

◆ cfuncptrs_t

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

◆ hexrays_cb_t

typedef ssize_t idaapi 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.

◆ history_t

Navigation history.

◆ cmt_type_t

typedef int cmt_type_t

Comment types.

◆ ui_stroff_ops_t

◆ iterator_word

typedef size_t iterator_word

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
MAX_VLR_SIZE 

◆ cmpop_t

enum cmpop_t
Enumerator
CMP_NZ 
CMP_Z 
CMP_AE 
CMP_B 
CMP_A 
CMP_BE 
CMP_GT 
CMP_GE 
CMP_LT 
CMP_LE 

◆ mcode_t

enum mcode_t
Enumerator
m_nop 
m_stx 
m_ldx 
m_ldc 
m_mov 
m_neg 
m_lnot 
m_bnot 
m_xds 
m_xdu 
m_low 
m_high 
m_add 
m_sub 
m_mul 
m_udiv 
m_sdiv 
m_umod 
m_smod 
m_or 
m_and 
m_xor 
m_shl 
m_shr 
m_sar 
m_cfadd 
m_ofadd 
m_cfshl 
m_cfshr 
m_sets 
m_seto 
m_setp 
m_setnz 
m_setz 
m_setae 
m_setb 
m_seta 
m_setbe 
m_setg 
m_setge 
m_setl 
m_setle 
m_jcnd 
m_jnz 
m_jz 
m_jae 
m_jb 
m_ja 
m_jbe 
m_jg 
m_jge 
m_jl 
m_jle 
m_jtbl 
m_ijmp 
m_goto 
m_call 
m_icall 
m_ret 
m_push 
m_pop 
m_und 
m_ext 
m_f2i 
m_f2u 
m_i2f 
m_u2f 
m_f2f 
m_fneg 
m_fadd 
m_fsub 
m_fmul 
m_fdiv 

◆ 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

◆ 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

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

◆ 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_INSN 

29 fixed broken 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_SUBFRAME_OVERFLOW 

55 call arguments overflow the function chunk frame

WARN_OPT_VALRNG4 

56 the cases s were optimized away because s

WARN_MAX 

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

◆ 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

◆ 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

◆ 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

◆ 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_empty 
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

cot_last 
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

cit_try 

C++ try-statement.

cit_throw 

C++ throw-statement.

cit_end 

◆ 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

◆ 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_ARG64 
ITP_BRACE1 
ITP_INNER_LAST 
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_TRY 

C++ try statement.

ITP_CASE 

bit for switch cases

ITP_SIGN 

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

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

◆ 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

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

◆ allow_unused_labels_t

Unused label disposition.

Enumerator
FORBID_UNUSED_LABELS 

Unused labels cause interr.

ALLOW_UNUSED_LABELS 

Unused labels are permitted.

◆ hexcall_t

enum hexcall_t

API call numbers.

Enumerator
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_hexrays_alloc 
hx_hexrays_free 
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_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_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_modify_user_lvar_info 
hx_locate_lvar 
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_cleanup 
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_fill_gaps 
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_rlist_t_print 
hx_rlist_t_dstr 
hx_mlist_t_addmem 
hx_mlist_t_print 
hx_mlist_t_dstr 
hx_mlist_t_compare 
hx_get_temp_regs 
hx_is_kreg 
hx_reg2mreg 
hx_mreg2reg 
hx_get_mreg_name 
hx_install_optinsn_handler 
hx_remove_optinsn_handler 
hx_install_optblock_handler 
hx_remove_optblock_handler 
hx_simple_graph_t_compute_dominators 
hx_simple_graph_t_compute_immediate_dominators 
hx_simple_graph_t_depth_first_preorder 
hx_simple_graph_t_depth_first_postorder 
hx_simple_graph_t_goup 
hx_mutable_graph_t_resize 
hx_mutable_graph_t_goup 
hx_mutable_graph_t_del_edge 
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_gvar 
hx_mop_t_make_gvar 
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_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_set_combined 
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_minsn_t_serialize 
hx_minsn_t_deserialize 
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_optimize_useless_jump 
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_mblock_t_get_valranges_ 
hx_mblock_t_get_reginsn_qty 
hx_mba_ranges_t_range_contains 
hx_mba_t_stkoff_vd2ida 
hx_mba_t_stkoff_ida2vd 
hx_mba_t_idaloc2vd 
hx_mba_t_idaloc2vd_ 
hx_mba_t_vd2idaloc 
hx_mba_t_vd2idaloc_ 
hx_mba_t_term 
hx_mba_t_get_curfunc 
hx_mba_t_set_maturity 
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_copy_block 
hx_mba_t_remove_empty_and_unreachable_blocks 
hx_mba_t_merge_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_create_helper_call 
hx_mba_t_get_func_output_lists 
hx_mba_t_arg 
hx_mba_t_alloc_fict_ea 
hx_mba_t_map_fict_ea 
hx_mba_t_serialize 
hx_mba_t_deserialize 
hx_mba_t_save_snapshot 
hx_mba_t_alloc_kreg 
hx_mba_t_free_kreg 
hx_mba_t_inline_func 
hx_mba_t_locate_stkpnt 
hx_mba_t_set_lvar_name 
hx_mbl_graph_t_is_accessed_globally 
hx_mbl_graph_t_get_ud 
hx_mbl_graph_t_get_du 
hx_cdg_insn_iterator_t_next 
hx_codegen_t_clear 
hx_codegen_t_emit 
hx_codegen_t_emit_ 
hx_change_hexrays_config 
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_cexpr_t_maybe_ptr 
hx_cexpr_t_dstr 
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_cthrow_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_cinsn_t_dstr 
hx_cblock_t_compare 
hx_carglist_t_compare 
hx_ccase_t_compare 
hx_ccases_t_compare 
hx_cswitch_t_compare 
hx_ccatch_t_compare 
hx_ctry_t_compare 
hx_ctree_item_t_get_udm 
hx_ctree_item_t_get_edm 
hx_ctree_item_t_get_lvar 
hx_ctree_item_t_get_ea 
hx_ctree_item_t_get_label_num 
hx_ctree_item_t_print 
hx_ctree_item_t_dstr 
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_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_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_refresh_func_ctext 
hx_cfunc_t_gather_derefs 
hx_cfunc_t_find_item_coords 
hx_cfunc_t_cleanup 
hx_close_hexrays_waitbox 
hx_decompile 
hx_gen_microcode 
hx_create_cfunc 
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_set_noptr_lvar 
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_udm_type 
hx_vdui_t_rename_udm 
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_select_udt_by_offset 
hx_catchexpr_t_compare 
hx_mba_t_split_block 
hx_mba_t_remove_blocks 
hx_cfunc_t_recalc_item_addresses 
hx_int64_emulator_t_mop_value 
hx_int64_emulator_t_minsn_value 

Function Documentation

◆ hexrays_alloc()

void * hexrays_alloc ( size_t size)
inline

◆ hexrays_free()

void hexrays_free ( void * ptr)
inline

◆ max_vlr_value()

uvlr_t max_vlr_value ( int size)
inline

◆ min_vlr_svalue()

uvlr_t min_vlr_svalue ( int size)
inline

◆ max_vlr_svalue()

uvlr_t max_vlr_svalue ( int size)
inline

◆ is_unsigned_cmpop()

bool is_unsigned_cmpop ( cmpop_t cmpop)
inline

◆ is_signed_cmpop()

bool is_signed_cmpop ( cmpop_t cmpop)
inline

◆ is_cmpop_with_eq()

bool is_cmpop_with_eq ( cmpop_t cmpop)
inline

◆ is_cmpop_without_eq()

bool is_cmpop_without_eq ( cmpop_t cmpop)
inline

◆ DECLARE_TYPE_AS_MOVABLE() [1/22]

DECLARE_TYPE_AS_MOVABLE ( valrng_t )

◆ is_may_access()

THREAD_SAFE bool is_may_access ( maymust_t maymust)
inline

◆ get_merror_desc()

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

Get textual description of an error code.

Parameters
outthe output buffer for the error description
codeMicrocode error code
mbathe microcode array
Returns
the error address

◆ must_mcode_close_block()

THREAD_SAFE bool must_mcode_close_block ( mcode_t mcode,
bool including_calls )
inline

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.

◆ is_mcode_propagatable()

THREAD_SAFE bool is_mcode_propagatable ( mcode_t mcode)
inline

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.

◆ is_mcode_addsub()

THREAD_SAFE bool is_mcode_addsub ( mcode_t mcode)
inline

◆ is_mcode_xdsu()

THREAD_SAFE bool is_mcode_xdsu ( mcode_t mcode)
inline

◆ is_mcode_set()

THREAD_SAFE bool is_mcode_set ( mcode_t mcode)
inline

◆ is_mcode_set1()

THREAD_SAFE bool is_mcode_set1 ( mcode_t mcode)
inline

◆ is_mcode_j1()

THREAD_SAFE bool is_mcode_j1 ( mcode_t mcode)
inline

◆ is_mcode_jcond()

THREAD_SAFE bool is_mcode_jcond ( mcode_t mcode)
inline

◆ is_mcode_convertible_to_jmp()

THREAD_SAFE bool is_mcode_convertible_to_jmp ( mcode_t mcode)
inline

◆ is_mcode_convertible_to_set()

THREAD_SAFE bool is_mcode_convertible_to_set ( mcode_t mcode)
inline

◆ is_mcode_call()

THREAD_SAFE bool is_mcode_call ( mcode_t mcode)
inline

◆ is_mcode_fpu()

THREAD_SAFE bool is_mcode_fpu ( mcode_t mcode)
inline

◆ is_mcode_commutative()

THREAD_SAFE bool is_mcode_commutative ( mcode_t mcode)
inline

◆ is_mcode_shift()

THREAD_SAFE bool is_mcode_shift ( mcode_t mcode)
inline

◆ is_mcode_divmod()

THREAD_SAFE bool is_mcode_divmod ( mcode_t op)
inline

◆ has_mcode_seloff()

THREAD_SAFE bool has_mcode_seloff ( mcode_t op)
inline

◆ set2jcnd()

THREAD_SAFE mcode_t set2jcnd ( mcode_t code)
inline

◆ jcnd2set()

THREAD_SAFE mcode_t jcnd2set ( mcode_t code)
inline

◆ negate_mcode_relation()

THREAD_SAFE mcode_t negate_mcode_relation ( mcode_t code)
inline

◆ swap_mcode_relation()

THREAD_SAFE mcode_t swap_mcode_relation ( mcode_t code)
inline

◆ get_signed_mcode()

THREAD_SAFE mcode_t get_signed_mcode ( mcode_t code)
inline

◆ get_unsigned_mcode()

THREAD_SAFE mcode_t get_unsigned_mcode ( mcode_t code)
inline

◆ is_signed_mcode()

THREAD_SAFE bool is_signed_mcode ( mcode_t code)
inline

◆ is_unsigned_mcode()

THREAD_SAFE bool is_unsigned_mcode ( mcode_t code)
inline

◆ mcode_modifies_d()

THREAD_SAFE bool mcode_modifies_d ( mcode_t mcode)
inline

◆ print_vdloc()

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

Print vdloc.

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

◆ arglocs_overlap()

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

Do two arglocs overlap?

◆ DECLARE_TYPE_AS_MOVABLE() [2/22]

DECLARE_TYPE_AS_MOVABLE ( lvar_t )

◆ DECLARE_TYPE_AS_MOVABLE() [3/22]

DECLARE_TYPE_AS_MOVABLE ( lvar_saved_info_t )

◆ restore_user_lvar_settings()

bool restore_user_lvar_settings ( lvar_uservec_t * lvinf,
ea_t func_ea )
inline

Restore user defined local variable settings in the database.

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

◆ save_user_lvar_settings()

void save_user_lvar_settings ( ea_t func_ea,
const lvar_uservec_t & lvinf )
inline

Save user defined local variable settings into the database.

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

◆ modify_user_lvars()

bool modify_user_lvars ( ea_t entry_ea,
user_lvar_modifier_t & mlv )
inline

Modify saved local variable settings.

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

◆ modify_user_lvar_info()

bool modify_user_lvar_info ( ea_t func_ea,
uint mli_flags,
const lvar_saved_info_t & info )
inline

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

◆ locate_lvar()

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

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.

◆ rename_lvar()

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

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.

◆ restore_user_defined_calls()

bool restore_user_defined_calls ( udcall_map_t * udcalls,
ea_t func_ea )
inline

Restore user defined function calls from the database.

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

◆ save_user_defined_calls()

void save_user_defined_calls ( ea_t func_ea,
const udcall_map_t & udcalls )
inline

Save user defined local function calls into the database.

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

◆ parse_user_call()

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

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

◆ convert_to_user_call()

merror_t convert_to_user_call ( const udcall_t & udc,
codegen_t & cdg )
inline

try to generate user-defined call for an instruction

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

◆ install_microcode_filter()

bool install_microcode_filter ( microcode_filter_t * filter,
bool install = true )
inline

register/unregister non-standard microcode generator

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

◆ DECLARE_TYPE_AS_MOVABLE() [4/22]

DECLARE_TYPE_AS_MOVABLE ( bitset_t )

◆ DECLARE_TYPE_AS_MOVABLE() [5/22]

DECLARE_TYPE_AS_MOVABLE ( node_bitset_t )

◆ DECLARE_TYPE_AS_MOVABLE() [6/22]

DECLARE_TYPE_AS_MOVABLE ( ivl_t )

◆ DECLARE_TYPE_AS_MOVABLE() [7/22]

DECLARE_TYPE_AS_MOVABLE ( ivlset_t )

◆ DECLARE_TYPE_AS_MOVABLE() [8/22]

DECLARE_TYPE_AS_MOVABLE ( rlist_t )

◆ DECLARE_TYPE_AS_MOVABLE() [9/22]

DECLARE_TYPE_AS_MOVABLE ( mlist_t )

◆ DECLARE_TYPE_AS_MOVABLE() [10/22]

DECLARE_TYPE_AS_MOVABLE ( mlistvec_t )

◆ get_temp_regs()

const mlist_t & get_temp_regs ( )
inline

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.

◆ is_kreg()

bool is_kreg ( mreg_t r)
inline

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

◆ reg2mreg()

mreg_t reg2mreg ( int reg)
inline

Map a processor register to a microregister.

Parameters
regprocessor register number
Returns
microregister register id or mr_none

◆ mreg2reg()

int mreg2reg ( mreg_t reg,
int width )
inline

Map a microregister to a processor register.

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

◆ get_mreg_name()

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

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.

◆ install_optinsn_handler()

void install_optinsn_handler ( optinsn_t * opt)
inline

Install an instruction level custom optimizer.

Parameters
optan instance of optinsn_t. cannot be destroyed before calling remove_optinsn_handler().

◆ remove_optinsn_handler()

bool remove_optinsn_handler ( optinsn_t * opt)
inline

Remove an instruction level custom optimizer.

◆ install_optblock_handler()

void install_optblock_handler ( optblock_t * opt)
inline

Install a block level custom optimizer.

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

◆ remove_optblock_handler()

bool remove_optblock_handler ( optblock_t * opt)
inline

Remove a block level custom optimizer.

◆ DECLARE_TYPE_AS_MOVABLE() [11/22]

DECLARE_TYPE_AS_MOVABLE ( mop_t )

◆ DECLARE_TYPE_AS_MOVABLE() [12/22]

DECLARE_TYPE_AS_MOVABLE ( mcallarg_t )

◆ getf_reginsn() [1/2]

const minsn_t * getf_reginsn ( const minsn_t * ins)
inline

Skip assertions forward.

◆ getb_reginsn() [1/2]

const minsn_t * getb_reginsn ( const minsn_t * ins)
inline

Skip assertions backward.

◆ getf_reginsn() [2/2]

minsn_t * getf_reginsn ( minsn_t * ins)
inline

◆ getb_reginsn() [2/2]

minsn_t * getb_reginsn ( minsn_t * ins)
inline

◆ DECLARE_TYPE_AS_MOVABLE() [13/22]

DECLARE_TYPE_AS_MOVABLE ( hexwarn_t )

◆ change_hexrays_config()

bool change_hexrays_config ( const char * directive)
inline

Parse DIRECTIVE and update the current configuration variables.

For the syntax see hexrays.cfg

◆ get_hexrays_version()

const char * get_hexrays_version ( )
inline

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"

◆ open_pseudocode()

vdui_t * open_pseudocode ( ea_t ea,
int flags )
inline

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

◆ close_pseudocode()

bool close_pseudocode ( TWidget * f)
inline

Close pseudocode window.

Parameters
fpointer to window
Returns
false if failed

◆ get_widget_vdui()

vdui_t * get_widget_vdui ( TWidget * f)
inline

Get the vdui_t instance associated to the TWidget.

Parameters
fpointer to window
Returns
a vdui_t *, or nullptr

◆ decompile_many()

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

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

◆ send_database()

void send_database ( const hexrays_failure_t & err,
bool silent )
inline

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.

◆ get_current_operand()

bool get_current_operand ( gco_info_t * out)
inline

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

◆ remitem()

void remitem ( const citem_t * e)
inline

◆ negated_relation()

ctype_t negated_relation ( ctype_t op)
inline

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

◆ swapped_relation()

ctype_t swapped_relation ( ctype_t op)
inline

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

◆ get_op_signness()

type_sign_t get_op_signness ( ctype_t op)
inline

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

◆ asgop()

ctype_t asgop ( ctype_t cop)
inline

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

◆ asgop_revert()

ctype_t asgop_revert ( ctype_t cop)
inline

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.

◆ op_uses_x()

bool op_uses_x ( ctype_t op)
inline

Does operator use the 'x' field of cexpr_t?

◆ op_uses_y()

bool op_uses_y ( ctype_t op)
inline

Does operator use the 'y' field of cexpr_t?

◆ op_uses_z()

bool op_uses_z ( ctype_t op)
inline

Does operator use the 'z' field of cexpr_t?

◆ is_binary()

bool is_binary ( ctype_t op)
inline

Is binary operator?

◆ is_unary()

bool is_unary ( ctype_t op)
inline

Is unary operator?

◆ is_relational()

bool is_relational ( ctype_t op)
inline

Is comparison operator?

◆ is_assignment()

bool is_assignment ( ctype_t op)
inline

Is assignment operator?

◆ accepts_udts()

bool accepts_udts ( ctype_t op)
inline

◆ is_prepost()

bool is_prepost ( ctype_t op)
inline

Is pre/post increment/decrement operator?

◆ is_commutative()

bool is_commutative ( ctype_t op)
inline

Is commutative operator?

◆ is_additive()

bool is_additive ( ctype_t op)
inline

Is additive operator?

◆ is_multiplicative()

bool is_multiplicative ( ctype_t op)
inline

Is multiplicative operator?

◆ is_bitop()

bool is_bitop ( ctype_t op)
inline

Is bit related operator?

◆ is_logical()

bool is_logical ( ctype_t op)
inline

Is logical operator?

◆ is_loop()

bool is_loop ( ctype_t op)
inline

Is loop statement code?

◆ is_break_consumer()

bool is_break_consumer ( ctype_t op)
inline

Does a break statement influence the specified statement code?

◆ is_lvalue()

bool is_lvalue ( ctype_t op)
inline

Is Lvalue operator?

◆ accepts_small_udts()

bool accepts_small_udts ( ctype_t op)
inline

Is the operator allowed on small structure or union?

◆ DECLARE_TYPE_AS_MOVABLE() [14/22]

DECLARE_TYPE_AS_MOVABLE ( citem_t )

◆ DECLARE_TYPE_AS_MOVABLE() [15/22]

DECLARE_TYPE_AS_MOVABLE ( cexpr_t )

◆ DECLARE_TYPE_AS_MOVABLE() [16/22]

DECLARE_TYPE_AS_MOVABLE ( ceinsn_t )

◆ DECLARE_TYPE_AS_MOVABLE() [17/22]

DECLARE_TYPE_AS_MOVABLE ( cinsn_t )

◆ DECLARE_TYPE_AS_MOVABLE() [18/22]

DECLARE_TYPE_AS_MOVABLE ( carg_t )

◆ DECLARE_TYPE_AS_MOVABLE() [19/22]

DECLARE_TYPE_AS_MOVABLE ( ccase_t )

◆ DECLARE_TYPE_AS_MOVABLE() [20/22]

DECLARE_TYPE_AS_MOVABLE ( catchexpr_t )

◆ DECLARE_TYPE_AS_MOVABLE() [21/22]

DECLARE_TYPE_AS_MOVABLE ( cblock_pos_t )

◆ lnot()

cexpr_t * lnot ( cexpr_t * e)
inline

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.

◆ new_block()

cinsn_t * new_block ( )
inline

Create a new block-statement.

◆ AS_PRINTF() [1/5]

AS_PRINTF ( 3 ,
0  )
inline

Create a helper object.

Display a dialog box and wait for the user to input a file name (ui_ask_file).

Display a dialog box and wait for the user to input a text string (ui_ask_str).

This function creates a helper object. The named function is not required to exist, the decompiler will only print its name in the output. Helper functions are usually used to represent arbitrary function or macro calls in the output.

Parameters
standalonefalse:helper must be called; true:helper can be used in any expression
typetype of the create function object
formatprintf-style format string that will be used to create the function name.
vaadditional arguments for printf
Returns
the created expression.

Use this function to ask one-line text. For multiline input, use ask_text(). This function will trim the trailing spaces.

Parameters
strqstring to fill. Can contain the default value. Cannot be nullptr.
histcategory of history lines. an arbitrary number.
this number determines lines accessible in the history
of the user input (when he presses down arrow)
One of Input line history constants should be used here
formatprintf() style format string with the question
vapointer to variadic arguments.
Returns
false if the user cancelled the dialog, otherwise returns true.

This function displays a window with file names present in the directory pointed to by 'defval'.

The 'format' parameter can contain a 'FILTER' description, of the form 'description1|{wildcard1}+|...|descriptionN|{wildcardsN}+', where each file type description has a corresponding set of one (or more) ';'-separated mask(s). E.g.,

Text files|*.txt|Executable files|*.exe;*.bin
Parameters
for_savingwill the filename be used to save a file?
defvaldefault value. will be displayed initially in the input line. may be nullptr may be or a wildcard file name.
formatprintf-style format string with the dialog title, possibly including a filter.
vapointer to variadic arguments.
Returns
nullptr the user cancelled the dialog. Otherwise the user entered a valid file name.

◆ AS_PRINTF() [2/5]

idaman AS_PRINTF ( 3 ,
4  )
inline

Create a helper object..

Add anterior/posterior comment line(s).

Parameters
ealinear address
isprevdo we add anterior lines? (0-no, posterior)
formatprintf() style format string. may contain \n to denote new lines. The resulting string should not contain comment characters (;), the kernel will add them automatically.
Returns
true if success

◆ va_start()

const tinfo_t const char va_start ( va ,
format  )

◆ va_end()

va_end ( va )

◆ AS_PRINTF() [3/5]

AS_PRINTF ( 3 ,
0  ) const &
inline

Create a helper call expression.

This function creates a new expression: a call of a helper function.

Parameters
rettypetype of the whole expression.
argshelper arguments. this object will be consumed by the function. if there are no args, this parameter may be specified as nullptr.
formatprintf-style format string that will be used to create the function name.
vaadditional arguments for printf
Returns
the created expression.

◆ AS_PRINTF() [4/5]

AS_PRINTF ( 3 ,
4  ) const &

Create a helper call.

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

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.

◆ make_ref()

cexpr_t * make_ref ( cexpr_t * e)
inline

Create a reference.

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

◆ dereference()

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

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

◆ save_user_labels()

void save_user_labels ( ea_t func_ea,
const user_labels_t * user_labels,
const cfunc_t * func = nullptr )
inline

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

◆ save_user_cmts()

void save_user_cmts ( ea_t func_ea,
const user_cmts_t * user_cmts )
inline

Save user defined comments into the database.

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

◆ save_user_numforms()

void save_user_numforms ( ea_t func_ea,
const user_numforms_t * numforms )
inline

Save user defined number formats into the database.

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

◆ save_user_iflags()

void save_user_iflags ( ea_t func_ea,
const user_iflags_t * iflags )
inline

Save user defined citem iflags into the database.

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

◆ save_user_unions()

void save_user_unions ( ea_t func_ea,
const user_unions_t * unions )
inline

Save user defined union field selections into the database.

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

◆ restore_user_labels()

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

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

◆ restore_user_cmts()

user_cmts_t * restore_user_cmts ( ea_t func_ea)
inline

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

◆ restore_user_numforms()

user_numforms_t * restore_user_numforms ( ea_t func_ea)
inline

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

◆ restore_user_iflags()

user_iflags_t * restore_user_iflags ( ea_t func_ea)
inline

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

◆ restore_user_unions()

user_unions_t * restore_user_unions ( ea_t func_ea)
inline

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

◆ close_hexrays_waitbox()

void close_hexrays_waitbox ( )
inline

Close the waitbox displayed by the decompiler.

Useful if DECOMP_NO_HIDE was used during decompilation.

◆ decompile()

cfuncptr_t decompile ( const mba_ranges_t & mbr,
hexrays_failure_t * hf = nullptr,
int decomp_flags = 0 )
inline

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.

◆ decompile_func()

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

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.

◆ decompile_snippet()

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

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.

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

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.

◆ create_empty_mba()

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

Create an empty microcode object.

◆ create_cfunc()

cfuncptr_t create_cfunc ( mba_t * mba)
inline

Create a new cfunc_t object.

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

◆ mark_cfunc_dirty()

bool mark_cfunc_dirty ( ea_t ea,
bool close_views = false )
inline

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.

◆ clear_cached_cfuncs()

void clear_cached_cfuncs ( )
inline

Flush all cached decompilation results.

◆ has_cached_cfunc()

bool has_cached_cfunc ( ea_t ea)
inline

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

◆ get_ctype_name()

const char * get_ctype_name ( ctype_t op)
inline

◆ create_field_name()

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

◆ 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 *)
mba(mba_t *)
reachable_blocks(bitset_t *)
decomp_flags(int)
Returns
Microcode error code

< SP change points have been calculated.

Parameters
mba(mba_t *)
stkpnts(stkpnts_t *)
Returns
Microcode error code This event is generated for each inlined range as well.

< Prolog analysis has been finished.

Parameters
mba(mba_t *)
fc(qflow_chart_t *)
reachable_blocks(const bitset_t *)
decomp_flags(int)
Returns
Microcode error code This event is generated for each inlined range as well.

< Microcode has been generated.

Parameters
mba(mba_t *)
Returns
Microcode error code

< Microcode has been preoptimized.

Parameters
mba(mba_t *)
Returns
Microcode error code

< Basic block level optimization has been finished.

Parameters
mba(mba_t *)
Returns
Microcode error 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 code

< 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 *)
Returns
Microcode error code

< Structure analysis is starting.

Parameters
ct(control_graph_t *) in/out: control graph
cfunc(cfunc_t *) in: the current function
g(const simple_graph_t *) in: control flow graph
Returns
Microcode error code; MERR_BLOCK means that the analysis has been performed by a plugin

< 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. However, it is too late to modify the ctree or microcode. 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.

< Starting to inline outlined functions.

Parameters
cdg(codegen_t *)
decomp_flags(int)
Returns
Microcode error code This is an opportunity to inline other ranges.

< A set of ranges is going to be inlined.

Parameters
cdg(codegen_t *)
blk(int) the block containing call/jump to inline
mbr(mba_ranges_t *) the range to inline

< A set of ranges got inlined.

Parameters
cdg(codegen_t *)
blk(int) the block containing call/jump to inline
mbr(mba_ranges_t *) the range to inline
i1(int) blknum of the first inlined block
i2(int) blknum of the last inlined block (excluded)

< Collect warning messages from plugins. These warnings will be displayed at the function header, after the user-defined comments.

Parameters
warnings(qstrvec_t *)
cfunc(cfunc_t *)

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

< Maturity level of an MBA was changed.

Parameters
mba(mba_t *)
reqmat(mba_maturity_t) requested maturity level
Returns
Microcode error code

◆ install_hexrays_callback()

bool install_hexrays_callback ( hexrays_cb_t * callback,
void * ud )
inline

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

◆ remove_hexrays_callback()

int remove_hexrays_callback ( hexrays_cb_t * callback,
void * ud )
inline

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.

◆ DECLARE_TYPE_AS_MOVABLE() [22/22]

DECLARE_TYPE_AS_MOVABLE ( ui_stroff_op_t )

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

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

◆ init_hexrays_plugin()

bool init_hexrays_plugin ( int flags = 0)
inline

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

◆ term_hexrays_plugin()

void term_hexrays_plugin ( )
inline

Stop working with hex-rays decompiler.

◆ user_numforms_first()

operand_locator_t const & user_numforms_first ( user_numforms_iterator_t p)
inline

Get reference to the current map key.

◆ user_numforms_second()

number_format_t & user_numforms_second ( user_numforms_iterator_t p)
inline

Get reference to the current map value.

◆ user_numforms_find()

user_numforms_iterator_t user_numforms_find ( const user_numforms_t * map,
const operand_locator_t & key )
inline

Find the specified key in user_numforms_t.

◆ user_numforms_insert()

user_numforms_iterator_t user_numforms_insert ( user_numforms_t * map,
const operand_locator_t & key,
const number_format_t & val )
inline

◆ user_numforms_begin()

user_numforms_iterator_t user_numforms_begin ( const user_numforms_t * map)
inline

Get iterator pointing to the beginning of user_numforms_t.

◆ user_numforms_end()

user_numforms_iterator_t user_numforms_end ( const user_numforms_t * map)
inline

Get iterator pointing to the end of user_numforms_t.

◆ user_numforms_next()

user_numforms_iterator_t user_numforms_next ( user_numforms_iterator_t p)
inline

Move to the next element.

◆ user_numforms_prev()

user_numforms_iterator_t user_numforms_prev ( user_numforms_iterator_t p)
inline

Move to the previous element.

◆ user_numforms_erase()

void user_numforms_erase ( user_numforms_t * map,
user_numforms_iterator_t p )
inline

Erase current element from user_numforms_t.

◆ user_numforms_clear()

void user_numforms_clear ( user_numforms_t * map)
inline

◆ user_numforms_size()

size_t user_numforms_size ( user_numforms_t * map)
inline

Get size of user_numforms_t.

◆ user_numforms_free()

void user_numforms_free ( user_numforms_t * map)
inline

Delete user_numforms_t instance.

◆ user_numforms_new()

user_numforms_t * user_numforms_new ( )
inline

Create a new user_numforms_t instance.

◆ lvar_mapping_first()

lvar_locator_t const & lvar_mapping_first ( lvar_mapping_iterator_t p)
inline

Get reference to the current map key.

◆ lvar_mapping_second()

lvar_locator_t & lvar_mapping_second ( lvar_mapping_iterator_t p)
inline

Get reference to the current map value.

◆ lvar_mapping_find()

lvar_mapping_iterator_t lvar_mapping_find ( const lvar_mapping_t * map,
const lvar_locator_t & key )
inline

Find the specified key in lvar_mapping_t.

◆ lvar_mapping_insert()

lvar_mapping_iterator_t lvar_mapping_insert ( lvar_mapping_t * map,
const lvar_locator_t & key,
const lvar_locator_t & val )
inline

Insert new (lvar_locator_t, lvar_locator_t) pair into lvar_mapping_t.

◆ lvar_mapping_begin()

lvar_mapping_iterator_t lvar_mapping_begin ( const lvar_mapping_t * map)
inline

Get iterator pointing to the beginning of lvar_mapping_t.

◆ lvar_mapping_end()

lvar_mapping_iterator_t lvar_mapping_end ( const lvar_mapping_t * map)
inline

Get iterator pointing to the end of lvar_mapping_t.

◆ lvar_mapping_next()

lvar_mapping_iterator_t lvar_mapping_next ( lvar_mapping_iterator_t p)
inline

Move to the next element.

◆ lvar_mapping_prev()

lvar_mapping_iterator_t lvar_mapping_prev ( lvar_mapping_iterator_t p)
inline

Move to the previous element.

◆ lvar_mapping_erase()

void lvar_mapping_erase ( lvar_mapping_t * map,
lvar_mapping_iterator_t p )
inline

Erase current element from lvar_mapping_t.

◆ lvar_mapping_clear()

void lvar_mapping_clear ( lvar_mapping_t * map)
inline

◆ lvar_mapping_size()

size_t lvar_mapping_size ( lvar_mapping_t * map)
inline

Get size of lvar_mapping_t.

◆ lvar_mapping_free()

void lvar_mapping_free ( lvar_mapping_t * map)
inline

Delete lvar_mapping_t instance.

◆ lvar_mapping_new()

lvar_mapping_t * lvar_mapping_new ( )
inline

Create a new lvar_mapping_t instance.

◆ udcall_map_first()

ea_t const & udcall_map_first ( udcall_map_iterator_t p)
inline

Get reference to the current map key.

◆ udcall_map_second()

udcall_t & udcall_map_second ( udcall_map_iterator_t p)
inline

Get reference to the current map value.

◆ udcall_map_find()

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

Find the specified key in udcall_map_t.

◆ udcall_map_insert()

udcall_map_iterator_t udcall_map_insert ( udcall_map_t * map,
const ea_t & key,
const udcall_t & val )
inline

Insert new (ea_t, udcall_t) pair into udcall_map_t.

◆ udcall_map_begin()

udcall_map_iterator_t udcall_map_begin ( const udcall_map_t * map)
inline

Get iterator pointing to the beginning of udcall_map_t.

◆ udcall_map_end()

udcall_map_iterator_t udcall_map_end ( const udcall_map_t * map)
inline

Get iterator pointing to the end of udcall_map_t.

◆ udcall_map_next()

udcall_map_iterator_t udcall_map_next ( udcall_map_iterator_t p)
inline

Move to the next element.

◆ udcall_map_prev()

udcall_map_iterator_t udcall_map_prev ( udcall_map_iterator_t p)
inline

Move to the previous element.

◆ udcall_map_erase()

void udcall_map_erase ( udcall_map_t * map,
udcall_map_iterator_t p )
inline

Erase current element from udcall_map_t.

◆ udcall_map_clear()

void udcall_map_clear ( udcall_map_t * map)
inline

Clear udcall_map_t.

◆ udcall_map_size()

size_t udcall_map_size ( udcall_map_t * map)
inline

Get size of udcall_map_t.

◆ udcall_map_free()

void udcall_map_free ( udcall_map_t * map)
inline

Delete udcall_map_t instance.

◆ udcall_map_new()

udcall_map_t * udcall_map_new ( )
inline

Create a new udcall_map_t instance.

◆ user_cmts_first()

treeloc_t const & user_cmts_first ( user_cmts_iterator_t p)
inline

Get reference to the current map key.

◆ user_cmts_second()

citem_cmt_t & user_cmts_second ( user_cmts_iterator_t p)
inline

Get reference to the current map value.

◆ user_cmts_find()

user_cmts_iterator_t user_cmts_find ( const user_cmts_t * map,
const treeloc_t & key )
inline

Find the specified key in user_cmts_t.

◆ user_cmts_insert()

user_cmts_iterator_t user_cmts_insert ( user_cmts_t * map,
const treeloc_t & key,
const citem_cmt_t & val )
inline

Insert new (treeloc_t, citem_cmt_t) pair into user_cmts_t.

◆ user_cmts_begin()

user_cmts_iterator_t user_cmts_begin ( const user_cmts_t * map)
inline

Get iterator pointing to the beginning of user_cmts_t.

◆ user_cmts_end()

user_cmts_iterator_t user_cmts_end ( const user_cmts_t * map)
inline

Get iterator pointing to the end of user_cmts_t.

◆ user_cmts_next()

user_cmts_iterator_t user_cmts_next ( user_cmts_iterator_t p)
inline

Move to the next element.

◆ user_cmts_prev()

user_cmts_iterator_t user_cmts_prev ( user_cmts_iterator_t p)
inline

Move to the previous element.

◆ user_cmts_erase()

void user_cmts_erase ( user_cmts_t * map,
user_cmts_iterator_t p )
inline

Erase current element from user_cmts_t.

◆ user_cmts_clear()

void user_cmts_clear ( user_cmts_t * map)
inline

Clear user_cmts_t.

◆ user_cmts_size()

size_t user_cmts_size ( user_cmts_t * map)
inline

Get size of user_cmts_t.

◆ user_cmts_free()

void user_cmts_free ( user_cmts_t * map)
inline

Delete user_cmts_t instance.

◆ user_cmts_new()

user_cmts_t * user_cmts_new ( )
inline

Create a new user_cmts_t instance.

◆ user_iflags_first()

citem_locator_t const & user_iflags_first ( user_iflags_iterator_t p)
inline

Get reference to the current map key.

◆ user_iflags_second()

int32 & user_iflags_second ( user_iflags_iterator_t p)
inline

Get reference to the current map value.

◆ user_iflags_find()

user_iflags_iterator_t user_iflags_find ( const user_iflags_t * map,
const citem_locator_t & key )
inline

Find the specified key in user_iflags_t.

◆ user_iflags_insert()

user_iflags_iterator_t user_iflags_insert ( user_iflags_t * map,
const citem_locator_t & key,
const int32 & val )
inline

Insert new (citem_locator_t, int32) pair into user_iflags_t.

◆ user_iflags_begin()

user_iflags_iterator_t user_iflags_begin ( const user_iflags_t * map)
inline

Get iterator pointing to the beginning of user_iflags_t.

◆ user_iflags_end()

user_iflags_iterator_t user_iflags_end ( const user_iflags_t * map)
inline

Get iterator pointing to the end of user_iflags_t.

◆ user_iflags_next()

user_iflags_iterator_t user_iflags_next ( user_iflags_iterator_t p)
inline

Move to the next element.

◆ user_iflags_prev()

user_iflags_iterator_t user_iflags_prev ( user_iflags_iterator_t p)
inline

Move to the previous element.

◆ user_iflags_erase()

void user_iflags_erase ( user_iflags_t * map,
user_iflags_iterator_t p )
inline

Erase current element from user_iflags_t.

◆ user_iflags_clear()

void user_iflags_clear ( user_iflags_t * map)
inline

Clear user_iflags_t.

◆ user_iflags_size()

size_t user_iflags_size ( user_iflags_t * map)
inline

Get size of user_iflags_t.

◆ user_iflags_free()

void user_iflags_free ( user_iflags_t * map)
inline

Delete user_iflags_t instance.

◆ user_iflags_new()

user_iflags_t * user_iflags_new ( )
inline

Create a new user_iflags_t instance.

◆ user_unions_first()

ea_t const & user_unions_first ( user_unions_iterator_t p)
inline

Get reference to the current map key.

◆ user_unions_second()

intvec_t & user_unions_second ( user_unions_iterator_t p)
inline

Get reference to the current map value.

◆ user_unions_find()

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

Find the specified key in user_unions_t.

◆ user_unions_insert()

user_unions_iterator_t user_unions_insert ( user_unions_t * map,
const ea_t & key,
const intvec_t & val )
inline

Insert new (ea_t, intvec_t) pair into user_unions_t.

◆ user_unions_begin()

user_unions_iterator_t user_unions_begin ( const user_unions_t * map)
inline

Get iterator pointing to the beginning of user_unions_t.

◆ user_unions_end()

user_unions_iterator_t user_unions_end ( const user_unions_t * map)
inline

Get iterator pointing to the end of user_unions_t.

◆ user_unions_next()

user_unions_iterator_t user_unions_next ( user_unions_iterator_t p)
inline

Move to the next element.

◆ user_unions_prev()

user_unions_iterator_t user_unions_prev ( user_unions_iterator_t p)
inline

Move to the previous element.

◆ user_unions_erase()

void user_unions_erase ( user_unions_t * map,
user_unions_iterator_t p )
inline

Erase current element from user_unions_t.

◆ user_unions_clear()

void user_unions_clear ( user_unions_t * map)
inline

Clear user_unions_t.

◆ user_unions_size()

size_t user_unions_size ( user_unions_t * map)
inline

Get size of user_unions_t.

◆ user_unions_free()

void user_unions_free ( user_unions_t * map)
inline

Delete user_unions_t instance.

◆ user_unions_new()

user_unions_t * user_unions_new ( )
inline

Create a new user_unions_t instance.

◆ user_labels_first()

int const & user_labels_first ( user_labels_iterator_t p)
inline

Get reference to the current map key.

◆ user_labels_second()

qstring & user_labels_second ( user_labels_iterator_t p)
inline

Get reference to the current map value.

◆ user_labels_find()

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

Find the specified key in user_labels_t.

◆ user_labels_insert()

user_labels_iterator_t user_labels_insert ( user_labels_t * map,
const int & key,
const qstring & val )
inline

Insert new (int, qstring) pair into user_labels_t.

◆ user_labels_begin()

user_labels_iterator_t user_labels_begin ( const user_labels_t * map)
inline

Get iterator pointing to the beginning of user_labels_t.

◆ user_labels_end()

user_labels_iterator_t user_labels_end ( const user_labels_t * map)
inline

Get iterator pointing to the end of user_labels_t.

◆ user_labels_next()

user_labels_iterator_t user_labels_next ( user_labels_iterator_t p)
inline

Move to the next element.

◆ user_labels_prev()

user_labels_iterator_t user_labels_prev ( user_labels_iterator_t p)
inline

Move to the previous element.

◆ user_labels_erase()

void user_labels_erase ( user_labels_t * map,
user_labels_iterator_t p )
inline

Erase current element from user_labels_t.

◆ user_labels_clear()

void user_labels_clear ( user_labels_t * map)
inline

Clear user_labels_t.

◆ user_labels_size()

size_t user_labels_size ( user_labels_t * map)
inline

Get size of user_labels_t.

◆ user_labels_free()

void user_labels_free ( user_labels_t * map)
inline

Delete user_labels_t instance.

◆ user_labels_new()

user_labels_t * user_labels_new ( )
inline

Create a new user_labels_t instance.

◆ eamap_first()

ea_t const & eamap_first ( eamap_iterator_t p)
inline

Get reference to the current map key.

◆ eamap_second()

cinsnptrvec_t & eamap_second ( eamap_iterator_t p)
inline

Get reference to the current map value.

◆ eamap_find()

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

Find the specified key in eamap_t.

◆ eamap_insert()

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

Insert new (ea_t, cinsnptrvec_t) pair into eamap_t.

◆ eamap_begin()

eamap_iterator_t eamap_begin ( const eamap_t * map)
inline

Get iterator pointing to the beginning of eamap_t.

◆ eamap_end()

eamap_iterator_t eamap_end ( const eamap_t * map)
inline

Get iterator pointing to the end of eamap_t.

◆ eamap_next()

eamap_iterator_t eamap_next ( eamap_iterator_t p)
inline

Move to the next element.

◆ eamap_prev()

eamap_iterator_t eamap_prev ( eamap_iterator_t p)
inline

Move to the previous element.

◆ eamap_erase()

void eamap_erase ( eamap_t * map,
eamap_iterator_t p )
inline

Erase current element from eamap_t.

◆ eamap_clear()

void eamap_clear ( eamap_t * map)
inline

Clear eamap_t.

◆ eamap_size()

size_t eamap_size ( eamap_t * map)
inline

Get size of eamap_t.

◆ eamap_free()

void eamap_free ( eamap_t * map)
inline

Delete eamap_t instance.

◆ eamap_new()

eamap_t * eamap_new ( )
inline

Create a new eamap_t instance.

◆ boundaries_first()

cinsn_t *const & boundaries_first ( boundaries_iterator_t p)
inline

Get reference to the current map key.

◆ boundaries_second()

rangeset_t & boundaries_second ( boundaries_iterator_t p)
inline

Get reference to the current map value.

◆ boundaries_find()

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

Find the specified key in boundaries_t.

◆ boundaries_insert()

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

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

◆ boundaries_begin()

boundaries_iterator_t boundaries_begin ( const boundaries_t * map)
inline

Get iterator pointing to the beginning of boundaries_t.

◆ boundaries_end()

boundaries_iterator_t boundaries_end ( const boundaries_t * map)
inline

Get iterator pointing to the end of boundaries_t.

◆ boundaries_next()

boundaries_iterator_t boundaries_next ( boundaries_iterator_t p)
inline

Move to the next element.

◆ boundaries_prev()

boundaries_iterator_t boundaries_prev ( boundaries_iterator_t p)
inline

Move to the previous element.

◆ boundaries_erase()

void boundaries_erase ( boundaries_t * map,
boundaries_iterator_t p )
inline

Erase current element from boundaries_t.

◆ boundaries_clear()

void boundaries_clear ( boundaries_t * map)
inline

Clear boundaries_t.

◆ boundaries_size()

size_t boundaries_size ( boundaries_t * map)
inline

Get size of boundaries_t.

◆ boundaries_free()

void boundaries_free ( boundaries_t * map)
inline

Delete boundaries_t instance.

◆ boundaries_new()

boundaries_t * boundaries_new ( )
inline

Create a new boundaries_t instance.

◆ block_chains_get()

chain_t & block_chains_get ( block_chains_iterator_t p)
inline

Get reference to the current set value.

◆ block_chains_find()

block_chains_iterator_t block_chains_find ( const block_chains_t * set,
const chain_t & val )
inline

Find the specified key in set block_chains_t.

◆ block_chains_insert()

block_chains_iterator_t block_chains_insert ( block_chains_t * set,
const chain_t & val )
inline

Insert new (chain_t) into set block_chains_t.

◆ block_chains_begin()

block_chains_iterator_t block_chains_begin ( const block_chains_t * set)
inline

Get iterator pointing to the beginning of block_chains_t.

◆ block_chains_end()

block_chains_iterator_t block_chains_end ( const block_chains_t * set)
inline

Get iterator pointing to the end of block_chains_t.

◆ block_chains_next()

block_chains_iterator_t block_chains_next ( block_chains_iterator_t p)
inline

Move to the next element.

◆ block_chains_prev()

block_chains_iterator_t block_chains_prev ( block_chains_iterator_t p)
inline

Move to the previous element.

◆ block_chains_erase()

void block_chains_erase ( block_chains_t * set,
block_chains_iterator_t p )
inline

Erase current element from block_chains_t.

◆ block_chains_clear()

void block_chains_clear ( block_chains_t * set)
inline

◆ block_chains_size()

size_t block_chains_size ( block_chains_t * set)
inline

Get size of block_chains_t.

◆ block_chains_free()

void block_chains_free ( block_chains_t * set)
inline

Delete block_chains_t instance.

◆ block_chains_new()

block_chains_t * block_chains_new ( )
inline

Create a new block_chains_t instance.

◆ AS_PRINTF() [5/5]

AS_PRINTF ( 2 ,
0  )
inline

Variable Documentation

◆ MAX_VLR_VALUE

const uvlr_t MAX_VLR_VALUE = uvlr_t(-1)

◆ MAX_VLR_SVALUE

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

◆ MIN_VLR_SVALUE

const svlr_t MIN_VLR_SVALUE = ~MAX_VLR_SVALUE

◆ MUST_ACCESS

const maymust_t MUST_ACCESS = 0x00

◆ MAY_ACCESS

const maymust_t MAY_ACCESS = 0x01

◆ MAYMUST_ACCESS_MASK

const maymust_t MAYMUST_ACCESS_MASK = 0x01

◆ ONE_ACCESS_TYPE

const maymust_t ONE_ACCESS_TYPE = 0x20

◆ INCLUDE_SPOILED_REGS

const maymust_t INCLUDE_SPOILED_REGS = 0x40

◆ EXCLUDE_PASS_REGS

const maymust_t EXCLUDE_PASS_REGS = 0x80

◆ FULL_XDSU

const maymust_t FULL_XDSU = 0x100

◆ WITH_ASSERTS

const maymust_t WITH_ASSERTS = 0x200

◆ EXCLUDE_VOLATILE

const maymust_t EXCLUDE_VOLATILE = 0x400

◆ INCLUDE_UNUSED_SRC

const maymust_t INCLUDE_UNUSED_SRC = 0x800

◆ INCLUDE_DEAD_RETREGS

const maymust_t INCLUDE_DEAD_RETREGS = 0x1000

◆ INCLUDE_RESTRICTED

const maymust_t INCLUDE_RESTRICTED = 0x2000

◆ CALL_SPOILS_ONLY_ARGS

const maymust_t CALL_SPOILS_ONLY_ARGS = 0x4000

◆ mr_none

const mreg_t mr_none = mreg_t(-1)

◆ mr_cf

const mreg_t mr_cf = mreg_t(0)

◆ mr_zf

const mreg_t mr_zf = mreg_t(1)

◆ mr_sf

const mreg_t mr_sf = mreg_t(2)

◆ mr_of

const mreg_t mr_of = mreg_t(3)

◆ mr_pf

const mreg_t mr_pf = mreg_t(4)

◆ cc_count

const int cc_count = mr_pf - mr_cf + 1

◆ mr_cc

const mreg_t mr_cc = mreg_t(5)

◆ mr_first

const mreg_t mr_first = mreg_t(8)

◆ bitset_width

const size_t bitset_width = sizeof(mbitmap_t) * CHAR_BIT

◆ bitset_align

const size_t bitset_align = bitset_width - 1

◆ bitset_shift

const size_t bitset_shift = 6

◆ mop_z

const mopt_t mop_z = 0

none

◆ mop_r

const mopt_t mop_r = 1

register (they exist until MMAT_LVARS)

◆ mop_n

const mopt_t mop_n = 2

immediate number constant

◆ mop_str

const mopt_t mop_str = 3

immediate string constant (user representation)

◆ mop_d

const mopt_t mop_d = 4

result of another instruction

◆ mop_S

const mopt_t mop_S = 5

local stack variable (they exist until MMAT_LVARS)

◆ mop_v

const mopt_t mop_v = 6

global variable

◆ mop_b

const mopt_t mop_b = 7

micro basic block (mblock_t)

◆ mop_f

const mopt_t mop_f = 8

list of arguments

◆ mop_l

const mopt_t mop_l = 9

local variable

◆ mop_a

const mopt_t mop_a = 10

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

◆ mop_h

const mopt_t mop_h = 11

helper function

◆ mop_c

const mopt_t mop_c = 12

mcases

◆ mop_fn

const mopt_t mop_fn = 13

floating point constant

◆ mop_p

const mopt_t mop_p = 14

operand pair

◆ mop_sc

const mopt_t mop_sc = 15

scattered

◆ NOSIZE

const int NOSIZE = -1

wrong or unexisting operand size

◆ type

const tinfo_t & type

◆ format

carglist_t const char* format

◆ va

carglist_t const char va_list va
Initial value:
{
return (cexpr_t *)HEXDSP(hx_vcreate_helper, standalone, &type, format, va)
idaman THREAD_SAFE va_list va
See qsscanf()
Definition err.h:21
idaman THREAD_SAFE const char * format
Definition fpro.h:78
const tinfo_t & type
Definition hexrays.hpp:7301
@ hx_vcreate_helper
Definition hexrays.hpp:9035
Ctree item: expression.
Definition hexrays.hpp:6381

◆ e

return e = vcreate_helper(standalone, type, format, va)

◆ args

carglist_t * args

◆ HEXRAYS_API_MAGIC

const int64 HEXRAYS_API_MAGIC = 0x00DEC0DE00000004LL

◆ CMT_NONE

const cmt_type_t CMT_NONE = 0x0000

No comment is possible.

◆ CMT_TAIL

const cmt_type_t CMT_TAIL = 0x0001

Indented comment.

◆ CMT_BLOCK1

const cmt_type_t CMT_BLOCK1 = 0x0002

Anterioir block comment.

◆ CMT_BLOCK2

const cmt_type_t CMT_BLOCK2 = 0x0004

Posterior block comment.

◆ CMT_LVAR

const cmt_type_t CMT_LVAR = 0x0008

Local variable comment.

◆ CMT_FUNC

const cmt_type_t CMT_FUNC = 0x0010

Function comment.

◆ CMT_ALL

const cmt_type_t CMT_ALL = 0x001F

All comments.