hexrays.hpp File Reference

HexRays SDK header file. More...

Go to the source code of this file.

Classes

struct  operand_locator_t
 Operand locator. More...
struct  number_format_t
 Number represenation. 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...
struct  typestring
 Type string. More...
struct  meminfo_t
struct  strtype_info_t
struct  lvar_locator_t
 Local variable locator. Local variables are located using: definition ea, location. More...
class  lvar_t
 Definition of a local variable (register or stack). More...
struct  lvars_t
 Set of local variables. More...
struct  lvar_saved_info_t
 Saved user settings for local variables. More...
struct  user_lvar_visitor_t
 Saved user settings iterator for local variables. More...
struct  fnumber_t
 Floating point constant. More...
struct  hexwarn_t
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  operator_info_t
 Information about C operator. More...
struct  cnumber_t
 An immediate number. More...
struct  var_ref_t
 Reference to a local variable. More...
struct  ctree_visitor_t
 A generic helper class that is used for ctree traversal. More...
struct  ctree_parentee_t
 A helper ctree traversal class that maintains parent information. More...
struct  cfunc_parentee_t
 Class to traverse the whole function. More...
struct  treeloc_t
 Ctree location. Used to denote comment locations. More...
struct  citem_cmt_t
 Ctree item comment. More...
struct  citem_locator_t
 Generic ctree element locator. More...
struct  citem_t
 Basic ctree element. More...
struct  cexpr_t
 Ctree element: 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 element: statement. More...
struct  cblock_t
 Compound statement (curly braces). More...
struct  carg_t
 Function argument. More...
struct  carglist_t
 Function argument list. More...
struct  ccase_t
 Switch case. Usually cinsn_t is a block. More...
struct  ccases_t
 Vector of switch cases. More...
struct  cswitch_t
 Switch statement. More...
struct  ctree_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 pseudocode window. More...
struct  user_numforms_iterator_t
 Iterator class for user_numforms_t. More...
struct  lvar_mapping_iterator_t
struct  user_cmts_iterator_t
 Iterator class for user_cmts_t. More...
struct  user_iflags_iterator_t
struct  user_unions_iterator_t
struct  user_labels_iterator_t
 Iterator class for user_labels_t. More...

Defines

#define CHECKED_BUILD
#define hexapi
 Public functions are marked with this keyword.
#define DECLARE_COMPARISON_OPERATORS(type)
 Macro to declare standard inline comparison operators.
#define DECLARE_COMPARISONS(type)
 Macro to declare comparisons for our classes All comparison operators call the compare() function which returns -1/0/1.
#define NF_FIXED   0x01
 number format has been defined by the user
#define NF_NEGDONE   0x02
 temporary internal bit: negation has been performed
#define NF_NEGATE   0x08
 The user asked to negate the constant.
#define CVAR_USED   0x0001
 is used in the code?
#define CVAR_TYPE   0x0002
 the type is defined?
#define CVAR_NAME   0x0004
 has nice name?
#define CVAR_MREG   0x0008
 corresponding mregs were replaced?
#define CVAR_NOWD   0x0010
 width is unknown
#define CVAR_UNAME   0x0020
 user-defined name
#define CVAR_UTYPE   0x0040
 user-defined type
#define CVAR_RESULT   0x0080
 function result variable
#define CVAR_ARG   0x0100
 function argument
#define CVAR_FAKE   0x0200
 fake return variable
#define CVAR_OVER   0x0400
 overlapping variable
#define CVAR_FLOAT   0x0800
 used in a fpu insn
#define CVAR_SPOILED   0x1000
 internal flag, do not use: spoiled var
#define CVAR_MAPDST   0x2000
 other variables are mapped to this var
#define ULV_PRECISE_DEFEA   0x0001
 Use precise defea's for lvar locations.
#define VDRUN_NEWFILE   0x0000
 Create a new file or overwrite existing file.
#define VDRUN_APPEND   0x0001
 Create a new file or append to existing file.
#define VDRUN_ONLYNEW   0x0002
 Fail if output file already exists.
#define VDRUN_SILENT   0x0004
 Silent decompilation.
#define VDRUN_SENDIDB   0x0008
 Send problematic databases to hex-rays.com.
#define VDRUN_MAYSTOP   0x0010
 the user can cancel decompilation
#define VDRUN_CMDLINE   0x0020
 called from ida's command line
#define VDRUN_STATS   0x0040
 print statistics into vd_stats.txt
#define MERR_OK   0
 ok
#define MERR_BLOCK   1
 no error, switch to new block
#define MERR_INTERR   (-1)
 internal error
#define MERR_INSN   (-2)
 can not convert to microcode
#define MERR_MEM   (-3)
 not enough memory
#define MERR_BADBLK   (-4)
 bad block found
#define MERR_BADSP   (-5)
 positive sp value has been found
#define MERR_PROLOG   (-6)
 prolog analysis failed
#define MERR_SWITCH   (-7)
 wrong switch idiom
#define MERR_EXCEPTION   (-8)
 exception analysis failed
#define MERR_HUGESTACK   (-9)
 stack frame is too big
#define MERR_LVARS   (-10)
 local variable allocation failed
#define MERR_BITNESS   (-11)
 16bit programs are not supported (yet)
#define MERR_BADCALL   (-12)
 could not determine call arguments
#define MERR_BADFRAME   (-13)
 function frame is wrong
#define MERR_UNKTYPE   (-14)
 undefined type s
#define MERR_BADIDB   (-15)
 inconsistent database information
#define MERR_SIZEOF   (-16)
 wrong basic type sizes in compiler settings
#define MERR_REDO   (-17)
 redecompilation has been requested
#define MERR_CANCELED   (-18)
 decompilation has been cancelled
#define MERR_RECDEPTH   (-19)
 max recursion depth reached during lvar allocation
#define MERR_OVERLAP   (-20)
 variables would overlap: s
#define MERR_PARTINIT   (-21)
 partially initialized variable s
#define MERR_COMPLEX   (-22)
 too complex function
#define MERR_LICENSE   (-23)
 no license available
#define MERR_MAX_ERR   23
#define MERR_LOOP   (-24)
 internal code: redo last loop (never reported)
#define CV_FAST   0x0000
 do not maintain parent information
#define CV_PRUNE   0x0001
 this bit is set by visit...() to prune the walk
#define CV_PARENTS   0x0002
 maintain parent information
#define CV_POST   0x0004
 call the leave...() functions
#define CV_RESTART   0x0008
 restart enumeration at the top expr (apply_to_exprs)
#define CV_INSNS   0x0010
 visit only statements, prune all expressions
#define EXFL_CPADONE   0x0001
 pointer arithmetic correction done
#define EXFL_LVALUE   0x0002
 expression is lvalue even if it doesn't look like it
#define EXFL_FPOP   0x0004
 floating point operation
#define EXFL_ALONE   0x0008
 standalone helper
#define EXFL_ALL   0x000F
 all currently defined bits
#define CIT_COLLAPSED   0x0001
 display element in collapsed form
#define VDUI_VISIBLE   0x0001
 is visible?
#define VDUI_VALID   0x0002
 is valid?
#define VDUI_LOCKED   0x0004
 is locked?
#define number_locator_t   operand_locator_t

Typedefs

typedef int mreg_t
 Micro register.
typedef qvector< uchar > byteseq_t
 Byte sequence.
typedef qvector< qstring > qstrvec_t
 Vector of strings.
typedef std::map
< operand_locator_t,
number_format_t
user_numforms_t
typedef std::map
< lvar_locator_t,
lvar_locator_t
lvar_mapping_t
 Local variable mapping (is used to merge variables).
typedef qvector< hexwarn_thexwarns_t
typedef qvector< citem_t * > parents_t
 Vector of parents.
typedef std::map< treeloc_t,
citem_cmt_t
user_cmts_t
typedef std::map
< citem_locator_t, int32 > 
user_iflags_t
typedef std::map< ea_t, intvec_t > user_unions_t
typedef qvector< cinsn_t * > cinsnptrvec_t
 Vector of pointers to statements.
typedef std::map< int, qstring > user_labels_t
typedef void * hexdsp_t (int code,...)
 Hex-Rays decompiler dispatcher.
typedef int 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 int32 iterator_word

Enumerations

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_MAX
}
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_last = cot_helper, cit_empty = 69, cit_block = 70,
  cit_expr = 71, cit_if = 72, cit_for = 73, cit_while = 74,
  cit_do = 75, cit_switch = 76, cit_break = 77, cit_continue = 78,
  cit_return = 79, cit_goto = 80, cit_asm = 81, cit_end
}
 

Ctree element type.

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_SIGN = 0x40000000,
  ITP_CASE = 0x80000000
}
 

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  hexrays_event_t {
  hxe_flowchart, hxe_prolog, hxe_preoptimized, hxe_locopt,
  hxe_prealloc, hxe_glbopt, hxe_structural, hxe_maturity,
  hxe_interr, hxe_combine, hxe_print_func, hxe_open_pseudocode = 100,
  hxe_switch_pseudocode, hxe_refresh_pseudocode, hxe_close_pseudocode, hxe_keyboard,
  hxe_right_click, hxe_double_click, hxe_curpos, hxe_create_hint,
  hxe_text_ready
}
 

Decompiler events.

More...
enum  input_device_t { USE_KEYBOARD = 0, USE_MOUSE = 1 }
 

Type of the input device.

More...
enum  hexcall_t {
  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_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_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_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_operand_locator_t_compare, hx_vd_printer_t_print, hx_qstring_printer_t_print, hx_remove_typedef,
  hx_is_type_correct, hx_is_type_integral, hx_is_type_small_struni, hx_partial_type_num,
  hx_get_float_bit, hx_typestring_print, hx_typestring_change_sign, hx_typestring_get_cc,
  hx_typestring_get_nth_arg, hx_get_int_type_by_width_and_sign, hx_get_unk_type, hx_get_member_type,
  hx_make_array, hx_make_pointer, hx_create_typedef, hx_remove_pointer,
  hx_cnv_array_to_ptr, hx_strtype_info_t_build_base_type, hx_strtype_info_t_build_udt_type, hx_arglocs_overlap,
  hx_lvar_locator_t_get_regnum, hx_lvar_locator_t_compare, hx_lvar_t_accepts_type, hx_lvar_t_set_lvar_type,
  hx_lvar_t_set_width, 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_fnumber_t_print, hx_get_hexrays_version,
  hx_open_pseudocode, hx_close_pseudocode, hx_decompile, hx_decompile_many,
  hx_micro_err_format, hx_hexrays_failure_t_desc, hx_send_database, hx_negated_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_label, hx_citem_t_find_parent_of, 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_nbits, hx_cexpr_t_requires_lvalue, hx_cexpr_t_has_side_effects,
  hx_cif_t_assign, hx_cif_t_compare, hx_cloop_t_assign, hx_cfor_t_compare,
  hx_cwhile_t_compare, hx_cdo_t_compare, hx_creturn_t_compare, hx_cgoto_t_compare,
  hx_casm_t_compare, hx_cinsn_t_assign, hx_cinsn_t_compare, hx_cinsn_t_replace_by,
  hx_cinsn_t_cleanup, hx_cinsn_t_new_insn, hx_cinsn_t_create_if, hx_cinsn_t_print,
  hx_cinsn_t_print1, hx_cinsn_t_is_ordinary_flow, hx_cinsn_t_contains_insn, hx_cinsn_t_collect_free_breaks,
  hx_cinsn_t_collect_free_continues, hx_cblock_t_compare, hx_carglist_t_compare, hx_ccase_t_compare,
  hx_ccases_t_compare, hx_cswitch_t_compare, hx_ctree_item_t_get_memptr, hx_ctree_item_t_get_lvar,
  hx_ctree_item_t_get_ea, hx_ctree_item_t_get_label_num, hx_lnot, hx_new_block,
  hx_vcreate_helper, hx_vcall_helper, hx_make_num, hx_make_ref,
  hx_dereference, hx_save_user_labels, hx_save_user_cmts, hx_save_user_numforms,
  hx_save_user_iflags, hx_restore_user_labels, hx_restore_user_cmts, hx_restore_user_numforms,
  hx_restore_user_iflags, 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_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_line_item,
  hx_cfunc_t_get_warnings, hx_cfunc_t_gather_derefs, hx_cfunc_t_cleanup, hx_get_ctype_name,
  hx_install_hexrays_callback, hx_remove_hexrays_callback, hx_vdui_t_refresh_view, hx_vdui_t_refresh_ctext,
  hx_vdui_t_switch_to, hx_vdui_t_get_number, 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_lvar_type,
  hx_vdui_t_set_lvar_type, hx_vdui_t_edit_lvar_cmt, hx_vdui_t_set_lvar_cmt, hx_vdui_t_set_strmem_type,
  hx_vdui_t_rename_strmem, hx_vdui_t_set_global_type, hx_vdui_t_rename_global, hx_vdui_t_rename_label,
  hx_vdui_t_jump_enter, hx_vdui_t_ctree_to_disasm, hx_vdui_t_push_current_location, hx_vdui_t_pop_current_location,
  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_collapse_item, hx_vdui_t_split_item, hx_vdui_t_set_vargloc_end, 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_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_strtype_info_t_create_from,
  hx_save_user_unions, hx_restore_user_unions, hx_cfunc_t_get_user_union_selection, hx_cfunc_t_set_user_union_selection,
  hx_vdui_t_ui_edit_lvar_cmt, hx_vdui_t_ui_map_lvar, hx_vdui_t_ui_unmap_lvar, hx_vdui_t_map_lvar,
  hx_dummy_ptrtype, hx_create_field_name, hx_dummy_plist_for, hx_make_dt
}
 

API call numbers.


Functions

const type_t * remove_typedef (const type_t *type, const p_list **fields=NULL)
 Resolve a typedef.
bool is_type_correct (const type_t *ptr)
 Verify a type string.
bool is_type_integral (const type_t *type)
 Is integral type?
bool is_type_small_struni (const type_t *ptr)
 Is a small structure or union?
bool is_ptr_or_array (type_t t)
 Is a pointer or array type?
bool is_paf (type_t t)
 Is a pointer, array, or function type?
const type_t * skip_ptr_or_array_header (const type_t *t)
 Skip pointer or array type header.
int partial_type_num (const type_t *type)
 Calculate number of partial subtypes.
type_t get_float_bit (int width)
 Get a type byte for a floating point value.
typestring get_int_type_by_width_and_sign (int srcwidth, type_sign_t sign)
 Create a type string by width and sign.
typestring get_unk_type (int size)
 Create a partial type string by width.
typestring dummy_ptrtype (int ptrsize, bool isfp)
 Generate a dummy pointer type.
bool get_member_type (const member_t *mptr, typestring *type, qtype *fields=NULL)
 Get type of a structure field.
typestring make_array (const type_t *type, int nelems)
 Create an array type.
typestring make_pointer (const typestring &type)
 Create a pointer type.
typestring create_typedef (const char *name)
 Create a reference to a named type.
typestring remove_pointer (const typestring &type)
 Get pointed object type.
bool cnv_array_to_ptr (typestring &type)
 Convert array type into pointer type.
mreg_t get_lvarloc_reg1 (argloc_t location)
 If there is only one register, use all argloc bits.
mreg_t get_lvarloc_reg2 (argloc_t location)
bool arglocs_overlap (argloc_t loc1, size_t w1, argloc_t loc2, size_t w2)
 Do two arglocs overlap?
int restore_user_lvar_settings (ea_t func_ea, user_lvar_visitor_t &ulv)
 Restore user defined local variable settings in the database.
void save_user_lvar_settings (ea_t func_ea, user_lvar_visitor_t &ulv)
 Save user defined local variable settings into the database.
const char * get_hexrays_version (void)
 Get decompiler version.
vdui_topen_pseudocode (ea_t ea, int new_window)
 Open pseudocode window.
bool close_pseudocode (TForm *f)
 Close pseudocode window.
cfunc_tdecompile (func_t *pfn, hexrays_failure_t *hf)
 Decompile a function.
bool decompile_many (const char *outfile, eavec_t *funcaddrs, int vdrun_flags)
 Batch decompilation.
const char * micro_err_format (int code)
 Get textual description of an error code.
void send_database (const hexrays_failure_t &err, bool silent)
 Send the database to Hex-Rays.
template<class T >
int compare (const T &a, const T &b)
 Template to compare any 2 values of the same type. Returns -1/0/1.
template<class T >
int compare (const qvector< T > &a, const qvector< T > &b)
template<class T >
int compare (const qlist< T > &a, const qlist< T > &b)
template<class T , class U >
int compare (const std::pair< T, U > &a, const std::pair< T, U > &b)
template<class T >
int compare_containers (const T &l, const T &r)
 Template to compare any 2 containers of the same type. Returns -1/0/1.
ctype_t negated_relation (ctype_t op)
 Negate a comparison operator. For example, cot_sge becomes cot_slt.
type_sign_t get_op_signness (ctype_t op)
 Get operator sign. Meaningful for sign-dependent operators, like cot_sdiv.
ctype_t asgop (ctype_t cop)
 Convert plain operator into assignment operator. For example, cot_add returns cot_asgadd.
ctype_t 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 relatede 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 is_allowed_on_small_struni (ctype_t op)
 Is the operator allowed on small struni (structure/union)?
cexpr_tlnot (cexpr_t *e)
 Logically negate the specified expression.
cinsn_tnew_block (void)
 Create a new block-statement.
cexpr_tvcreate_helper (bool standalone, const typestring &type, const char *format, va_list va)
cexpr_tcreate_helper (bool standalone, const typestring &type, const char *format,...)
cexpr_tvcall_helper (const typestring &rettype, carglist_t *args, const char *format, va_list va)
cexpr_tcall_helper (const typestring &rettype, carglist_t *args, const char *format,...)
cexpr_tmake_num (uint64 n, int opnum=0, type_sign_t sign=no_sign)
 Create a number expression.
cexpr_tmake_ref (cexpr_t *e)
 Create a reference.
cexpr_tdereference (cexpr_t *e, int ptrsize, bool is_float=false)
 Dereference a pointer.
void save_user_labels (ea_t func_ea, const user_labels_t *user_labels)
 Save user defined labels into the database.
void save_user_cmts (ea_t func_ea, const user_cmts_t *user_cmts)
 Save user defined comments into the database.
void save_user_numforms (ea_t func_ea, const user_numforms_t *numforms)
 Save user defined number formats into the database.
void save_user_iflags (ea_t func_ea, const user_iflags_t *iflags)
 Save user defined citem iflags into the database.
void save_user_unions (ea_t func_ea, const user_unions_t *unions)
 Save user defined union field selections into the database.
user_labels_trestore_user_labels (ea_t func_ea)
 Restore user defined labels from the database.
user_cmts_trestore_user_cmts (ea_t func_ea)
 Restore user defined comments from the database.
user_numforms_trestore_user_numforms (ea_t func_ea)
 Restore user defined number formats from the database.
user_iflags_t * restore_user_iflags (ea_t func_ea)
 Restore user defined citem iflags from the database.
user_unions_t * restore_user_unions (ea_t func_ea)
 Restore user defined union field selections from the database.
const char * get_ctype_name (ctype_t op)
qstring create_field_name (const typestring &type, uval_t offset=BADADDR)
typestring dummy_plist_for (const type_t *ptr)
typestring make_dt (int n)
bool install_hexrays_callback (hexrays_cb_t *callback, void *ud)
 Install handler for decompiler events.
int remove_hexrays_callback (hexrays_cb_t *callback, void *ud)
 Uninstall handler for decompiler events.
bool init_hexrays_plugin (int flags=0)
 Initialize your plugin for hex-rays decompiler.
void term_hexrays_plugin (void)
 Terminate your plugin for hex-rays decompiler.
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.
const operand_locator_tuser_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.
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.
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.
const lvar_locator_tlvar_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.
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.
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.
const treeloc_tuser_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.
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_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.
const citem_locator_tuser_iflags_first (user_iflags_iterator_t p)
 Get reference to the current map key.
int32 & user_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.
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_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.
const ea_t & user_unions_first (user_unions_iterator_t p)
 Get reference to the current map key.
intvec_t & user_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.
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_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.
const int & user_labels_first (user_labels_iterator_t p)
 Get reference to the current map key.
qstring & user_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.
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.

Variables

const uchar FX_NONE = 0
 not applicable
const uchar FX_INFIX = 1
 infix: a + b
const uchar FX_PREFIX = 2
 prefix: *a
const uchar FX_POSTFIX = 3
 postfix: a++
const uchar FX_TERNARY = 4
 ternary: a ? b : c
const uchar COI_RL = 0x00
 right to left
const uchar COI_LR = 0x01
 left to right
const uchar COI_INT = 0x02
 requires integer operands
const uchar COI_FP = 0x04
 requires floating point operands
const uchar COI_SH = 0x08
 is shift operation?
const uchar COI_SGN = 0x10
 sign sensitive?
const uchar COI_SBN = 0x20
 is simple binary?
const int HEXRAYS_API_MAGIC1 = 0xC001C0DE
const int HEXRAYS_API_MAGIC2 = 0xBE37BABE
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.
hexdsp_thexdsp
 Pointer to Hex-Rays decompiler dispatcher.

Detailed Description

HexRays SDK header file.

The decompiler SDK consists of a single header file.

The header file defines data structures and inline functions. All interaction with the decompiler is made through a single function pointer: hexdsp. This pointer is initialized at the beginning and is used to call the decompiler for all actions.

Currently the SDK is not settled down and we can not guarantee compatibility with the older versions. Hopefully this problem will be solved in the near future.

Definition in file hexrays.hpp.


Define Documentation

#define DECLARE_COMPARISON_OPERATORS ( type   ) 
Value:
bool operator==(const type &r) const { return compare(r) == 0; }      \
  bool operator!=(const type &r) const { return compare(r) != 0; }      \
  bool operator< (const type &r) const { return compare(r) <  0; }      \
  bool operator> (const type &r) const { return compare(r) >  0; }      \
  bool operator<=(const type &r) const { return compare(r) <= 0; }      \
  bool operator>=(const type &r) const { return compare(r) >= 0; }

Macro to declare standard inline comparison operators.

Definition at line 55 of file hexrays.hpp.

#define DECLARE_COMPARISONS ( type   ) 
Value:
DECLARE_COMPARISON_OPERATORS(type) \
  friend int compare(const type &a, const type &b) { return a.compare(b); } \
  int compare(const type &r) const

Macro to declare comparisons for our classes All comparison operators call the compare() function which returns -1/0/1.

Definition at line 65 of file hexrays.hpp.


Typedef Documentation

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

Hex-Rays decompiler dispatcher.

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

Examples:
hexrays_sample1.cpp, hexrays_sample2.cpp, hexrays_sample3.cpp, hexrays_sample4.cpp, hexrays_sample5.cpp, hexrays_sample6.cpp, and hexrays_sample7.cpp.

Definition at line 2534 of file hexrays.hpp.

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

Handler of decompiler events.

Parameters:
ud user data. the value specified at the handler installation time is passed here.
event decompiler event code
va additional arguments
Returns:
as a rule the callback must return 0 unless specified otherise in the event description.

Definition at line 2652 of file hexrays.hpp.


Enumeration Type Documentation

Unused label disposition.

Enumerator:
FORBID_UNUSED_LABELS 

Unused labels cause interr.

ALLOW_UNUSED_LABELS 

Unused labels are permitted.

Definition at line 2161 of file hexrays.hpp.

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 can not be told apart. To avoid comment duplication, we remember if a comment has already been used or not.

Enumerator:
RETRIEVE_ONCE 

Retrieve comment if it has not been used yet.

RETRIEVE_ALWAYS 

Retrieve comment even if it has been used.

Definition at line 1537 of file hexrays.hpp.

Ctree maturity level.

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

Enumerator:
CMAT_ZERO 

does not exist

CMAT_BUILT 

just generated

CMAT_TRANS1 

applied first wave of transformations

CMAT_NICE 

nicefied expressions

CMAT_TRANS2 

applied second wave of transformations

CMAT_CPA 

corrected pointer arithmetic

CMAT_TRANS3 

applied third wave of transformations

CMAT_CASTED 

added necessary casts

CMAT_FINAL 

ready-to-use

Definition at line 1464 of file hexrays.hpp.

enum ctype_t

Ctree element type.

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

Enumerator:
cot_comma 

x, y

cot_asg 

x = y

cot_asgbor 

x |= y

cot_asgxor 

x ^= y

cot_asgband 

x &= y

cot_asgadd 

x += y

cot_asgsub 

x -= y

cot_asgmul 

x *= y

cot_asgsshr 

x >>= y signed

cot_asgushr 

x >>= y unsigned

cot_asgshl 

x <<= y

cot_asgsdiv 

x /= y signed

cot_asgudiv 

x /= y unsigned

cot_asgsmod 

x = y signed

cot_asgumod 

x = y unsigned

cot_tern 

x ? y : z

cot_lor 

x || y

cot_land 

x && y

cot_bor 

x | y

cot_xor 

x ^ y

cot_band 

x & y

cot_eq 

x == y int or fpu (see EXFL_FPOP)

cot_ne 

x != y int or fpu (see EXFL_FPOP)

cot_sge 

x >= y signed or fpu (see EXFL_FPOP)

cot_uge 

x >= y unsigned

cot_sle 

x <= y signed or fpu (see EXFL_FPOP)

cot_ule 

x <= y unsigned

cot_sgt 

x > y signed or fpu (see EXFL_FPOP)

cot_ugt 

x > y unsigned

cot_slt 

x < y signed or fpu (see EXFL_FPOP)

cot_ult 

x < y unsigned

cot_sshr 

x >> y signed

cot_ushr 

x >> y unsigned

cot_shl 

x << y

cot_add 

x + y

cot_sub 

x - y

cot_mul 

x * y

cot_sdiv 

x / y signed

cot_udiv 

x / y unsigned

cot_smod 

x % y signed

cot_umod 

x % y unsigned

cot_fadd 

x + y fp

cot_fsub 

x - y fp

cot_fmul 

x * y fp

cot_fdiv 

x / y fp

cot_fneg 

-x fp

cot_neg 

-x

cot_cast 

(type)x

cot_lnot 

!x

cot_bnot 

~x

cot_ptr 

*x, access size in 'ptrsize'

cot_ref 

&x

cot_postinc 

x++

cot_postdec 

x--

cot_preinc 

++x

cot_predec 

--x

cot_call 

x(...)

cot_idx 

x[y]

cot_memref 

x.m

cot_memptr 

x->m, access size in 'ptrsize'

cot_num 

n

cot_fnum 

fpc

cot_str 

string constant

cot_obj 

obj_ea

cot_var 

v

cot_insn 

instruction in expression, internal representation only

cot_sizeof 

sizeof(x)

cot_helper 

arbitrary name

cit_empty 

instruction types start here

cit_block 

block-statement: { ... }

cit_expr 

expression-statement: expr;

cit_if 

if-statement

cit_for 

for-statement

cit_while 

while-statement

cit_do 

do-statement

cit_switch 

switch-statement

cit_break 

break-statement

cit_continue 

continue-statement

cit_return 

return-statement

cit_goto 

goto-statement

cit_asm 

asm-statement

Definition at line 1049 of file hexrays.hpp.

Type of the cursor item.

Enumerator:
VDI_NONE 

undefined

VDI_EXPR 

c-tree item

VDI_LVAR 

declaration of local variable

VDI_FUNC 

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

VDI_TAIL 

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

Definition at line 2098 of file hexrays.hpp.

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.

Enumerator:
hxe_flowchart 

Flowchart has been generated.

qflow_chart_t *fc

hxe_prolog 

Prolog analysis has been finished.

mbl_array_t *mba
qflow_chart_t *fc
bitset_t *reachable_blocks

hxe_preoptimized 

Microcode has been preoptimized.

mbl_array_t *mba

hxe_locopt 

Basic block level optimization has been finished.

mbl_array_t *mba

hxe_prealloc 

Local variables: preallocation step begins.


mbl_array_t *mba
This event may occur several times
Should return: 1 if modified microcode
Negative values are Microcode error codes error codes

hxe_glbopt 

Global optimization has been finished.

mbl_array_t *mba

hxe_structural 

Structural analysis has been finished.

control_graph_t *ct

hxe_maturity 

Ctree maturity level is being changed.

cfunc_t *cfunc
ctree_maturity_t new_maturity

hxe_interr 

Internal error has occurred.

int errcode

hxe_combine 

Trying to combine instructions of basic block.

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

hxe_print_func 

Printing ctree and generating text.

cfunc_t *cfunc
vc_printer_t *vp
Returns: 1 if text has been generated by the plugin

hxe_open_pseudocode 

New pseudocode view has been opened.

vdui_t *vu

hxe_switch_pseudocode 

Existing pseudocode view has been reloaded with a new function.

Its text has not been refreshed yet, only cfunc and mba pointers are ready.
vdui_t *vu

hxe_refresh_pseudocode 

Existing pseudocode text has been refreshed.

vdui_t *vu
See also hxe_text_ready, which happens earlier

hxe_close_pseudocode 

Pseudocode view is being closed.

vdui_t *vu

hxe_keyboard 

Keyboard has been hit.

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

hxe_right_click 

Mouse right click.

We can add menu items now. vdui_t *vu

hxe_double_click 

Mouse double click.

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

hxe_curpos 

Current cursor position has been changed.

(for example, by left-clicking or using keyboard)
vdui_t *vu

hxe_create_hint 

Create a hint for the current item.

vdui_t *vu
qstring *result_hint
int *implines
Possible return values:
0: the event has not been handled
1: hint has been created (should set *implines to nonzero as well)
2: hint has been created but the standard hints must be appended by the decompiler

hxe_text_ready 

Decompiled text is ready.

vdui_t *vu
This event can be used to modify the output text (sv). The text uses regular color codes (see lines.hpp) COLOR_ADDR is used to store pointers to ctree elements

Definition at line 2542 of file hexrays.hpp.

Comment item preciser.

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

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

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

Enumerator:
ITP_EMPTY 

nothing

ITP_ARG1 

, (64 entries are reserved for 64 call arguments)

ITP_ASM 

__asm-line

ITP_ELSE 

else-line

ITP_DO 

do-line

ITP_SEMI 

semicolon

ITP_CURLY1 

{

ITP_CURLY2 

}

ITP_BRACE2 

)

ITP_COLON 

: (label)

ITP_BLOCK1 

opening block comment.

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

ITP_BLOCK2 

closing block comment.

Definition at line 1490 of file hexrays.hpp.

Should curly braces be printed?

Enumerator:
CALC_CURLY_BRACES 

print curly braces if necessary

NO_CURLY_BRACES 

don't print curly braces

USE_CURLY_BRACES 

print curly braces without any checks

Definition at line 1851 of file hexrays.hpp.


Function Documentation

ctype_t asgop_revert ( ctype_t  cop  ) 

Convert assignment operator into plain operator.

For example, cot_asgadd returns cot_add

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

Definition at line 4250 of file hexrays.hpp.

References hexdsp.

bool close_pseudocode ( TForm f  ) 

Close pseudocode window.

Parameters:
f pointer to window
Returns:
false if failed

Definition at line 4194 of file hexrays.hpp.

References hexdsp.

cfunc_t * decompile ( func_t *  pfn,
hexrays_failure_t hf 
)

Decompile a function.

Parameters:
pfn pointer to function to decompile
hf extended error information (if failed)
Returns:
pointer to the decompilation result. It is the caller's responsability to delete it. NULL if failed.
Examples:
hexrays_sample1.cpp.

Definition at line 4200 of file hexrays.hpp.

References hexdsp.

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

Batch decompilation.

Decompile all or the specified functions

Returns:
true if no internal error occured and the user has not cancelled decompilation
Parameters:
outfile name of the output file
funcaddrs list of functions to decompile. If NULL or empty, then decompile all nonlib functions
vdrun_flags Batch decompilation bits

Definition at line 4206 of file hexrays.hpp.

References hexdsp.

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

Dereference a pointer.

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

Parameters:
e expression to deference
ptrsize access size
Returns:
dereferenced expression

Definition at line 4624 of file hexrays.hpp.

References hexdsp.

const char * get_hexrays_version ( void   ) 

Get decompiler version.

Returns:
pointer to version string. For example: "1.0.071025"
Examples:
hexrays_sample1.cpp, hexrays_sample2.cpp, hexrays_sample3.cpp, hexrays_sample4.cpp, hexrays_sample5.cpp, hexrays_sample6.cpp, and hexrays_sample7.cpp.

Definition at line 4182 of file hexrays.hpp.

References hexdsp.

bool init_hexrays_plugin ( int  flags = 0  ) 

Initialize your plugin for hex-rays decompiler.

This function must be called before calling any other decompiler function. It initializes the pointer to the dispatcher.

Parameters:
flags reserved, must be 0
Returns:
true if the decompiler exists and the dispatcher pointer is ready to use.
Examples:
hexrays_sample1.cpp, hexrays_sample2.cpp, hexrays_sample3.cpp, hexrays_sample4.cpp, hexrays_sample5.cpp, hexrays_sample6.cpp, and hexrays_sample7.cpp.

Definition at line 3311 of file hexrays.hpp.

References hexdsp.

bool install_hexrays_callback ( hexrays_cb_t callback,
void *  ud 
)

Install handler for decompiler events.

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

Definition at line 4840 of file hexrays.hpp.

References hexdsp.

cexpr_t * lnot ( cexpr_t e  ) 

Logically negate the specified expression.

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

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

Definition at line 4588 of file hexrays.hpp.

References hexdsp.

cexpr_t * make_num ( uint64  n,
int  opnum = 0,
type_sign_t  sign = no_sign 
)

Create a number expression.

Parameters:
n value
sign number sign

Definition at line 4612 of file hexrays.hpp.

References hexdsp.

cexpr_t * make_ref ( cexpr_t e  ) 

Create a reference.

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

Definition at line 4618 of file hexrays.hpp.

References hexdsp.

const char * micro_err_format ( int  code  ) 

Get textual description of an error code.

Returns:
pointer to static error description string
Parameters:
code Microcode error codes

Definition at line 4212 of file hexrays.hpp.

References hexdsp.

vdui_t * open_pseudocode ( ea_t  ea,
int  new_window 
)

Open pseudocode window.

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

Parameters:
ea function to decompile
new_window 0:reuse existing window; 1:open new window; -1: reuse existing window if the current view is pseudocode
Returns:
false if failed

Definition at line 4188 of file hexrays.hpp.

References hexdsp.

int remove_hexrays_callback ( hexrays_cb_t callback,
void *  ud 
)

Uninstall handler for decompiler events.

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

Definition at line 4846 of file hexrays.hpp.

References hexdsp.

user_cmts_t * restore_user_cmts ( ea_t  func_ea  ) 

Restore user defined comments from the database.

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

Definition at line 4666 of file hexrays.hpp.

References hexdsp.

user_iflags_t * restore_user_iflags ( ea_t  func_ea  ) 

Restore user defined citem iflags from the database.

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

Definition at line 4678 of file hexrays.hpp.

References hexdsp.

user_labels_t * restore_user_labels ( ea_t  func_ea  ) 

Restore user defined labels from the database.

Parameters:
func_ea the entry address of the function
Returns:
collection of user defined labels. The returned object must be deleted by the caller using delete_user_labels()
Examples:
hexrays_sample4.cpp.

Definition at line 4660 of file hexrays.hpp.

References hexdsp.

int restore_user_lvar_settings ( ea_t  func_ea,
user_lvar_visitor_t ulv 
)

Restore user defined local variable settings in the database.

Parameters:
func_ea entry address of the function
ulv helper visitor class for lvar settings
Returns:
0 if all lvar settings have been enumerated. Otherwise returns the code returned by the visitor class.
Examples:
hexrays_sample4.cpp.

Definition at line 4164 of file hexrays.hpp.

References hexdsp.

user_numforms_t * restore_user_numforms ( ea_t  func_ea  ) 

Restore user defined number formats from the database.

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

Definition at line 4672 of file hexrays.hpp.

References hexdsp.

user_unions_t * restore_user_unions ( ea_t  func_ea  ) 

Restore user defined union field selections from the database.

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

Definition at line 4684 of file hexrays.hpp.

References hexdsp.

void save_user_cmts ( ea_t  func_ea,
const user_cmts_t user_cmts 
)

Save user defined comments into the database.

Parameters:
func_ea the entry address of the function
user_cmts collection of user defined comments

Definition at line 4636 of file hexrays.hpp.

References hexdsp.

Referenced by cfunc_t::save_user_cmts().

void save_user_iflags ( ea_t  func_ea,
const user_iflags_t *  iflags 
)

Save user defined citem iflags into the database.

Parameters:
func_ea the entry address of the function
iflags collection of user defined citem iflags

Definition at line 4648 of file hexrays.hpp.

References hexdsp.

Referenced by cfunc_t::save_user_iflags().

void save_user_labels ( ea_t  func_ea,
const user_labels_t user_labels 
)

Save user defined labels into the database.

Parameters:
func_ea the entry address of the function
user_labels collection of user defined labels

Definition at line 4630 of file hexrays.hpp.

References hexdsp.

Referenced by cfunc_t::save_user_labels().

void save_user_lvar_settings ( ea_t  func_ea,
user_lvar_visitor_t ulv 
)

Save user defined local variable settings into the database.

Parameters:
func_ea entry address of the function
uvl user lvar setting enumerator. get_user_lvar_qty() and get_next_user_lvar() will be used to enumerate user settings.

Definition at line 4170 of file hexrays.hpp.

References hexdsp.

void save_user_numforms ( ea_t  func_ea,
const user_numforms_t numforms 
)

Save user defined number formats into the database.

Parameters:
func_ea the entry address of the function
numforms collection of user defined comments

Definition at line 4642 of file hexrays.hpp.

References hexdsp.

Referenced by cfunc_t::save_user_numforms().

void save_user_unions ( ea_t  func_ea,
const user_unions_t *  unions 
)

Save user defined union field selections into the database.

Parameters:
func_ea the entry address of the function
unions collection of union field selections

Definition at line 4654 of file hexrays.hpp.

References hexdsp.

Referenced by cfunc_t::save_user_unions().

void send_database ( const hexrays_failure_t err,
bool  silent 
)

Send the database to Hex-Rays.

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

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

Definition at line 4226 of file hexrays.hpp.

References hexdsp.

void term_hexrays_plugin ( void   ) 

Terminate your plugin for hex-rays decompiler.

Currently this function is empty but please do include it in your plugins.

Examples:
hexrays_sample1.cpp, hexrays_sample2.cpp, hexrays_sample3.cpp, hexrays_sample4.cpp, hexrays_sample5.cpp, hexrays_sample6.cpp, and hexrays_sample7.cpp.

Definition at line 3319 of file hexrays.hpp.


Variable Documentation

Pointer to Hex-Rays decompiler dispatcher.

This variable must be instantiated by the plugin. It is initialized by init_hexrays_plugin().

Examples:
hexrays_sample1.cpp, hexrays_sample2.cpp, hexrays_sample3.cpp, hexrays_sample4.cpp, hexrays_sample5.cpp, hexrays_sample6.cpp, and hexrays_sample7.cpp.

Referenced by lvar_t::accepts_type(), ctree_visitor_t::apply_to(), ctree_visitor_t::apply_to_exprs(), arglocs_overlap(), asgop(), asgop_revert(), cnumber_t::assign(), cfunc_t::build_c_tree(), vdui_t::calc_cmt_type(), cfunc_parentee_t::calc_rvalue_type(), cexpr_t::calc_type(), cinsn_t::cleanup(), cexpr_t::cleanup(), vdui_t::clear(), close_pseudocode(), cnv_array_to_ptr(), vdui_t::collapse_item(), cinsn_t::collect_free_breaks(), cinsn_t::collect_free_continues(), cinsn_t::contains_insn(), citem_t::contains_label(), cexpr_t::contains_operator(), cinsn_t::create_if(), create_typedef(), vdui_t::ctree_to_disasm(), decompile(), decompile_many(), vdui_t::del_orphan_cmts(), cfunc_t::del_orphan_cmts(), dereference(), dummy_ptrtype(), vdui_t::edit_cmt(), vdui_t::edit_func_cmt(), cexpr_t::equal_effect(), lvars_t::find(), cfunc_t::find_label(), lvars_t::find_lvar(), citem_t::find_parent_of(), lvars_t::find_stkvar(), vdui_t::get_current_item(), ctree_item_t::get_ea(), get_float_bit(), cfunc_t::get_func_type(), get_hexrays_version(), get_int_type_by_width_and_sign(), ctree_item_t::get_label_num(), cfunc_t::get_line_item(), ctree_item_t::get_lvar(), cfunc_t::get_lvars(), get_member_type(), ctree_item_t::get_memptr(), cexpr_t::get_nbits(), vdui_t::get_number(), get_op_signness(), lvar_locator_t::get_regnum(), get_unk_type(), cfunc_t::get_user_cmt(), cfunc_t::get_user_iflags(), cfunc_t::get_user_union_selection(), cfunc_t::get_warnings(), cfunc_t::has_orphan_cmts(), cexpr_t::has_side_effects(), init_hexrays_plugin(), install_hexrays_callback(), vdui_t::invert_sign(), cexpr_t::is_child_of(), cinsn_t::is_ordinary_flow(), is_type_correct(), is_type_integral(), is_type_small_struni(), vdui_t::jump_enter(), lnot(), lvar_mapping_begin(), lvar_mapping_clear(), lvar_mapping_end(), lvar_mapping_erase(), lvar_mapping_find(), lvar_mapping_first(), lvar_mapping_free(), lvar_mapping_insert(), lvar_mapping_next(), lvar_mapping_prev(), lvar_mapping_second(), lvar_mapping_size(), make_array(), make_num(), make_pointer(), make_ref(), vdui_t::map_lvar(), micro_err_format(), negated_relation(), new_block(), cinsn_t::new_insn(), open_pseudocode(), partial_type_num(), vdui_t::pop_current_location(), cinsn_t::print(), cnumber_t::print(), cinsn_t::print1(), cexpr_t::print1(), cfunc_t::print_dcl(), cfunc_t::print_func(), vdui_t::push_current_location(), cexpr_t::put_number(), ctree_parentee_t::recalc_parent_types(), vdui_t::refresh_cpos(), vdui_t::refresh_ctext(), vdui_t::refresh_view(), remove_hexrays_callback(), remove_pointer(), remove_typedef(), cfunc_t::remove_unused_labels(), vdui_t::rename_global(), vdui_t::rename_label(), vdui_t::rename_lvar(), vdui_t::rename_strmem(), cinsn_t::replace_by(), cexpr_t::replace_by(), cexpr_t::requires_lvalue(), restore_user_cmts(), restore_user_iflags(), restore_user_labels(), restore_user_lvar_settings(), restore_user_numforms(), restore_user_unions(), save_user_cmts(), save_user_iflags(), save_user_labels(), save_user_lvar_settings(), save_user_numforms(), save_user_unions(), send_database(), vdui_t::set_global_type(), vdui_t::set_lvar_cmt(), vdui_t::set_lvar_type(), lvar_t::set_lvar_type(), vdui_t::set_num_enum(), vdui_t::set_num_radix(), vdui_t::set_num_stroff(), vdui_t::set_strmem_type(), cfunc_t::set_user_cmt(), cfunc_t::set_user_iflags(), cfunc_t::set_user_union_selection(), vdui_t::set_vargloc_end(), lvar_t::set_width(), vdui_t::split_item(), vdui_t::switch_to(), vdui_t::ui_edit_lvar_cmt(), vdui_t::ui_map_lvar(), vdui_t::ui_rename_lvar(), vdui_t::ui_set_lvar_type(), vdui_t::ui_unmap_lvar(), user_cmts_begin(), user_cmts_clear(), user_cmts_end(), user_cmts_erase(), user_cmts_find(), user_cmts_first(), user_cmts_free(), user_cmts_insert(), user_cmts_next(), user_cmts_prev(), user_cmts_second(), user_cmts_size(), user_iflags_begin(), user_iflags_clear(), user_iflags_end(), user_iflags_erase(), user_iflags_find(), user_iflags_first(), user_iflags_free(), user_iflags_insert(), user_iflags_next(), user_iflags_prev(), user_iflags_second(), user_iflags_size(), user_labels_begin(), user_labels_clear(), user_labels_end(), user_labels_erase(), user_labels_find(), user_labels_first(), user_labels_free(), user_labels_insert(), user_labels_next(), user_labels_prev(), user_labels_second(), user_labels_size(), user_numforms_begin(), user_numforms_clear(), user_numforms_end(), user_numforms_erase(), user_numforms_find(), user_numforms_first(), user_numforms_free(), user_numforms_insert(), user_numforms_next(), user_numforms_prev(), user_numforms_second(), user_numforms_size(), user_unions_begin(), user_unions_clear(), user_unions_end(), user_unions_erase(), user_unions_find(), user_unions_first(), user_unions_free(), user_unions_insert(), user_unions_next(), user_unions_prev(), user_unions_second(), user_unions_size(), cnumber_t::value(), and cfunc_t::verify().