Latest available version: IDA and decompilers v8.4.240215 see all releases
Hex-Rays logo State-of-the-art binary code analysis tools
email icon

Introduction

The SDK now only supports the new 7.0 API in x64 mode. The old SDK 6.95 can be used to develop plugins for IDA 7.0-x86 (which is ABI-compatible with IDA 6.95).

While the API has been revamped somewhat, most basic concepts still hold.

There are still two variants of IDA: one supporting 32-bit (ea_t is 32-bit) and the other 64-bit address space (ea_t is 64-bit). IDA database extensions remain correspondingly '.idb' and '.i64'.

Naming of IDA binaries has been unified across all OS variants:

  • The IDA GUI binary has been renamed from 'idaq[.exe]' to just 'ida[.exe]'.
  • The IDA text-mode UI has been renamed from 'idaw.exe' (on Windows) and 'idal' (on Linux/Mac OS X) to 'idat[.exe]' on all platforms.
  • Plugins, loaders, processor modules, and the kernel now use standard OS-specific suffixes ('.dll', '.so', or '.dylib') instead of custom extensions.

General approaches that were taken when cleaning up the APIs:

  • Try to use descriptive names and drop old, cryptic abbreviations.
  • Rename functions using camelCase to snake_case (e.g. 'isFlow' -> 'is_flow').
  • Move output parameters to the front of the argument list.
  • Change input parameters to const references whenever possible.
  • Remove obsolete and deprecated functions.
  • Rename functioname2/3 to just functioname (e.g. 'validate_name3' -> 'validate_name').
  • Rename functions with 64 suffix to the main name (e.g. 'qfseek64' -> 'qfseek').
  • File offsets are 64-bit in all functions working with files.
  • Get rid of global variables (not complete, but we made good progress).
  • Most functions accepting a buffer and size (or limited to MAXSTR) now use 'qstring' or 'bytevec_t' instead (depending on the nature of the data).
  • Assume UTF-8 in most functions dealing with text.
  • Try to get rid of forced struct packing and rearrange fields to avoid unnecessary gaps as needed.

Porting

Common porting steps for plugins/loaders/modules:

  • Add __X64__ to the list of preprocessor defines. You still need to compile with or without __EA64__ defined to select between 32- and 64-bit address space.
  • If using custom build system, change output extension to OS-specific suffixes ('.dll', '.so', or '.dylib').
  • IDA library link path should start with x64 instead of x86.

Renamed/removed header files

Some headers have been renamed and/or removed:

original name new name
ints.hpp <removed>
sistack.h <removed>
area.hpp range.hpp
queue.hpp problems.hpp
srarea.hpp segregs.hpp

Commonly used renamed structs and fields

original name new name
area_t range_t
areavec_t rangevec_t
endEA end_ea
startEA start_ea

area-related methods have been renamed too (e.g. 'prev_area' -> 'prev_range').

Porting plugins.

The plugin entry prototype has been changed from:

  • void idaapi run(int);

to:

  • bool idaapi run(size_t);

The input parameter is now of type 'size_t', which allows passing a pointer as the argument of run() for extra possibilities.

The rest of the plugin interface is unchanged.

Porting loaders

The prototype for 'accept_file()' has been changed from:

  • int idaapi accept_file(linput_t *li, char fileformatname[MAX_FILE_FORMAT_NAME], int n);

to:

  • int idaapi accept_file(qstring *fileformatname, qstring *processor, linput_t *li, const char *filename);

The desired processor may be returned in the 'processor' output parameter.

The return value has been extended with flags 'ACCEPT_ARCHIVE' and 'ACCEPT_CONTINUE'.

Loaders can also process and extract archives now. If you detect an archive, the return value for 'accept_file' should be ORed with the 'ACCEPT_ARCHIVE' flag. After extraction, all loaders are queried again, which means IDA can now handle multiply nested archives.

Non-archive loaders should extend the return value with the 'ACCEPT_CONTINUE' flag.

Porting processor modules

WARNING: The global variables 'cmd' and 'uFlag' are gone.

Most APIs return or accept an 'insn_t' structure with instruction details.

The 'processor_t' structure has had many unused and obsolete fields removed, such as 'flag2', 'rFiles', 'rFnames', 'rFdescs', and 'CPUregs'.

Most callbacks are now handled centrally via the 'notify()' function:

original name new name
header ev_out_header
footer ev_out_footer
segstart ev_out_segstart
segend ev_out_segend
assumes ev_out_assumes
u_ana ev_ana_insn
u_emu ev_emu_insn
u_out ev_out_insn
u_outop ev_out_operand
d_out ev_out_data
cmp_opnd ev_cmp_opnd
can_have_type ev_can_have_type
is_far_jump ev_is_far_jump
getreg ev_getreg

ana.cpp

Change the prototype of 'ana' from:

  • int idaapi ana(void);

to:

  • int idaapi ana(insn_t *_insn);

You may then declare an 'insn_t' reference variable to simplify your code:

  • insn_t &insn = *_insn;

Then replace all uses of 'cmd' by 'insn'. You will likely need to pass 'insn' to other helper functions that used 'cmd'.

emu.cpp

Change the prototype of 'emu' from:

  • int idaapi emu(void);

to:

  • int idaapi emu(const insn_t &insn);

Then replace all uses of 'cmd' by 'insn'. You may need to adjust some code if it was relying on cmd being writeable.

out.cpp

The output functions now use a context structure ('outctx_t') instead of operating on a global buffer.

You must declare a class inheriting from 'outctx_t' and override its methods or add new ones for non-standard functions. For example:

class out_myproc_t : public outctx_t
{
  void outreg(int r) { out_register(ph.reg_names[r]); }
  void outmem(const op_t &x, ea_t ea);
  bool outbit(ea_t ea, int bit);

  bool out_operand(const op_t &x);
  void out_insn(void);
  void out_mnem(void);
}

Then use one of the two macros from idaidp.hpp:

  • DECLARE_OUT_FUNCS_WITHOUT_OUTMNEM(out_myproc_t)

or, if you implement 'out_mnem':

  • DECLARE_OUT_FUNCS(out_myproc_t)

Then prefix old function names with your class and rename them to match methods. For example, from:

  void idaapi out(void);
  void out_myproc_t::out(void);

to:

  bool idaapi outop(op_t &x);
  bool out_myproc_t::out_operand(const op_t &x);

Then remove calls to 'init_output_buffer()' and uses of the buffer variable.

Other changes that must be made are:

  • Replacing references to 'cmd' with 'insn';
  • Replacing term_output_buffer()/MakeLine() sequence with flush_outbuf().

Most of the other code can remain intact or can be replaced by the new helper functions.

For other output-related callbacks, convert them to take an 'outctx_t &ctx' parameter and use its methods. For example, from:

  • void idaapi header(void);

to:

  • void idaapi myproc_header(outctx_t &ctx)

See the changes to 'ua.hpp' below for more information on converting the functions.

Also, see the SDK samples for more ideas.

reg.cpp

Remove the old callbacks from the 'processor_t' structure and call them from the 'notify()' function instead. For example:

    case processor_t::ev_ana_insn:
      {
        insn_t *out = va_arg(va, insn_t *);
        return myproc_ana(out);
      }

For 'ev_out_insn', call 'out_insn()' generated by the macro in out.cpp:

    case processor_t::ev_out_insn:
      {
        outctx_t *ctx = va_arg(va, outctx_t *);
        out_insn(*ctx);
        return 1;
      }

Porting notifications

  • When hooking notifications, return 0 for "not handled" instead of 1 as before.
  • Many notifications had their arguments types and/or order changed. Double-check your handlers against the new headers.
  • Instead of calling ph.notify() or similar, prefer helper inline functions for additional type safety. For example, use 'ph.get_operand_string()' instead of 'ph.notify(processor_t::get_operand_string, ...)'.
  • Some IDP events have been moved to the IDB event group (see the table class="table table-sm" below), so they should be handled on the HT_IDB level. You will need to move the corresponding code from the IDP notification hooks to the IDB hooks.
original IDP event new IDB notification
closebase closebase
savebase savebase
auto_empty auto_empty
auto_empty_finally auto_empty_finally
determined_main determined_main
load_idasgn idasgn_loaded
kernel_config_loaded kernel_config_loaded
loader_finished loader_finished
preprocess_chart flow_chart_created
setsgr sgr_changed
set_compiler compiler_changed
move_segm segm_moved
extlang_changed extlang_changed
make_code make_code
make_data make_data
renamed renamed
add_func func_added
del_func deleting_func
set_func_start set_func_start
set_func_end set_func_end

UI: Porting choosers

  • Make a new class derived from 'chooser_t' or 'chooser_multi_t'. Its fields are similar to arguments of 'choose2()' from IDA 6.95.
  • You should implement at least 2 methods:

  • 'get_count()', and

  • 'get_row()'.

The 'get_row()' method combines 3 methods of 6.95's old 'chooser_info_t':

  • 'get_row()'
  • 'get_icon()', and
  • 'get_attrs()'

  • If you want to show actions Ins/Delete/Edit/Refresh in a popup-menu you should set new bits 'CH_CAN_...' in the 'flags' member.

  • The header line is stored in a new 'header' member.
  • All indexes are now 0-based. You can use new constant 'NO_SELECTION' for non-existing rows.
  • The default value is not stored in the 'chooser_t' structure now and it is passed directly to the 'choose()' function.
  • You can prepare a specialized version of the 'choose()' method that takes a special default value (e.g. an effective address). For this you should implement a new 'get_item_index()' method.
  • The 'update()' callback has been renamed to 'refresh()' and it returns the cursor position after refresh. If the data has not changed this callback should return a 'NOTHING_CHANGED' hint.
  • The returned value of the 'ins()', 'del()', 'edit()' and 'exit()' callbacks are the same as for 'refresh()' callback. E.g. the 'ins()' callback may return the cursor position of the newly inserted item. Or the 'del()' callback may return 'NOTHING_CHANGED' if it asked the user about the removal and he refused.
  • The 'initializer()' callback has been renamed to 'init()'. Its use allows you to prepare data when it is really needed (i.e., "lazy" populating).
  • The 'destroyer()' callback has been renamed to 'closed()' and it is called when the chooser window is about to close. To clean up the chooser data you should use the destructor.
  • The 'CH_MULTI' flag has been removed altogether. If you want to create a chooser with multiple selection, you should derive your class from 'chooser_multi_t'.
  • While callbacks for the 'chooser_t' class would receive and return a single value specifying the currently-selected row, callbacks of the 'chooser_multi_t' class will receive a vector of such values instead.
  • In a similar fashion, instead of using the 'NO_SELECTION' constant, 'chooser_multi_t' will use an empty vector.
  • In contrast to IDA 6.95, the selected items are now all processed at once, in one call to the 'ins()', 'del()', 'edit()' and 'exit()' callbacks (this greatly simplified implementing them.)

Changes per file in the SDK

This section describes in detail the changes to the APIs for each file in the SDK.

auto.hpp

NOTE: global variables 'auto_state', 'auto_display', and 'autoEnabled' have been removed.

  • [1] output argument moved to beginning of argument list
original name new name [1] Notes
autoGetName <removed>
autoStep <removed>
<added> auto_apply_tail
<added> auto_recreate_insn
<added> enable_auto to be used instead of 'autoEnabled'
<added> get_auto_display to be used instead of 'auto_display'
<added> get_auto_state to be used instead of 'auto_state'
<added> is_auto_enabled to be used instead of 'autoEnabled'
<added> set_auto_state to be used instead of 'auto_state'
analyze_area plan_and_wait added 'final_pass' argument (true for analyze_area behaviour)
autoCancel auto_cancel
autoIsOk auto_is_ok
autoMark auto_mark
autoUnmark auto_unmark
autoWait auto_wait
auto_get *
noUsed plan_ea (ea_t ea) variant
noUsed plan_range (ea_t sEA, ea_t eEA) variant
setStat set_ida_state
showAddr show_addr
showAuto show_auto

bitrange.hpp

original name Notes
bitrange_t::extract argument type: 'int' changed to 'size_t'
bitrange_t::inject argument type: 'int' changed to 'size_t'

bytes.hpp

NOTE: The misleading term "ASCII string" has been replaced by "string literal" (strlit).

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2] Notes
clrFlbits <removed>
do3byte <removed>
doASCI <removed>
doVar <removed>
do_unknown <removed> use 'del_items' instead
do_unknown_range <removed> use 'del_items' instead
f_is3byte <removed>
getRadixEA <removed>
get_3byte <removed>
get_many_bytes <removed> use 'get_bytes' instead
get_many_bytes_ex <removed> use 'get_bytes' instead
is3byte <removed>
isVar <removed>
noImmd <removed>
setFlags <removed>
setFlbits <removed>
tribyteflag <removed>
<added> add_mapping
<added> attach_custom_data_format
<added> del_items
<added> del_mapping
<added> detach_custom_data_format
<added> get_bytes
<added> get_first_hidden_range
<added> get_last_hidden_range
<added> get_mapping
<added> get_mappings_qty
<added> is_attached_custom_data_format
<added> revert_byte
<added> update_hidden_range
<added> use_mapping
add_hidden_area add_hidden_range
alignflag align_flag
asciflag strlit_flag
binflag bin_flag
byteflag byte_flag
charflag char_flag
chunksize chunk_size
chunkstart chunk_start
codeflag code_flag
custflag cust_flag
custfmtflag custfmt_flag
decflag dec_flag
delValue del_value
del_hidden_area del_hidden_range
do16bit create_16bit_data
do32bit create_32bit_data
doAlign create_align
doByte create_byte
doCustomData create_custdata
doDouble create_double
doDwrd create_dword
doFloat create_float
doImmd set_immd
doOwrd create_oword
doPackReal create_packed_real
doQwrd create_qword
doStruct create_struct
doTbyt create_tbyte
doWord create_word
doYwrd create_yword
doZwrd create_zword
do_data_ex create_data
doubleflag double_flag
dwrdflag dword_flag
enumflag enum_flag
f_hasRef f_has_xref
f_isASCII f_is_strlit
f_isAlign f_is_align
f_isByte f_is_byte
f_isCode f_is_code
f_isCustom f_is_custom
f_isData f_is_data
f_isDouble f_is_double
f_isDwrd f_is_dword
f_isFloat f_is_float
f_isHead f_is_head
f_isNotTail f_is_not_tail
f_isOwrd f_is_oword
f_isPackReal f_is_pack_real
f_isQwrd f_is_qword
f_isStruct f_is_struct
f_isTail f_is_tail
f_isTbyt f_is_tbyte
f_isWord f_is_word
f_isYwrd f_is_yword
floatflag float_flag
fltflag flt_flag
freechunk free_chunk
getDefaultRadix get_default_radix
getFlags get_full_flags WARNING: 'getFlags' has not been renamed to 'get_flags'
get_long get_dword
get_full_byte get_wide_byte
get_full_word get_wide_word
get_full_long get_wide_dword
get_original_long get_original_dword
put_long put_dword
patch_long patch_dword
add_long add_dword
getRadix get_radix
get_ascii_contents2 get_strlit_contents q * return type changed from 'bool' to 'ssize_t'; output argument 'usedsize' (in bytes) changed to 'maxcps' (in codepoints)
get_cmt q *
get_custom_data_format removed 'dtid' argument
get_data_value *
get_enum_id *
get_flags_novalue get_flags WARNING: 'getFlags' has not been renamed to 'get_flags'
get_forced_operand q *
get_hidden_area get_hidden_range return type: 'hidden_area_t *' has been renamed to 'hidden_range_t *'
get_hidden_area_num get_hidden_range_num
get_hidden_area_qty get_hidden_range_qty
get_manual_insn q * return type changed from 'char *' to 'ssize_t';
get_max_ascii_length get_max_strlit_length
get_next_hidden_range get_next_hidden_area return type: 'hidden_area_t *' has been renamed to 'hidden_range_t *'
get_opinfo *
get_predef_insn_cmt q * moved from ints.hpp
get_prev_hidden_range get_prev_hidden_area return type: 'hidden_area_t *' has been renamed to 'hidden_range_t *'
get_stroff_path *
get_zero_areas get_zero_ranges argument type: 'areaset_t' has been renamed to 'rangeset_t'
getn_hidden_area getn_hidden_range return type: 'hidden_area_t *' has been renamed to 'hidden_range_t *'
hasExtra has_extra_cmts
hasRef has_xref
hasValue has_value
hexflag hex_flag
isASCII is_strlit
isAlign is_align
isByte is_byte
isChar is_char
isChar0 is_char0
isChar1 is_char1
isCode is_code
isCustFmt is_custfmt
isCustFmt0 is_custfmt0
isCustFmt1 is_custfmt1
isCustom is_custom
isData is_data
isDefArg is_defarg
isDefArg0 is_defarg0
isDefArg1 is_defarg1
isDouble is_double
isDwrd is_dword
isEnabled is_mapped
isEnum is_enum
isEnum0 is_enum0
isEnum1 is_enum1
isFloat is_float
isFloat0 is_float0
isFloat1 is_float1
isFlow is_flow
isFltnum is_fltnum
isFop is_manual
isFunc is_func
isHead is_head
isImmd has_immd
isLoaded is_loaded
isNotTail is_not_tail
isNum is_numop
isNum0 is_numop0
isNum1 is_numop1
isOff is_off
isOff0 is_off0
isOff1 is_off1
isOwrd is_oword
isPackReal is_pack_real
isQwrd is_qword
isSeg is_seg
isSeg0 is_seg0
isSeg1 is_seg1
isStkvar is_stkvar
isStkvar0 is_stkvar0
isStkvar1 is_stkvar1
isStroff is_stroff
isStroff0 is_stroff0
isStroff1 is_stroff1
isStruct is_struct
isTail is_tail
isTbyt is_tbyte
isUnknown is_unknown
isVoid is_suspop
isWord is_word
isYwrd is_yword
isZwrd is_zword
make_ascii_string create_strlit
nextaddr next_addr
nextchunk next_chunk
nextthat next_that
noType clr_op_type
numflag num_flag
octflag oct_flag
offflag off_flag
op_stroff converted input 'ea_t' argument to 'const insn_t &'
owrdflag oword_flag
packrealflag packreal_flag
patch_many_bytes patch_bytes
prevaddr prev_addr
prevchunk prev_chunk
prevthat prev_that
print_ascii_string_type print_strlit_type q * return type changed from 'char *' to 'bool'; added 'out_tooltip' and 'flags' arguments
put_many_bytes put_bytes
qwrdflag qword_flag
register_custom_data_format removed 'dtid' argument
segflag seg_flag
set_opinfo added 'suppress_events' argument
stkvarflag stkvar_flag
stroffflag stroff_flag
struflag stru_flag
tbytflag tbyte_flag
unregister_custom_data_format removed 'dtid' argument
wordflag word_flag
ywrdflag yword_flag
zwrdflag zword_flag

compress.hpp

original name new name
process_zipfile64 process_zipfile
process_zipfile_entry64 process_zipfile_entry

config.hpp (NEW file)

original name Notes
cfg_get_cc_header_path moved from idp.hpp
cfg_get_cc_parm moved from idp.hpp
cfg_get_cc_predefined_macros moved from idp.hpp
cfgopt_t__apply moved from idp.hpp
parse_config_value moved from idp.hpp
read_config moved from idp.hpp
read_config_file moved from idp.hpp
read_config_string moved from idp.hpp

dbg.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2] Notes
get_process_info <removed> use 'get_processes' instead
get_process_qty <removed> use 'get_processes' instead
getn_process <removed> use 'get_processes' instead
<added> bpt_t::get_cnd_elang_idx
<added> get_ip_val
<added> get_sp_val
bpt_location_t::print *
choose_trace_file *
create_source_viewer argument type: 'TWinControl' and 'TCustomControl' changed to 'TWidget'; added 'out_ccv' argument
get_dbg_byte *
get_trace_file_desc q *
internal_get_sreg_base *
load_trace_file q *
source_file_t::open_srcview argument type: 'TCustomControl' changed to 'TWidget'
source_item_t::get_hint q
source_item_t::get_kind source_item_t::get_item_kind

diskio.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] return type changed from '[u]int32' to '[u]int64'/'qoff64_t'
  • [4] input argument changed from '[u]int32' to '[u]int64'/'qoff64_t'
original name new name [1] [2] [3] [4] Notes
create_generic_linput <removed>
echsize64 <removed>
ecreateT <removed>
eseek64 <removed>
free_ioports <removed>
qfsize64 <removed>
qlgetz64 <removed>
qlseek64 <removed>
qlsize64 <removed>
qltell64 <removed>
choose_ioport_device q *
echsize *
eseek *
find_ioport input argument converted to 'const ioports_t &'
find_ioport_bit input argument converted to 'const ioports_t &'
get_special_folder *
getdspace get_free_disk_space
qfsize *
qlgetz *
qlseek * *
qlsize *
qltell *
read_ioports return type changed from 'ioport_t *' to 'ssize_t'; output argument converted 'ioports_t'

entry.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] added 'flags' argument
original name [1] [2] [3]
add_entry *
get_entry_forwarder q *
get_entry_name q *
rename_entry *
set_entry_forwarder *

enum.hpp

NOTE: global variable 'enums' has been removed.

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2]
add_selected_enum <removed>
get_bmask_node <removed>
get_selected_enum <removed>
init_enums <removed>
save_enums <removed>
set_enum_flag <removed>
term_enums <removed>
unmark_selected_enums <removed>
get_bmask_cmt q *
get_enum_cmt q *
get_enum_member_cmt q *
get_first_serial_enum_member *
get_last_serial_enum_member *
get_next_serial_enum_member *
get_prev_serial_enum_member *

err.h

original name Notes
qstrerror buf argument removed; returns string in static buffer (thread-safe)

expr.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] input argument changed from pointer to reference
original name new name [1] [2] [3] Notes
ExecuteFile <removed> use 'exec_idc_script' instead
ExecuteLine, execute <removed> use 'eval_idc_snippet' instead
call_idc_method <removed>
call_script_method <removed> use 'extlang_t::call_method' instead
compile_script_file <removed> use 'extlang_t::compile_file' instead
compile_script_func <removed> use 'extlang_t::compile_expr' instead
create_idc_object <removed>
create_script_object <removed> use 'extlang_t::create_object' instead
extlang_call_method_exists <removed> 'extlang_t::call_method' should always exist
extlang_compile_file <removed> use 'extlang_t::compile_file' instead
extlang_compile_file_exists <removed> 'extlang_t::compile_file' should always exist
extlang_create_object_exists <removed> 'extlang_t::create_object' should always exist
extlang_get_attr_exists <removed> 'extlang_t::get_attr' should always exist
extlang_run_statements_exists <removed> replaced by 'extlang_t::eval_statements', which should always exist
extlang_set_attr_exists <removed> 'extlang_t::set_attr' should always exist
extlang_unload_procmod <removed> use 'extlang_t::unload_procmod' instead
get_extlang_fileext <removed> use 'extlang_t::fileext' instead
get_extlangs <removed> use 'for_all_extlangs' instead
get_idc_func_body <removed>
get_script_attr <removed> use 'extlang_t::get_attr' instead
run_script_func <removed> use 'extlang_t::call_func' instead
run_statements <removed> use 'extlang_t::eval_statements' instead
set_idc_func_body <removed>
set_idc_func_ex <removed> use 'add_idc_func'/'del_idc_func' instead
set_script_attr <removed> use 'extlang_t::set_attr' instead
<added> add_idc_func to be used instead of 'set_idc_func_ex'
<added> compile_idc_snippet
<added> del_idc_func to be used instead of 'set_idc_func_ex'
<added> eval_idc_snippet
<added> find_extlang_by_index
<added> find_idc_func
<added> for_all_extlangs
<added> get_extlang always returns non-NULL
Compile, CompileEx compile_idc_file q *
CompileLine, CompileLineEx compile_idc_text * added 'resolver' argument
Run call_idc_func * * swapped 'argsnum' and 'args'; argument type: 'int' changed to 'size_t'; added 'resolver' argument
VarAssign copy_idcv *
VarCopy deep_copy_idcv *
VarDelAttr del_idcv_attr
VarDeref deref_idcv
VarFirstAttr first_idcv_attr
VarFloat idcv_float
VarFree free_idcv
VarGetAttr get_idcv_attr *
VarGetClassName get_idcv_class_name q
VarGetSlice get_idcv_slice *
VarInt64 idcv_int64
VarLastAttr last_idcv_attr
VarLong idcv_long
VarMove move_idcv
VarNextAttr next_idcv_attr
VarNum idcv_num
VarObject idcv_object
VarPrevAttr prev_idcv_attr
VarPrint print_idcv *
VarRef create_idcv_ref
VarSetAttr set_idcv_attr *
VarSetSlice set_idcv_slice *
VarString2 idcv_string
VarSwap swap_idcvs
calc_idc_expr eval_idc_expr * *
calcexpr eval_expr * *
calcexpr_long eval_expr_long * *
dosysfile exec_system_script argument order has swapped
find_extlang_by_ext return type changed from 'const extlang_t *' to 'extlang_object_t'
find_extlang_by_name return type changed from 'const extlang_t *' to 'extlang_object_t'
install_extlang removed const from 'el' argument; return type changed from 'bool' to 'ssize_t'
remove_extlang removed const from 'el' argument
select_extlang removed const from 'el' argument

fixup.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] input argument changed from pointer to reference
original name new name [1] [2] [3] Notes
get_fixup_base <removed> use 'fd.get_base()' instead
get_fixup_extdef_ea <removed> use 'fd.get_base() + fd.off' instead
get_fixup_segdef_sel <removed> use 'fd.sel' instead
set_custom_fixup <removed> use 'set_fixup' instead
set_custom_fixup_ex <removed> use 'set_fixup' instead
set_fixup_ex <removed>
<added> calc_fixup_size
<added> exists_fixup
<added> find_custom_fixup to be used instead of 'create_custom_fixup' (from idp.hpp)
<added> get_fixup_handler
<added> get_fixup_value
<added> get_fixups
<added> is_fixup_custom
<added> patch_fixup_value
get_fixup *
get_fixup_desc q * * return type changed from 'char *' to 'const char *'
register_custom_fixup input argument changed from 'const fixup_handler_t *' to 'const custom_fixup_handler_t *'; return type changed from 'int' to 'fixup_type_t'
set_fixup *
unregister_custom_fixup input argument changed from 'int' to 'fixup_type_t'

fpro.h

  • [1] input argument changed from 'int32' to 'qoff64_t'
  • [2] return type changed from 'int32' to 'qoff64_t'
original name new name
<added> qaccess
<added> qgetline
qcopyfile64 qcopyfile
qfseek64 qfseek *
qftell64 qftell *

frame.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] input argument 'func_t *pfn' made const
original name new name [1] [2] [3] Notes
add_auto_stkpnt2 add_auto_stkpnt
add_stkvar2 define_stkvar
add_stkvar3 add_stkvar added 'const insn_t &' input argument
build_stkvar_name q * * return type changed from 'char *' to 'ssize_t'
calc_stkvar_struc_offset converted input 'ea_t' argument to 'const insn_t &'
frame_off_args *
frame_off_lvars *
frame_off_retaddr *
frame_off_savregs *
get_frame_part * * argument type: 'area_t' changed to 'range_t'
get_frame_retsize *
get_frame_size *
get_stkvar * added 'const insn_t &' input argument
is_funcarg_off *
lvar_off *

funcs.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2] Notes
a2funcoff <removed>
apply_idasgn <removed>
clear_func_struct <removed>
del_func_cmt <removed> use 'set_func_cmt("")' instead
std_gen_func_header <removed> use 'outctx_base_t::gen_func_header' instead
<added> is_same_func
<added> lock_func_range
<added> reanalyze_noret_flag
add_func second 'ea_t' argument made optional
add_regarg2 add_regarg
find_func_bounds * removed 'ea' argument
func_item_iterator_t::decode_preceding_insn added 'insn_t *' output argument
func_item_iterator_t::decode_prev_insn added 'insn_t *' output argument
func_setend set_func_end
func_setstart set_func_start
get_func_bits input argument 'func_t *' made const
get_func_bytes input argument 'func_t *' made const
get_func_cmt q * return type changed from 'char *' to 'ssize_t'
get_func_limits get_func_ranges * output argument converted from 'area_t *' to 'rangeset_t *'; return type changed from 'bool' to 'ea_t'
get_func_name2 get_func_name
get_idasgn_desc q *
get_idasgn_title q * return type changed from 'char *' to 'ssize_t'
set_func_cmt input argument 'func_t *' made const

gdl.hpp

original name Notes
create_multirange_qflow_chart argument type: 'areavec_t' has been renamed to 'rangevec_t'

graph.hpp

  • [1] input argument changed from 'TCustomControl *' to 'graph_viewer_t *'
original name new name [1] Notes
set_graph_dispatcher <removed> use 'hook_to_notification_point(HT_GRAPH, [...])' instead
viewer_add_menu_item <removed> use 'viewer_attach_menu_item' instead
viewer_del_menu_item <removed>
<added> viewer_get_gli
clr_node_info2 clr_node_info
create_disasm_graph argument type: 'areavec_t' has been renamed to 'rangevec_t'
create_graph_viewer added 'title' argument; 'parent' argument made optional and reordered
del_node_info2 del_node_info
get_graph_viewer input argument changed from 'TForm *' to 'TWidget *'
get_node_info2 get_node_info
get_viewer_graph *
grentry 'grentry' has been converted from a global variable to an inline function
refresh_viewer *
set_node_info2 set_node_info
viewer_center_on *
viewer_create_groups *
viewer_del_node_info *
viewer_delete_groups *
viewer_fit_window *
viewer_get_curnode *
viewer_get_node_info *
viewer_set_gli * added 'flags' argument
viewer_set_groups_visibility *
viewer_set_node_info *

help.h

original name new name
askyn ask_yn
askyn_v vask_yn

ida.hpp

original name new name
ansi2idb <removed>
dto_copy_from_inf <removed>
dto_copy_to_inf <removed>
dto_init <removed>
idb2scr <removed>
scr2idb <removed>
showAllComments show_all_comments
showComments show_comments
showRepeatable class="table table-sm"s show_repeatable class="table table-sm"s
toEA to_ea

idd.hpp

  • [1] output argument moved to beginning of argument list
original name [1] Notes
dbg_appcall * swapped 'argnum' and 'argv'; argument type: 'int' changed to 'size_t'

idp.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2] Notes
get_reg_info2 get_reg_info
get_reg_name q *
invoke_callbacks moved from loader.hpp
hook_to_notification_point moved from loader.hpp
unhook_from_notification_point moved from loader.hpp
set_processor_type return type changed from 'char' to 'bool'; argument type: 'int' changed to 'setproc_level_t'
parse_reg_name *
cfg_get_cc_header_path moved to config.hpp
cfg_get_cc_parm moved to config.hpp
cfg_get_cc_predefined_macros moved to config.hpp
cfgopt_t__apply moved to config.hpp
parse_config_value moved to config.hpp
read_config moved to config.hpp
read_config_file moved to config.hpp
read_config_string moved to config.hpp
InstrIsSet has_insn_feature
str2regf <removed>
create_custom_fixup <removed>
gen_spcdef <removed> use 'outctx_t::out_specea' instead
gen_abssym <removed> use 'outctx_t::out_specea' instead
gen_comvar <removed> use 'outctx_t::out_specea' instead
gen_extern <removed> use 'outctx_t::out_specea' instead
intel_data <removed> use 'outctx_t::out_data' instead
is_basic_block_end added 'const insn_t &' input argument
is_call_insn converted input 'ea_t' argument to 'const insn_t &'
is_indirect_jump_insn converted input 'ea_t' argument to 'const insn_t &'
is_ret_insn converted input 'ea_t' argument to 'const insn_t &'

ieee.h

  • [1] output argument moved to beginning of argument list
original name [1]
eetol *
eetol64 *
eetol64u *
realtoasc *

ints.hpp (REMOVED)

original name new name Notes
get_predef_cmt <removed>
get_vxd_func_name <removed>
get_predef_insn_cmt moved to bytes.hpp

kernwin.hpp

NOTE: Please note that in IDA version 6.7 we introduced the Actions API, which deprecated many functions related to augmenting functionality in IDA.

Those previously deprecated functions have been removed. For more details about the Actions API, please visit our old blog post from 2014:

http://www.hexblog.com/?p=886

NOTE: 'TForm', 'TCustomControl', and 'TWinControl' have been replaced by 'TWidget'

NOTE: global variable 'dirty_infos' has been removed.

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] input argument changed from pointer to reference
  • [4] return type changed from 'TForm *' to 'TWidget *'
  • [5] input argument changed from 'TCustomControl *' to 'TWidget *'
original name new name [1] [2] [3] [4] [5] Notes
askfile_c <removed>
askfile_cv <removed>
askstr <removed>
close_form <removed> use 'form_actions_t::close' instead
close_tform <removed> use 'close_widget' instead
create_tform <removed> use 'find_widget' or 'create_empty_widget' instead
enable_menu_item <removed> superseded by the Actions API (see blog post above)
entab <removed>
find_tform <removed> use 'find_widget' instead
get_current_tform <removed> use 'get_current_widget' instead
get_highlighted_identifier <removed> use 'get_current_viewer' and 'get_highlight' instead
get_tform_idaview <removed> use the 'TWidget *' directly instead of obtaining the IDAView
get_tform_title <removed> use 'get_widget_title' instead
get_tform_type <removed> use 'get_widget_type' instead
get_viewer_name <removed> use 'get_widget_title' instead
init_kernel <removed>
is_chooser_tform <removed> use 'is_chooser_widget' instead
print_disp <removed> use 'append_disp' instead
set_menu_item_icon <removed> superseded by the Actions API (see blog post above)
switchto_tform <removed> use 'activate_widget' instead
term_kernel <removed>
umsg <removed>
vaskstr <removed>
vumsg <removed>
<added> activate_widget
<added> append_disp
<added> close_widget
<added> create_empty_widget
<added> find_widget
<added> get_current_widget
<added> get_highlight
<added> get_widget_title
<added> get_widget_type
<added> is_buttoncb_t_type
<added> is_chooser_widget
<added> is_formchgcb_t_type
<added> qcleanline
<added> set_highlight
<added> unpack_ds_to_buf
AskUsingForm_c ask_form
AskUsingForm_cv vask_form
OpenForm_c open_form *
OpenForm_cv vopen_form *
askaddr ask_addr
askbuttons_c ask_buttons
askbuttons_cv vask_buttons
askfile2_c ask_file 'filters' argument merged into 'format'
askfile2_cv vask_file 'filters' argument merged into 'format'
askident ask_ident * return type changed from 'char *' to 'bool'
asklong ask_long
askqstr ask_str added 'hist' argument
askseg ask_seg
asktext ask_text q * return type changed from 'char *' to 'bool'
askyn_c ask_yn
askyn_cv vask_yn
atob32 *
atob64 *
atoea *
atos *
attach_action_to_popup input argument changed from 'TForm *' to 'TWidget *'
attach_dynamic_action_to_popup * input argument changed from 'TForm *' to 'TWidget *'
b2a32 *
b2a64 *
back_char moved to pro.h
choose, choose2, choose3 choose choosers should use the new 'chooser_base_t' interface
choose_srcp return type changed from 'segreg_area_t *' to 'sreg_range_t *'
choose_til *
clearBreak clr_cancelled
clear_refresh_request to be used instead of 'dirty_infos'
create_code_viewer return type changed from 'TCustomControl *' to 'TWidget *'; 'parent' argument made optional and reordered
create_custom_viewer return type changed from 'TCustomControl *' to 'TWidget *'; 'parent' argument made optional and reordered
custom_viewer_jump *
destroy_custom_viewer *
detach_action_from_popup input argument changed from 'TForm *' to 'TWidget *'
ea2str *
ea_viewer_history_push_and_jump *
gen_disasm_text *
get_8bit *
get_action_label *
get_action_shortcut *
get_action_tooltip *
get_chooser_data argument type: 'uint32' changed to 'int'
get_current_viewer return type changed from 'TCustomControl *' to 'TWidget *'
get_custom_viewer_curline *
get_custom_viewer_place *
get_ea_viewer_history_info *
get_kernel_version return type changed from 'bool' to 'ssize_t'
get_output_curline *
get_output_selected_text *
get_view_renderer_type *
get_viewer_place_type *
get_viewer_user_data *
is_idaview *
is_refresh_requested to be used instead of 'dirty_infos'
jumpto *
linearray_t::down return type changed from 'char *' to 'const qstring *'
linearray_t::up return type changed from 'char *' to 'const qstring *'
open_bpts_window *
open_bpts_window *
open_calls_window *
open_disasm_window * input argument changed from 'const areavec_t *' to 'const rangevec_t *'
open_enums_window *
open_exports_window *
open_frame_window *
open_funcs_window *
open_hexdump_window *
open_imports_window *
open_loctypes_window *
open_modules_window *
open_names_window *
open_navband_window *
open_notepad_window *
open_problems_window *
open_segments_window *
open_segregs_window *
open_selectors_window *
open_signatures_window *
open_stack_window *
open_strings_window *
open_structs_window *
open_tform display_widget input argument changed from 'TForm *' to 'TWidget *'
open_threads_window *
open_tils_window *
open_trace_window *
open_xrefs_window *
qstr2user moved to pro.h
r50_to_asc *
read_range_selection read_selection * WARNING: 'read_selection' has changed meaning
read_selection read_range_selection WARNING: 'read_selection' has changed meaning; added 'TWidget *' argument
refresh_custom_viewer *
repaint_custom_viewer *
request_refresh added 'cnd' argument
setBreak set_cancelled
set_code_viewer_handler *
set_code_viewer_is_source *
set_code_viewer_line_handlers *
set_code_viewer_lines_alignment *
set_code_viewer_lines_icon_margin *
set_code_viewer_lines_radix *
set_code_viewer_user_data *
set_custom_viewer_handler *
set_custom_viewer_handlers *
set_custom_viewer_qt_aware *
set_custom_viewer_range *
set_view_renderer_type *
show_hex_file argument type: 'int32' changed to 'int64'
skipSpaces skip_spaces
stoa q *
str2ea *
str2ea_ex *
str2user moved to pro.h
ui_load_new_file added 'temp_file' and 'ploaders'; input argument 'filename' changed from 'const char *' to 'qstring *'
user2qstr moved to pro.h
user2str moved to pro.h
vaskqstr vask_str added 'hist' argument
vasktext vask_text q * return type changed from 'char *' to 'bool'
vshow_hex_file argument type: 'int32' changed to 'int64'
wasBreak user_cancelled

lex.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2]
lex_define lex_define_macro
lex_undef lex_undefine_macro
lxascii lex_print_token q *
lxget lex_get_token
lxgetserr lex_get_file_line
lxgetsini lex_init_file
lxgetstrm lex_term_file
lxini lex_init_string

lines.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] return type changed from 'void' to 'bool'
original name new name [1] [2] [3] Notes
MakeBorder <removed> use 'outctx_base_t::gen_border_line(false)' instead
MakeLine <removed> use 'outctx_base_t::flush_buf' instead
MakeNull <removed> use 'outctx_base_t::gen_empty_line' instead
MakeSolidBorder <removed> use 'outctx_base_t::gen_border_line(true)' instead
add_long_cmt_v <removed> use 'vadd_extra_line' instead
close_comment <removed> use 'outctx_base_t::close_comment' instead
describex <removed> use 'vadd_extra_line' instead
finish_makeline <removed> use 'outctx_base_t::term_outctx' instead
gen_cmt_line <removed> use 'outctx_base_t::gen_cmt_line' instead
gen_cmt_line_v <removed> use 'outctx_base_t::gen_cmt_line_v' instead
gen_collapsed_line <removed> use 'outctx_base_t::gen_collapsed_line' instead
gen_colored_cmt_line_v <removed> use 'outctx_base_t::gen_colored_cmt_line_v' instead
generate_big_comment <removed> use 'outctx_base_t::gen_block_cmt' instead
generate_many_lines <removed> use 'outctx_base_t::gen_many_lines(-1, NULL, [...])' instead
init_lines <removed>
init_lines_array <removed> use 'outctx_base_t::init_lines_array' instead
printf_line <removed> use 'outctx_base_t::gen_printf' instead
printf_line_v <removed> use 'outctx_base_t::gen_vprintf' instead
save_line_in_array <removed> use 'outctx_base_t::save_buf' instead
save_lines <removed>
save_sourcefiles <removed>
setup_makeline <removed> use 'outctx_base_t::setup_outctx' instead
tag_addchr <removed>
tag_addstr <removed>
tag_off <removed>
tag_on <removed>
<added> get_last_pfxlen
<added> vadd_extra_line
add_long_cmt add_extra_cmt
add_pgm_cmt *
describe add_extra_line *
generate_disasm_line q *
generate_disassembly q * output argument is 'qstrvec_t'
get_extra_cmt q *
get_sourcefile argument type: 'area_t *' changed to 'range_t *'
tag_addr q * return type changed from 'char *' to 'void'; added 'ins' argument
tag_remove q * added 'init_level' argument

llong.hpp

  • [1] output argument moved to beginning of argument list
  • [2] output argument changed from reference to pointer
original name new name [1] [2]
print <removed>
llong_div * *
llong_udiv * *

loader.hpp

NOTE: global variables 'database_flags', 'command_line_file', 'idb_path', and 'id0_path' have been removed.

NOTE: class 'loader_jump' has been renamed to 'loader_failure_t'

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] input argument changed from 'int32' to 'qoff64_t'
  • [3] return type changed from 'int32' to 'qoff64_t'
original name new name [1] [2] [3] Notes
enum_plugins <removed>
init_loader_options <removed>
<added> find_plugin
<added> process_archive
accept_file q * added 'processor' output argument (optional)
base2file *
build_loaders_list added 'filename' argument (name of the input file for archives)
clr_database_flag to be used instead of 'database_flags'
extract_module_from_archive *
file2base *
get_fileregion_ea *
get_fileregion_offset *
get_path to be used instead of 'idb_path'
hook_to_notification_point moved to idp.hpp
invoke_callbacks moved to idp.hpp
is_database_flag to be used instead of 'database_flags'
load_and_run_plugin argument type: 'int' changed to 'size_t'
load_binary_file * argument type: 'uint32' changed to 'uint64'
load_dll_or_say load_core_module * added 'entry' argument (name of plugin 'entrypoint' symbol)
mem2base *
run_plugin argument type: 'int' changed to 'size_t'
save_database_ex save_database
set_database_flag to be used instead of 'database_flags'
set_path to be used instead of 'idb_path'
unhook_from_notification_point moved to idp.hpp

moves.hpp

NOTE: 'curloc_t' and 'location_t' have been replaced by 'lochist_t'.

original name new name
curloc_get <removed>
curloc_get_entry <removed>
curloc_hide_if_necessary <removed>
curloc_jump <removed>
curloc_jump_push <removed>
curloc_linkTo <removed>
curloc_mark <removed>
curloc_markdesc <removed>
curloc_markedpos <removed>
curloc_pop <removed>
curloc_unhide_if_necessary <removed>
location_get <removed>
location_get_entry <removed>
location_jump <removed>
location_linkTo <removed>
location_mark <removed>
location_pop <removed>
location_push_and_jump <removed>
<added> graph_location_info_t::deserialize
<added> graph_location_info_t::serialize
<added> renderer_info_pos_t::deserialize
<added> renderer_info_pos_t::serialize

nalt.hpp

NOTE: global variable 'import_node' has been removed.

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2] Notes
_del_item_color <removed>
_del_strid <removed>
_set_item_color <removed>
_set_item_color <removed>
_set_strid <removed>
del__segtrans <removed>
del_enum_id0 <removed>
del_enum_id1 <removed>
del_fop1 <removed>
del_fop2 <removed>
del_fop3 <removed>
del_fop4 <removed>
del_fop5 <removed>
del_fop6 <removed>
del_graph_groups0 <removed>
del_jumptable class="table table-sm"_info <removed>
del_linnum0 <removed>
del_manual_insn0 <removed>
del_nalt_cmt <removed>
del_nalt_rptcmt <removed>
del_stroff0 <removed>
del_stroff1 <removed>
del_wide_value <removed>
get__segtrans <removed>
get_auto_plugins <removed>
get_custom_refinfos <removed> use 'get_refinfo_descs' instead
get_enum_id0 <removed>
get_enum_id1 <removed>
get_fop1 <removed>
get_fop2 <removed>
get_fop3 <removed>
get_fop4 <removed>
get_fop5 <removed>
get_fop6 <removed>
get_graph_groups0 <removed>
get_jumptable class="table table-sm"_info <removed>
get_linnum0 <removed>
get_manual_insn0 <removed>
get_nalt_cmt <removed>
get_nalt_rptcmt <removed>
get_stroff0 <removed>
get_stroff1 <removed>
get_wide_value <removed>
is_unicode <removed> use 'get_strtype_bpu' instead
set__segtrans <removed>
set_auto_plugins <removed>
set_enum_id0 <removed>
set_enum_id1 <removed>
set_fop1 <removed>
set_fop2 <removed>
set_fop3 <removed>
set_fop4 <removed>
set_fop5 <removed>
set_fop6 <removed>
set_graph_groups0 <removed>
set_jumptable class="table table-sm"_info <removed>
set_linnum0 <removed>
set_manual_insn0 <removed>
set_nalt_cmt <removed>
set_nalt_rptcmt <removed>
set_stroff0 <removed>
set_stroff1 <removed>
set_wide_value <removed>
<added> clr_notproc
<added> delete_imports to be used instead of 'auto_display'
<added> ea2node
<added> find_custom_refinfo
<added> get_abi_name
<added> get_archive_path
<added> get_custom_refinfo
<added> get_custom_refinfo_handler
<added> get_encoding_bpu
<added> get_gotea
<added> get_refinfo_descs
<added> get_strtype_bpu
<added> getnode
<added> is_notproc
<added> is_reftype_target_optional
<added> node2ea
<added> set_archive_path
<added> set_gotea
<added> set_notproc
change_encoding_name rename_encoding
del_switch_info_ex del_switch_info
del_tinfo2 del_tinfo
del_tinfo2(,n) del_op_tinfo
get_array_parameters * removed 'bufsize' argument
get_asm_inc_file *
get_custom_data_type_ids * removed 'bufsize' argument
get_default_encoding_idx argument type: 'int32' changed to 'int'
get_encodings_count get_encoding_qty
get_import_module_name q *
get_op_tinfo2 get_op_tinfo *
get_refinfo *
get_str_type_code return type changed from 'char' to 'uchar'; argument type: 'uval_t' changed to 'int32'
get_strid return type changed from 'ea_t' to 'tid_t'
get_switch_info_ex get_switch_info * removed 'bufsize' argument
get_tinfo2 get_tinfo *
get_xrefpos * removed 'bufsize' argument
read_struc_path * argument type: 'netnode' changed to 'ea_t'
set_default_encoding_idx argument type: 'int32' changed to 'int'
set_op_tinfo2 set_op_tinfo
set_switch_info_ex set_switch_info input argument changed from 'const switch_info_ex_t *' to 'const switch_info_t &'
set_tinfo2 set_tinfo
write_struc_path argument type: 'netnode' changed to 'ea_t'

name.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] output argument changed from reference to pointer
original name new name [1] [2] [3] Notes
gen_name_decl <removed> use 'outctx_base_t::gen_name_decl' instead
<added> is_strlit_cp
<added> is_valid_cp
<added> set_cp_validity
append_struct_fields2 append_struct_fields *
demangle_name2 demangle_name
do_name_anyway force_name removed 'maxlen' argument
extract_name2 extract_name
get_debug_name2 get_debug_name
get_debug_names * *
get_ea_name removed const from 'gtni' argument
get_name_expr q *
get_name_value *
get_nice_colored_name q *
get_struct_operand *
get_true_name get_name
is_ident_char is_ident_cp
is_visible_char is_visible_cp
isident is_ident
validate_name3 validate_name added 'type' and 'flags' arguments

netnode.hpp

original name new name Notes
<added> netnode::altdel_ea to be used instead of 'netnode::altdel' for addresses (ea_t)
<added> netnode::altset_ea to be used instead of 'netnode::altset' for addresses (ea_t)
<added> netnode::altval_ea to be used instead of 'netnode::altval' for addresses (ea_t)
<added> netnode::blobsize_ea to be used instead of 'netnode::blobsize' for addresses (ea_t)
<added> netnode::chardel_ea to be used instead of 'netnode::chardel' for addresses (ea_t)
<added> netnode::charset_ea to be used instead of 'netnode::charset' for addresses (ea_t)
<added> netnode::charval_ea to be used instead of 'netnode::charval' for addresses (ea_t)
<added> netnode::delblob_ea to be used instead of 'netnode::delblob' for addresses (ea_t)
<added> netnode::eadel
<added> netnode::eadel_idx8
<added> netnode::eaget
<added> netnode::eaget_idx8
<added> netnode::easet
<added> netnode::easet_idx8
<added> netnode::getblob_ea to be used instead of 'netnode::getblob' for addresses (ea_t)
<added> netnode::setblob_ea to be used instead of 'netnode::setblob' for addresses (ea_t)
<added> netnode::supdel_ea to be used instead of 'netnode::supdel' for addresses (ea_t)
<added> netnode::supset_ea to be used instead of 'netnode::supset' for addresses (ea_t)
<added> netnode::supstr_ea to be used instead of 'netnode::supstr' for addresses (ea_t)
<added> netnode::supval_ea to be used instead of 'netnode::supval' for addresses (ea_t)
netnode::alt1st netnode::altfirst
netnode::alt1st_idx8 netnode::altfirst_idx8
netnode::altnxt netnode::altnext
netnode::char1st netnode::charfirst
netnode::char1st_idx8 netnode::charfirst_idx8
netnode::charnxt netnode::charnext
netnode::getblob added variants that work with 'qvector<T> *' and 'qstring *'
netnode::hash1st netnode::hashfirst added variant that works with 'qstring *'
netnode::hashlast added variant that works with 'qstring *'
netnode::hashnxt netnode::hashnext added variant that works with 'qstring *'
netnode::hashprev added variant that works with 'qstring *'
netnode::hashstr added variant that works with 'qstring *'
netnode::sup1st netnode::supfirst
netnode::sup1st_idx8 netnode::supfirst_idx8
netnode::supnxt netnode::supnext
netnode::supstr added variant that works with 'qstring *'
netnode::valstr added variant that works with 'qstring *'

offset.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] input argument 'refinfo_t &' made const
original name new name [1] [2] [3] Notes
calc_reference_basevalue <removed> use 'calc_reference_data' instead
calc_reference_target <removed> use 'calc_reference_data' instead
set_offset <removed> use 'calc_offset_base' and 'op_plain_offset' instead
<added> add_refinfo_dref
<added> calc_basevalue
<added> calc_offset_base
<added> calc_reference_data
<added> op_plain_offset
get_offset_expr q * *
get_offset_expression q *

problems.h (RENAMED from queue.hpp)

NOTE: 'qtype_t' has been changed to 'problist_id_t'.

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2] Notes
QueueGet <removed>
get_long_queue_name <removed> Use 'get_problem_name(type, true);' instead
get_short_queue_name <removed> Use 'get_problem_name(type, false);' instead
mark_ida_decision <removed>
unmark_ida_decision <removed>
<added> get_problem_name
QueueDel forget_problem return type changed from 'void' to 'bool'
QueueGetMessage get_problem_desc q *
QueueGetType get_problem
QueueIsPresent is_problem_present
QueueSet remember_problem

prodir.h

original name new name
qfindclose64 qfindclose
qfindfirst64 qfindfirst
qfindnext64 qfindnext

pro.h

NOTE: global variables 'codepage' and 'oemcodepage' have been removed.

  • [1] output argument moved to beginning of argument list
original name new name [1] Notes
c2ustr <removed> use 'utf8_utf16' instead
char2oem <removed>
convert_codepage <removed>
create_hit_counter <removed>
expand_argv <removed>
get_codepages <removed>
hit_counter_timer <removed>
oem2char <removed>
reg_hit_counter <removed>
u2cstr <removed> use 'utf16_utf8' instead
win_utf2idb <removed>
<added> acp_utf8
<added> change_codepage
<added> idb_utf8
<added> is_valid_utf8
<added> put_utf8_char
<added> qchdir
<added> qustrlen
<added> scr_utf8
<added> skip_utf8
<added> utf8_scr
<added> utf8_wchar16
<added> utf8_wchar32
back_char moved from kernwin.hpp
convert_encoding * return type changed from 'int' to 'ssize_t'
get_nsec_stamp output argument changed from 'uint64 *' to the 'uint64' return value
parse_command_line3 parse_command_line *
qchsize64 qchsize
qfileexist64 qfileexist
qfilesize64 qfilesize
qfstat64 qfstat
qseek64 qseek
qstat64 qstat
qstr2user moved from kernwin.hpp; added 'nsyms' argument
qtell64 qtell
qwait *
qwait_for_handles *
qwait_timed *
search_path *
str2user moved from kernwin.hpp
unicode_utf8 utf16_utf8
user2qstr moved from kernwin.hpp
user2str moved from kernwin.hpp
utf8_unicode utf8_utf16

pronet.h

original name new name
<added> qhost2addr

range.h (RENAMED from area.hpp)

NOTE: some classes have been renamed: - 'area_t' has been renamed to 'range_t' - 'areavec_t' has been renamed to 'rangevec_t' - 'areaset_t' has been renamed to 'rangeset_t'

NOTE: the classes 'rangecb_t', 'ranges_cache_t', and 'lock_range' have been removed

registry.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name [1] [2] Notes
reg_read_strlist *
reg_read_string q * removed variant with default value

search.hpp

  • [1] output argument moved to beginning of argument list
original name new name [1] Notes
user2bin *
find_imm argument type: 'sval_t' changed to 'uval_t'
find_void find_suspop

segment.hpp

NOTE: global variables 'hidden_ranges', 'funcs', and 'segs' have been removed.

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] added 'flags' argument
original name [1] [2] [3] Notes
del_segment_cmt <removed> use 'set_range_cmt("")' instead
vset_segm_name <removed>
<added> get_segm_num to be used instead of 'segs.get_range_num()'
<added> lock_segm to be used instead of 'rangecb_t_unlock_range(&segs)'
add_segm *
ask_selector sel2para
correct_address added 'skip_check' argument
del_segment_translations return type changed from 'bool' to 'void'
get_segm_class q *
get_segm_name get_visible_segm_name removed variant with 'ea_t' argument
get_segment_cmt q * return type changed from 'char *' to 'ssize_t'; added 'repeatable class="table table-sm"' argument
get_segment_translations return type changed from 'ea_t *' to 'ssize_t'; output argument converted 'eavec_t'
get_true_segm_name get_segm_name q * *
getn_selector *
set_segm_class *
set_segm_name * arguments converted from printf-style to simple 'const char *'
set_segment_cmt input argument 'segment_t *' made const
set_segment_translations input argument converted to 'const eavec_t &'
std_gen_segm_footer std_out_segm_footer converted to outctx_t; input argument changed to segment_t*

segregs.hpp (RENAMED from srarea.hpp)

NOTE: type 'segreg_area_t' has been renamed to 'sreg_range_t'

original name new name Notes
copy_srareas copy_sreg_ranges
del_srarea del_sreg_range WARNING: argument order has swapped
get_prev_srarea get_prev_sreg_range argument type: 'segreg_area_t' changed to 'sreg_range_t'
get_segreg get_sreg
get_srarea2 get_sreg_range argument type: 'segreg_area_t' changed to 'sreg_range_t'
get_srarea_num get_sreg_range_num WARNING: argument order has swapped
get_srareas_qty2 get_sreg_ranges_qty
getn_srarea2 getn_sreg_range argument type: 'segreg_area_t' changed to 'sreg_range_t'
set_default_segreg_value set_default_sreg_value
split_srarea split_sreg_range

sistack.h (REMOVED)

original name new name
sistack_t_size <removed>
sistack_t_flush <removed>

strlist.hpp

  • [1] output argument moved to beginning of argument list
original name new name [1] Notes
refresh_strlist <removed>
set_strlist_options <removed>
<added> build_strlist
<added> clear_strlist
<added> get_strlist_options
get_strlist_item * argument type: 'int' changed to 'size_t'

struct.hpp

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2]
get_member_by_fullname *
get_member_cmt q *
get_member_name2 get_member_name
get_member_tinfo2 get_member_tinfo *
get_or_guess_member_tinfo2 get_or_guess_member_tinfo *
get_struc_cmt q *
retrieve_member_info *
save_struc2 save_struc
set_member_tinfo2 set_member_tinfo

tryblks.hpp (NEW file)

original name new name
<added> add_tryblk
<added> del_tryblks
<added> get_tryblks

typeinf.hpp

NOTE: global variable 'idati' has been removed.

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
original name new name [1] [2] Notes
based_ptr_name_and_size <removed>
callregs_init_regs <removed>
choose_local_type <removed>
create_numbered_type_reference <removed>
equal_types <removed>
get_de <removed>
get_default_enum_size <removed>
get_func_cvtarg_map <removed>
get_named_type_size <removed>
get_referred_ordinal <removed>
get_stkarg_offset <removed>
get_unk_type_bit <removed>
is_restype_array <removed>
is_restype_bitfld <removed>
is_restype_complex <removed>
is_restype_const <removed>
is_restype_floating <removed>
is_restype_func <removed>
is_restype_ptr <removed>
is_restype_union <removed>
max_ptr_size <removed>
rename_named_type <removed>
set_named_type <removed> use 'tinfo_t::set_named_type' instead
set_named_type64 <removed> use 'tinfo_t::set_named_type' instead
<added> append_abi_opts
<added> gcc_layout
<added> get_arg_addrs
<added> get_idati to be used instead of 'idati'
<added> remove_abi_opts
<added> resolve_typedef
<added> set_compiler_string
add_til2 add_til
append_tinfo_covered argument type: 'areaset_t' has been renamed to 'rangeset_t'
apply_callee_tinfo return type changed from 'void' to 'bool'
apply_cdecl2 apply_cdecl
apply_tinfo2 apply_tinfo
apply_tinfo_to_stkarg added 'insn' argument
build_anon_type_name *
calc_c_cpp_name4 calc_c_cpp_name
calc_tinfo_gaps argument type: 'areaset_t' has been renamed to 'rangeset_t'
choose_local_tinfo added 'def_ord' argument
choose_named_type2 choose_named_type * the original 'choose_named_type' has been removed
create_numbered_type_name q * return type changed from 'size_t' to 'ssize_t'
decorate_name3 decorate_name added 'type' argument
del_tinfo_attr added 'make_copy' argument
deref_ptr2 deref_ptr *
extract_argloc *
find_tinfo_udt_member *
format_cdata2 format_cdata
gen_decorate_name3 gen_decorate_name the original 'gen_decorate_name' has been removed; added 'type' argument
get_c_header_path *
get_c_macros *
get_enum_member_expr2 get_enum_member_expr *
get_idainfo_by_type3 get_idainfo_by_type *
get_int_type_bit get_scalar_bt
get_tinfo_pdata *
get_tinfo_size *
guess_tinfo2 guess_tinfo *
load_til2 load_til * the original 'load_til' has been removed; added 'tildir' argument
load_til_header *
lower_type2 lower_type
optimize_argloc argument type: 'areaset_t' has been renamed to 'rangeset_t'
parse_decl2 parse_decl q
print_type3 print_type
remove_tinfo_pointer *
save_tinfo *
set_abi_name added 'user_level' argument
set_compiler2 set_compiler
set_numbered_type return type changed from 'bool' to 'tinfo_code_t'
verify_argloc argument type: 'areaset_t' has been renamed to 'rangeset_t'

ua.hpp

WARNING: The global variables 'cmd' and 'uFlag' are gone.

All functions previously operating on 'cmd' now accept an 'insn_t' pointer or reference. Use get_flags() (or, if you really need it, get_full_flags()) to read the current flags.

NOTE: The maximum number of instruction operands (UA_MAXOP) has increased to 8.

NOTE: class 'outctx_base_t' has been added to replace functions that generate the disassembly text

NOTE: global variable 'lookback' has been removed.

  • [1] output argument moved to beginning of argument list
    • q: argument is a qstring
  • [2] output buffer converted to qstring
  • [3] added input/output 'insn_t &insn' argument
  • [4] added input 'const insn_t &insn' argument
  • [5] added output 'insn_t *out' argument
original name new name [1] [2] [3] [4] [5] Notes
OutBadInstruction <removed>
OutChar <removed> use 'outctx_base_t::out_char' instead
OutImmChar <removed> use 'outctx_base_t::out_immchar_cmts' instead
OutLine <removed> use 'outctx_base_t::out_line' instead
OutLong <removed> use 'outctx_base_t::out_btoa' instead
OutMnem <removed> use 'outctx_base_t::out_mnem' instead
OutValue <removed> use 'outctx_base_t::out_value' instead
get_output_ptr <removed>
init_output_buffer <removed>
out_addr_tag <removed> use 'outctx_base_t::out_addr_tag' instead
out_colored_register_line <removed> use 'outctx_base_t::out_colored_register_line' instead
out_insert <removed> use 'outctx_base_t::outbuf' directly instead
out_line <removed> use 'outctx_base_t::out_line' instead
out_long <removed> use 'outctx_base_t::out_long' instead
out_name_expr <removed> use 'outctx_base_t::out_name_expr' instead
out_one_operand <removed> use 'outctx_base_t::out_one_operand' instead
out_snprintf <removed> use 'outctx_base_t::out_printf' instead
out_symbol <removed> use 'outctx_base_t::out_symbol' instead
out_tagoff <removed> use 'outctx_base_t::out_tagoff' instead
out_tagon <removed> use 'outctx_base_t::out_tagon' instead
set_output_ptr <removed>
term_output_buffer <removed>
ua_dodata2 <removed> use 'insn_t::create_op_data' instead
ua_next_byte <removed> use 'insn_t::get_next_byte' instead
ua_next_long <removed> use 'insn_t::get_next_dword' instead
ua_next_qword <removed> use 'insn_t::get_next_qword' instead
ua_next_word <removed> use 'insn_t::get_next_word' instead
<added> can_decode
<added> create_outctx
<added> get_lookback to be used instead of 'lookback'
<added> map_ea
codeSeg map_code_ea * input arguments changed to either 'const op_t &op' or 'ea_t addr, int opnum'
construct_macro *
create_insn *
dataSeg, dataSeg_op map_data_ea * input arguments changed to either 'const op_t &op' or 'ea_t addr, int opnum'
dataSeg_opreg calc_dataseg *
decode_insn *
decode_preceding_insn *
decode_prev_insn *
get_dtyp_by_size get_dtype_by_size return type changed from 'char' to 'op_dtype_t'
get_dtyp_flag get_dtype_flag argument type: 'char' changed to 'op_dtype_t'
get_dtyp_size get_dtype_size argument type: 'char' changed to 'op_dtype_t'
get_operand_immvals get_immvals * added 'flags_t' and 'cache' arguments
get_spoiled_reg *
guess_table class="table table-sm"_address *
guess_table class="table table-sm"_size *
out_real print_fpval *
showAsChar print_charlit *
ua_add_cref <removed> use 'insn_t::add_cref' instead
ua_add_dref <removed> use 'insn_t::add_dref' instead
ua_add_off_drefs2 <removed> use 'insn_t::add_off_drefs' instead
ua_mnem print_insn_mnem q *
ua_outop2 print_operand q * added 'printop_t' argument
ua_stkvar2 <removed> use 'insn_t::create_stkvar' instead

xref.hpp

  • [1] output argument moved to beginning of argument list
  • [2] input argument changed from pointer to reference
original name [1] [2]
calc_switch_cases * *
create_switch_table class="table table-sm" *
create_switch_xrefs *