C++ SDK Porting Guide from IDA 8.x to 9.0
IDA 9.0 API Changes and porting guide
Introduction
The largest change is the removal of two headers:
struct.hpp
enum.hpp
The functionalities for working with user-defined types are now available in typeinf.hpp
(tinfo_t
class).
struct.hpp
Removed classes
class member_t;
class struc_t;
struc_t is replaced by the notion of "user-defined type" (udt_type_data_t
class) and member_t by dt member (udm_t
class).
Removed APIs
get_struc_qty()
Rough equivalent isget_ordinal_limit()
orget_ordinal_count()
but note that it also includes enums and typedefs.get_first_struc_idx()
get_last_struc_idx()
get_prev_struc_idx()
get_next_struc_idx()
Local type ordinals always start at 1 (0 is invalid ordinal) and go up to get_ordinal_limit()
.
get_struc_idx(tid_t id)
get_struc_by_idx(uval_t idx)
enum.hpp
Enumerations are now manipulated via:
tinfo_t
classenum_type_data_t
classedm_t
class. intypeinf.hpp
Removed APIs
get_enum_qty(void)
getn_enum(size_t idx)
get_enum_idx(enum_t id)
get_enum(const char *name)
is_bf(enum_t id)
is_enum_hidden(enum_t id)
set_enum_hidden(enum_t id, bool hidden)
is_enum_fromtil(enum_t id)
set_enum_fromtil(enum_t id, bool fromtil)
is_ghost_enum(enum_t id)
set_enum_ghost(enum_t id, bool ghost)
get_enum_name(qstring *out, enum_t id)
get_enum_name2(qstring *out, enum_t id, int flags=0)
get_enum_name(tid_t id, int flags=0)
get_enum_width(enum_t id)
set_enum_width(enum_t id, int width)
get_enum_cmt(qstring *buf, enum_t id, bool repeatable)
get_enum_size(enum_t id)
get_enum_flag(enum_t id)
get_enum_member_by_name(const char *name)
get_enum_member_value(const_t id)
get_enum_member_enum(const_t id)
get_enum_member_bmask(const_t id)
get_enum_member(enum_t id, uval_t value, int serial, bmask_t mask)
get_first_bmask(enum_t enum_id)
get_last_bmask(enum_t enum_id)
get_next_bmask(enum_t enum_id, bmask_t bmask\)
get_prev_bmask(enum_t enum_id, bmask_t bmask)
get_first_enum_member(enum_t id, bmask_t bmask=DEFMASK)
get_last_enum_member(enum_t id, bmask_t bmask=DEFMASK)
get_next_enum_member(enum_t id, uval_t value, bmask_t bmask=DEFMASK)
get_prev_enum_member(enum_t id, uval_t value, bmask_t bmask=DEFMASK)
get_enum_member_name(qstring *out, const_t id)
get_enum_member_cmt(qstring *buf, const_t id, bool repeatable)
get_first_serial_enum_member(uchar *out_serial, enum_t id, uval_t value, bmask_t bmask)
get_last_serial_enum_member(uchar *out_serial, enum_t id, uval_t value, bmask_t bmask)
get_next_serial_enum_member(uchar *in_out_serial, const_t first_cid)
get_prev_serial_enum_member(uchar *in_out_serial, const_t first_cid)
for_all_enum_members(enum_t id, enum_member_visitor_t &cv)
ida_export get_enum_member_serial(const_t cid)
get_enum_type_ordinal(enum_t id)
set_enum_type_ordinal(enum_t id, int32 ord)
add_enum(size_t idx, const char *name, flags64_t flag)
del_enum(enum_t id)
set_enum_idx(enum_t id, size_t idx)
set_enum_bf(enum_t id, bool bf)
set_enum_name(enum_t id, const char *name)
set_enum_cmt(enum_t id, const char *cmt, bool repeatable)
set_enum_flag(enum_t id, flags64_t flag)
add_enum_member(enum_t id, const char *name, uval_t value, bmask_t bmask=DEFMASK)
del_enum_member(enum_t id, uval_t value, uchar serial, bmask_t bmask)
set_enum_member_name(const_t id, const char *name)
set_enum_member_cmt(const_t id, const char *cmt, bool repeatable)
is_one_bit_mask(bmask_t mask)
set_bmask_name(enum_t id, bmask_t bmask, const char *name)
get_bmask_name(qstring *out, enum_t id, bmask_t bmask)
set_bmask_cmt(enum_t id, bmask_t bmask, const char *cmt, bool repeatable)
get_bmask_cmt(qstring *buf, enum_t id, bmask_t bmask, bool repeatable)
bytes.hpp
Added APIs
idaman ea_t ida_export find_binary(ea_t startea, ea_t endea, const char *ubinstr, int radix, int sflag, int strlits_encoding=0)
Modified APIs
idaman bool ida_export get_octet2(uchar *out, octet_generator_t *ogen)
idaman bool ida_export get_octet(uchar *out, octet_generator_t *ogen)
idaman bool ida_export op_enum(ea_t ea, int n, enum_t id, uchar serial=0)
idaman bool ida_export op_enum(ea_t ea, int n, tid_t id, uchar serial=0)
idaman enum_t ida_export get_enum_id(uchar *serial, ea_t ea, int n)
idaman tid_t ida_export get_enum_id(uchar *serial, ea_t ea, int n)
idaman ea_t ida_export bin_search3(size_t *out_matched_idx, ea_t start_ea, ea_t end_ea, const compiled_binpat_vec_t &data, int flags)
idaman ea_t ida_export bin_search(ea_t start_ea, ea_t end_ea, const compiled_binpat_vec_t &data, int flags, size_t *out_matched_idx=nullptr)
Removed APIs
bin_search2(ea_t start_ea, ea_t end_ea, const compiled_binpat_vec_t &data, int flags)
bin_search(ea_t, ea_t, const uchar *, const uchar *, size_t, int, int)
get_8bit(ea_t *ea, uint32 *v, int *nbit)
get_octet(ea_t *ea, uint64 *v, int *nbit)
free_chunk(ea_t bottom, asize_t size, int32 step)
dirtree.hpp
Modified APIs
idaman bool ida_export dirtree_get_abspath_by_cursor2(qstring *out, const dirtree_impl_t *d, const dirtree_cursor_t &cursor, uint32 name_flags)
idaman bool ida_export dirtree_get_abspath_by_cursor(qstring *out, const dirtree_impl_t *d, const dirtree_cursor_t &cursor, uint32 name_flags)
diskio.hpp
Modified APIs
idaman THREAD_SAFE int ida_export enumerate_files2(char *answer, size_t answer_size, const char *path, const char *fname, file_enumerator_t &fv)
idaman THREAD_SAFE int ida_export enumerate_files(char *answer, size_t answer_size, const char *path, const char *fname, file_enumerator_t &fv)
Removed APIs
ecreate(const char *file)
eclose(FILE *fp)
eread(FILE *fp, void *buf, size_t size)
ewrite(FILE *fp, const void *buf, size_t size)
eseek(FILE *fp, qoff64_t pos)
enumerate_files(char *answer, size_t answer_size, const char *path, const char *fname, int (idaapi*func)(const char *file,void *ud), void *ud=nullptr)
err.h
Removed APIs
qerrcode(int new_code=-1)
expr.hpp
Modified APIs
bool extlang_t::(idaapi *compile_file)(const char *file, qstring *errbuf)
bool extlang_t::(idaapi *compile_file)(const char *file, const char *requested_namespace, qstring *errbuf)
frame.hpp
Added APIs
idaman bool ida_export add_frame_member(const func_t *pfn, const char *name, uval_t offset, const tinfo_t &tif, const struct value_repr_t *repr=nullptr, uint etf_flags=0)
THREAD_SAFE bool is_anonymous_member_name(const char *name)
THREAD_SAFE bool is_dummy_member_name(const char *name)
idaman bool ida_export is_special_frame_member(tid_t tid)
idaman bool ida_export set_frame_member_type(const func_t *pfn, uval_t offset, const tinfo_t &tif, const struct value_repr_t *repr=nullptr, uint etf_flags=0)
idaman bool ida_export delete_frame_members(const func_t *pfn, uval_t start_offset, uval_t end_offset)
idaman sval_t ida_export calc_frame_offset(func_t *pfn, sval_t off, const insn_t *insn = nullptr, const op_t *op = nullptr)
Modified PIs
idaman struc_t *ida_export get_frame(const func_t *pfn)
idaman bool ida_export get_func_frame(tinfo_t *out, const func_t *pfn)
idaman bool ida_export define_stkvar(func_t *pfn, const char *name, sval_t off, flags64_t flags, const opinfo_t *ti, asize_t nbytes)
idaman bool ida_export define_stkvar(func_t *pfn, const char *name, sval_t off, const tinfo_t &tif, const struct value_repr_t *repr=nullptr)
idaman void ida_export build_stkvar_xrefs(xreflist_t *out, func_t *pfn, const member_t *mptr)
idaman void ida_export build_stkvar_xrefs(xreflist_t *out, func_t *pfn, uval_t start_offset, uval_t end_offset)
Removed APIs
get_frame_member_by_id(qstring *out_mname, struc_t **out_fptr, tid_t mid)
get_stkvar(sval_t *actval, const insn_t &insn, const op_t &x, sval_t v)
See get_stkvar in ida_typeinf.tinfo_tget_min_spd_ea(func_t *pfn)
delete_unreferenced_stkvars(func_t *pfn)
delete_wrong_stkvar_ops(func_t *pfn)
funcs.hpp
Added APIs
bool func_item_iterator_t::set_ea(ea_t _ea)
Removed APIs
save_signatures(void)
invalidate_sp_analysis(func_t *pfn)
invalidate_sp_analysis(ea_t ea)
gdl.hpp
Added classes/structures
struct edge_t
class node_ordering_t
hexrays.hpp
Added classes/structures
class control_graph_t
class edge_mapper_t
class node_bitset_t
class array_of_node_bitset_t
struct ctry_t
struct cthrow_t
struct catchexpr_t
struct ccatch_t
struct cblock_pos_t
Added APIs
uvlr_t max_vlr_value(int size)
uvlr_t min_vlr_svalue(int size)
uvlr_t max_vlr_svalue(int size)
bool is_unsigned_cmpop(cmpop_t cmpop)
bool is_signed_cmpop(cmpop_t cmpop)
bool is_cmpop_with_eq(cmpop_t cmpop)
bool is_cmpop_without_eq(cmpop_t cmpop)
lvar_t
bool was_scattered_arg() const
void set_scattered_arg()
void clr_scattered_arg()
lvars_t
int find_input_reg(int reg, int _size=1)
simple_graph_t
virtual bool ignore_edge(int /*src*/, int /*dst*/ ) const
void hexapi compute_dominators(array_of_node_bitset_t &domin, bool post=false) const
void hexapi compute_immediate_dominators(const array_of_node_bitset_t &domin, intvec_t &idomin, bool post=false) const
int hexapi depth_first_preorder(node_ordering_t *pre) const
int hexapi depth_first_postorder(node_ordering_t *post) const
void depth_first_postorder(node_ordering_t *post, edge_mapper_t *et) const
void depth_first_postorder_for_all_entries(node_ordering_t *post) const
intvec_t find_dead_nodes() const
void find_reaching_nodes(int n, node_bitset_t &reaching) const
bool path_exists(int m, int n) const
bool path_back(const array_of_node_bitset_t &domin, int m, int n) const
bool path_back(const edge_mapper_t &et, int m, int n) const
iterator begin() const
iterator end()
int front()
void inc(iterator &p, int n=1) const
virtual int hexapi goup(int node) const
fnumber_t
int calc_max_exp() const
bool is_nan() const
minsn_t
bool was_unpaired() const
mba_t
mblock_t *hexapi split_block(mblock_t *blk, minsn_t *start_insn)
merror_t hexapi inline_func(codegen_t &cdg, int blknum, mba_ranges_t &ranges, int decomp_flags=0, int inline_flags=0)
const stkpnt_t *hexapi locate_stkpnt(ea_t ea) const
codegen_t
void hexapi clear()
vd_failure_t
virtual const char *what() const noexcept override
Modified APIs
void hexapi save_user_labels2(ea_t func_ea, const user_labels_t *user_labels, const cfunc_t *func=nullptr)
void hexapi save_user_labels(ea_t func_ea, const user_labels_t *user_labels, const cfunc_t *func=nullptr)
user_labels_t *hexapi restore_user_labels2(ea_t func_ea, const cfunc_t *func=nullptr)
user_labels_t *hexapi restore_user_labels(ea_t func_ea, const cfunc_t *func=nullptr)
stkvar_ref_t
member_t *hexapi get_stkvar(uval_t *p_off=nullptr) const
ssize_t hexapi get_stkvar(udm_t *udm=nullptr, uval_t *p_off=nullptr) const
mop_t
member_t *get_stkvar(uval_t *p_off) const
ssize_t get_stkvar(udm_t *udm=nullptr, uval_t *p_off=nullptr) const
mba_t
member_t *get_stkvar(sval_t vd_stkoff, uval_t *poff) const
ssize_t get_stkvar(udm_t *udm, sval_t vd_stkoff, uval_t *poff=nullptr) const
const mblock_t *get_mblock(int n) const
const mblock_t *get_mblock(uint n) const
mblock_t *get_mblock(int n)
mblock_t *get_mblock(uint n)
bool hexapi combine_blocks()
bool hexapi merge_blocks()
valrng_t
bool cvt_to_cmp(cmpop_t *cmp, uvlr_t *val, bool strict) const
bool valrng_t::cvt_to_cmp(cmpop_t *cmp, uvlr_t *val) const
Removed APIs:
bool hexapi get_member_type(const member_t *mptr, tinfo_t *type)
bool hexapi checkout_hexrays_license(bool silent)
bool get_member_type(const member_t *mptr, tinfo_t *type)
valrng_t
static uvlr_t max_value(int size_)
static uvlr_t min_svalue(int size_)
static uvlr_t max_svalue(int size_)
ctree_item_t
member_t *hexapi get_memptr(struc_t **p_sptr=nullptr) const
ctree_parentee_t
cblock_t *get_block()
vdui_t
bool hexapi set_strmem_type(struc_t *sptr, member_t *mptr)
bool hexapi rename_strmem(struc_t *sptr, member_t *mptr)
graph.hpp
Removed classes/structures
Modified classes/structures
class abstract_graph_t
class drawable_graph_t
class mutable_graph_t
class interactive_graph_t
Modified APIs
mutable_graph_t *idaapi create_mutable_graph(uval_t id)
interactive_graph_t *idaapi create_interactive_graph(uval_t id)
mutable_graph_t *idaapi create_disasm_graph(ea_t ea)
interactive_graph_t *idaapi create_disasm_graph(ea_t ea)
mutable_graph_t *idaapi create_disasm_graph(const rangevec_t &ranges)
interactive_graph_t *idaapi create_disasm_graph(const rangevec_t &ranges)
mutable_graph_t *idaapi get_viewer_graph(graph_viewer_t *gv)
interactive_graph_t *idaapi get_viewer_graph(graph_viewer_t *gv)
void idaapi set_viewer_graph(graph_viewer_t *gv, mutable_graph_t *g)
void idaapi set_viewer_graph(graph_viewer_t *gv, interactive_graph_t *g)
void idaapi delete_mutable_graph(mutable_graph_t *g)
void idaapi delete_interactive_graph(interactive_graph_t *g)
void idaapi mutable_graph_t::del_custom_layout(void)
void idaapi interactive_graph_t::del_custom_layout(void)
void idaapi mutable_graph_t::set_custom_layout(void) const
void idaapi interactive_graph_t::set_custom_layout(void) const
void idaapi mutable_graph_t::set_graph_groups(void) const
void idaapi interactive_graph_t::set_graph_groups(void) const
void idaapi mutable_graph_t::clear(void)
void idaapi interactive_graph_t::clear(void)
bool idaapi mutable_graph_t::create_digraph_layout(void)
bool idaapi interactive_graph_t::create_digraph_layout(void)
bool idaapi abstract_graph_t::create_tree_layout(void)
bool idaapi drawable_graph_t::create_tree_layout(void)
bool idaapi abstract_graph_t::create_circle_layout(point_t c, int radius)
bool idaapi drawable_graph_t::create_circle_layout(point_t c, int radius)
int idaapi mutable_graph_t::get_node_representative(int node)
int idaapi interactive_graph_t::get_node_representative(int node)
int idaapi mutable_graph_t::_find_subgraph_node(int gr, int n) const
int idaapi interactive_graph_t::_find_subgraph_node(int gr, int n) const
int idaapi mutable_graph_t::create_group(const intvec_t &_nodes)
int idaapi interactive_graph_t::create_group(const intvec_t &_nodes)
bool idaapi mutable_graph_t::get_custom_layout(void)
bool idaapi interactive_graph_t::get_custom_layout(void)
bool idaapi mutable_graph_t::get_graph_groups(void)
bool idaapi interactive_graph_t::get_graph_groups(void)
bool idaapi mutable_graph_t::empty(void) const
bool idaapi interactive_graph_t::empty(void) const
bool idaapi mutable_graph_t::is_visible_node(int node) const
bool idaapi interactive_graph_t::is_visible_node(int node) const
bool idaapi mutable_graph_t::delete_group(int group)
bool idaapi interactive_graph_t::delete_group(int group)
bool idaapi mutable_graph_t::change_group_visibility(int gr, bool exp)
bool idaapi interactive_graph_t::change_group_visibility(int gr, bool exp)
bool idaapi mutable_graph_t::set_edge(edge_t e, const edge_info_t *ei)
bool idaapi interactive_graph_t::set_edge(edge_t e, const edge_info_t *ei)
int idaapi mutable_graph_t::node_qty(void) const
int idaapi interactive_graph_t::node_qty(void) const
rect_t &idaapi mutable_graph_t::nrect(int n)
rect_t &idaapi interactive_graph_t::nrect(int n)
idalib.hpp
The new header for the IDA library
Added APIs
idaman int ida_export init_library(int argc = 0, char *argv[] = nullptr)
idaman int ida_export open_database(const char *file_path, bool run_auto)
idaman void ida_export close_database(bool save)
idd.hpp
Added APIs
idaman int ida_export cpu2ieee(fpvalue_t *ieee_out, const void *cpu_fpval, int size)
idaman int ida_export ieee2cpu(void *cpu_fpval, const fpvalue_t &ieee_out, int size)
idp.hpp
Removed APIs:
processor_t::has_realcvt(void) const
Modified APIs:
static ssize_t processor_t::gen_stkvar_def(outctx_t &ctx, const class member_t *mptr, sval_t v)
static ssize_t processor_t::gen_stkvar_def(outctx_t &ctx, const struct udm_t *mptr, sval_t v, tid_t tid)
Added APIs
procmod_t
const op_t *procmod_t::make_op_reg(op_t *op, int reg, int8 dtype = -1) const
const op_t *procmod_t::make_op_imm(op_t *op, uval_t val, int8 dtype = -1) const
const op_t *procmod_t::make_op_displ(op_t *op, int base_reg, uval_t displ, int8 dtype = -1) const
const op_t *procmod_t::make_op_phrase(op_t *op, int base_reg, int index_reg, int8 dtype = -1) const
See also IDB events for a table providing a list a event replacement and removal.
kernwin.hpp
Removed APIs
open_enums_window(tid_t const_id=BADADDR)
open_structs_window(tid_t id=BADADDR, uval_t offset=0)
choose_struc(const char *title)
choose_enum_by_value(const char *title, enum_t default_id, uint64 value, int nbytes, uchar *serial)
Removed classes/structures
class enumplace_t
class structplace_t
Added APIs
bool is_ida_library(char *path, size_t pathsize, void** handle)
tagged_line_section_t
const tagged_line_section_t::tagged_line_section_t *nearest_before(const tagged_line_section_t &range, cpidx_t start, color_t tag=0) const
const tagged_line_section_t::tagged_line_section_t *nearest_after(const tagged_line_section_t &range, cpidx_t start, color_t tag=0) const
chooser_base_t
bool chooser_base_t::has_widget_lifecycle() const
Modified APIs
ea_t choose_stkvar_xref(func_t *pfn, member_t *mptr)
ea_t choose_stkvar_xref(func_t *pfn, tid_t srkvar_tid)
bool tagged_line_section_t::substr(qstring *out, const qstring &in) const
bool tagged_line_section_t::substr(qstring *out,,const qstring &in, const tagged_line_section_t *end = nullptr) const
lex.hpp
Modified APIs
idaman lexer_t *ida_export create_lexer(const char *const *keys, size_t size, void *ud=nullptr)
idaman lexer_t *ida_export create_lexer(const char *const *keys, size_t size, void *ud=nullptr, uint32 macro_flags=0)
lines.hpp
Removed APIs
set_user_defined_prefix(size_t width, void (idaapi *get_user_defined_prefix)(qstring *buf, ea_t ea, int lnnum, int indent, const char *line))
Modified APIs
idaman void ida_export update_extra_cmt(ea_t ea, int what, const char *str)
idaman bool ida_export update_extra_cmt(ea_t ea, int what, const char *str)
idaman void ida_export del_extra_cmt(ea_t ea, int what)
idaman bool ida_export del_extra_cmt(ea_t ea, int what)
nalt.hpp
Modified APIs
idaman int ida_export validate_idb_names2(bool do_repair)
idaman int ida_export validate_idb_names(bool do_repair)
parsejson.hpp
Added APIs
jvalue_t
void jvalue_t::set_str(const char *s)
jobj_t
void jobj_t::put(const char *key, const jobj_t &value)
pro.h
Removed APIs
unpack_memory(void *buf, size_t size, const uchar **pptr, const uchar *end)
Added APIs
idaman THREAD_SAFE bool ida_export get_login_name(qstring *out)
idaman void *ida_export pipe_process(qhandle_t *read_handle, qhandle_t *write_handle, launch_process_params_t *lpp, qstring *errbuf=nullptr)
bytevec_t
qstring bytevec_t::tohex(bool upper_case=true) const
qlist
void qlist::splice(iterator pos, qlist &other, iterator first, iterator last)
Added classes/structures
struct memory_serializer_t
regex.hpp
Removed APIs
regcomp(struct regex_t *preg, const char *pattern, int cflags)
regerror(int errcode, const struct regex_t *preg, char *errbuf, size_t errbuf_size)
regexec(const struct regex_t *preg, const char *str, size_t nmatch, struct regmatch_t pmatch[], int eflags)
regfree(struct regex_t *preg)
regfinder.hpp
Modified APIs
void ida_export reg_finder_invalidate_cache(reg_finder_t *_this, ea_t ea)
void ida_export reg_finder_invalidate_cache(reg_finder_t *_this, ea_t to, ea_t from)
bool ida_export reg_finder_calc_op_addr(reg_finder_t *_this, reg_value_info_t *addr, const op_t *memop, const insn_t *insn, ea_t ea, ea_t ds)
bool ida_export reg_finder_calc_op_addr(reg_finder_t *_this, reg_value_info_t *addr, const op_t *memop, const insn_t *insn, ea_t ea, ea_t ds, int max_depth)
bool ida_export reg_finder_may_modify_stkvars(const reg_finder_t *_this, reg_finder_op_t op, const insn_t *insn)
bool ida_export reg_finder_may_modify_stkvar(const reg_finder_t *_this, reg_finder_op_t op, const insn_t *insn)
void idaapi invalidate_regfinder_cache(ea_t ea = BADADDR)
void idaapi invalidate_regfinder_cache(ea_t to = BADADDR, ea_t from = BADADDR)
Removed APIs
reg_finder_op_make_rfop(func_t *pfn, const insn_t &insn, const op_t &op)
Added APIs
void reg_value_info_t::movt(const reg_value_info_t &r, const insn_t &insn)
static int reg_finder_op_t::get_op_width(const op_t &op)
static reg_finder_op_t reg_finder_op_t::make_stkoff(sval_t stkoff, int width)
registry.hpp
Removed APIs
reg_load(void)
reg_flush(void)
search.hpp
Removed APIs
user2bin(uchar *, uchar *, ea_t, const char *, int, bool)
find_binary(ea_t, ea_t, const char *, int, int)
typeinf.hpp
Removed APIs
set_numbered_type(til_t *ti, uint32 ordinal, int ntf_flags, const char *name, const type_t *type, const p_list *fields=nullptr, const char *cmt=nullptr, const p_list *fldcmts=nullptr, const sclass_t *sclass=nullptr)
get_ordinal_from_idb_type(const char *name, const type_t *type)
is_autosync(const char *name, const type_t *type)
is_autosync(const char *name, const tinfo_t &tif)
import_type(const til_t *til, int idx, const char *name, int flags=0)
get_udm_tid(const udm_t *udm, const char *udt_name)
Modified APIs
bool ida_export create_tinfo2(tinfo_t *_this, type_t bt, type_t bt2, void *ptr)
bool ida_export create_tinfo(tinfo_t *_this, type_t bt, type_t bt2, void *ptr)
int ida_export verify_tinfo(uint32 typid)
int ida_export verify_tinfo(typid_t typid)
bool ida_export get_tinfo_details2(uint32 typid, type_t bt2, void *buf)
bool ida_export get_tinfo_details(typid_t typid, type_t bt2, void *buf)
size_t ida_export get_tinfo_size(uint32 *p_effalign, uint32 typid, int gts_code)
size_t ida_export get_tinfo_size(uint32 *p_effalign, typid_t typid, int gts_code)
size_t ida_export get_tinfo_pdata(void *outptr, uint32 typid, int what)
size_t ida_export get_tinfo_pdata(void *outptr, typid_t typid, int what)
size_t ida_export get_tinfo_property(uint32 typid, int gta_prop)
size_t ida_export get_tinfo_property(typid_t typid, int gta_prop)
size_t ida_export get_tinfo_property4(uint32 typid, int gta_prop, size_t p1, size_t p2, size_t p3, size_t p4)
size_t ida_export get_tinfo_property4(typid_t typid, int gta_prop, size_t p1, size_t p2, size_t p3, size_t p4)
bool ida_export deserialize_tinfo2(tinfo_t *tif, const til_t *til, const type_t **ptype, const p_list **pfields, const p_list **pfldcmts, const char *cmt)
bool ida_export deserialize_tinfo(tinfo_t *tif, const til_t *til, const type_t **ptype, const p_list **pfields, const p_list **pfldcmts, const char *cmt)
int ida_export find_tinfo_udt_member(udm_t *udm, uint32 typid, int strmem_flags)
int ida_export find_tinfo_udt_member(udm_t *udm, typid_t typid, int strmem_flags)
bool ida_export compare_tinfo(uint32 t1, uint32 t2, int tcflags)
bool ida_export compare_tinfo(typid_t t1, typid_t t2, int tcflags)
int ida_export lexcompare_tinfo(uint32 t1, uint32 t2, int)
int ida_export lexcompare_tinfo(typid_t t1, typid_t t2, int)
uint64 ida_export read_tinfo_bitfield_value(uint32 typid, uint64 v, int bitoff)
uint64 ida_export read_tinfo_bitfield_value(typid_t typid, uint64 v, int bitoff)
uint64 ida_export write_tinfo_bitfield_value(uint32 typid, uint64 dst, uint64 v, int bitoff)
uint64 ida_export write_tinfo_bitfield_value(typid_t typid, uint64 dst, uint64 v, int bitoff)
bool ida_export get_tinfo_attr(uint32 typid, const qstring &key, bytevec_t *bv, bool all_attrs)
bool ida_export get_tinfo_attr(typid_t typid, const qstring &key, bytevec_t *bv, bool all_attrs)
bool ida_export get_tinfo_attrs(uint32 typid, type_attrs_t *tav, bool include_ref_attrs)
bool ida_export get_tinfo_attrs(typid_t typid, type_attrs_t *tav, bool include_ref_attrs)
bool ida_export append_tinfo_covered(rangeset_t *out, uint32 typid, uint64 offset)
bool ida_export append_tinfo_covered(rangeset_t *out, typid_t typid, uint64 offset)
bool ida_export calc_tinfo_gaps(rangeset_t *out, uint32 typid)
bool ida_export calc_tinfo_gaps(rangeset_t *out, typid_t typid)
bool ida_export name_requires_qualifier(qstring *out, uint32 typid, const char *name, uint64 offset)
bool ida_export name_requires_qualifier(qstring *out, typid_t typid, const char *name, uint64 offset)
void ida_export tinfo_get_innermost_udm(tinfo_t *itif, const tinfo_t *tif, uint64 offset, size_t *udm_idx, uint64 *bit_offset)
void ida_export tinfo_get_innermost_udm(tinfo_t *itif, const tinfo_t *tif, uint64 offset, size_t *udm_idx, uint64 *bit_offset, bool return_member_type)
tinfo_code_t tinfo_t::find_edm(edm_t *edm, uint64 value, bmask64_t bmask=DEFMASK64, uchar serial=0) const
ssize_t tinfo_t::find_edm(edm_t *edm, uint64 value, bmask64_t bmask=DEFMASK64, uchar serial=0) const
tinfo_code_t tinfo_t::find_edm(edm_t *edm, const char *name) const
ssize_t tinfo_t::find_edm(edm_t *edm, const char *name) const
bool tinfo_t::get_type_by_edm_name(const char *mname, til_t *til=nullptr)
ssize_t tinfo_t::get_edm_by_name(const char *mname, const til_t *til=nullptr)
void ida_export gen_use_arg_tinfos2(struct argtinfo_helper_t *_this, ea_t caller, func_type_data_t *fti, funcargvec_t *rargs)
void ida_export gen_use_arg_tinfos(struct argtinfo_helper_t *_this, ea_t caller, func_type_data_t *fti, funcargvec_t *rargs)
Added classes/structures
struct udm_visitor_t
Added APIs
bool ida_export detach_tinfo_t(tinfo_t *_this)
bool stroff_as_size(int plen, const tinfo_t &tif, asize_t value)
int ida_export visit_stroff_udms(udm_visitor_t &sfv, const tid_t *path, int plen, adiff_t *disp, bool appzero)
bool is_one_bit_mask(uval_t mask)
til_t
til_t *til_t::find_base(const char *n)
callregs_t
void callregs_t::set_registers(reg_kind_t kind, int first_reg, int last_reg)
tinfo_t
bool tinfo_t::get_named_type(const char *name, type_t decl_type=BTF_TYPEDEF, bool resolve=true, bool try_ordinal=true)
bool tinfo_t::get_numbered_type(uint32 ordinal, type_t decl_type=BTF_TYPEDEF, bool resolve=true)
bool tinfo_t::detach()
bool tinfo_t::is_punknown()
int tinfo_t::find_udm(uint64 offset, int strmem_flags=0) const
int tinfo_t::find_udm(const char *name, int strmem_flags=0) const
size_t tinfo_t::get_enum_nmembers() const
bool tinfo_t::is_empty_enum() const
tinfo_code_t tinfo_t::get_enum_repr(value_repr_t *repr) const
int tinfo_t::get_enum_width() const
uint64 tinfo_t::calc_enum_mask() const
tid_t tnfo_t::get_edm_tid(size_t idx) const
tinfo_t tinfo_t::get_innermost_member_type(uint64 bitoffset, uint64 *out_bitoffset=nullptr) const
bool tinfo_t::is_udm_by_til(size_t idx) const
tinfo_code_t tinfo_t::set_udm_by_til(size_t idx, bool on=true, uint etf_flags=0)
tinfo_code_t tinfo_t::set_fixed_struct(bool on=true)
tinfo_code_t tinfo_t::set_struct_size(size_t new_size)
bool tinfo_t::is_fixed_struct() const
bool tinfo_t::get_func_frame(const func_t *pfn)
bool tinfo_t::is_frame() const
ea_t tinfo_t::get_frame_func() const
ssize_t tinfo_t::get_stkvar(sval_t *actval, const insn_t &insn, const op_t *x, sval_t v)
tinfo_code_t tinfo_t::set_enum_radix(int radix, bool sign, uint etf_flags=0)
tinfo_code_t tinfo_t::set_funcarg_type(size_t index, const tinfo_t &tif, uint etf_flags=0)
tinfo_code_t tinfo_t::set_func_rettype(const tinfo_t &tif, uint etf_flags=0)
tinfo_code_t tinfo_t::del_funcargs(size_t idx1, size_t idx2, uint etf_flags=0)
tinfo_code_t tinfo_t::del_funcarg(size_t idx, uint etf_flags=0)
tinfo_code_t tinfo_t::add_funcarg(const funcarg_t &farg, uint etf_flags=0, ssize_t idx=-1)
tinfo_code_t tinfo_t::set_func_cc(cm_t cc, uint etf_flags=0)
tinfo_code_t tinfo_t::set_funcarg_loc(size_t index, const argloc_t &argloc, uint etf_flags=0)
tinfo_code_t tinfo_t::et_func_retloc(const argloc_t &argloc, uint etf_flags=0)
func_type_data_t
ssize_t func_type_data_t::find_argument(const char *name, size_t from=0, size_t to=size_t(-1)) const
enum_type_data_t
tinfo_code_t enum_type_data_t::get_value_repr(value_repr_t *repr) const
uchar enum_type_data_t::get_serial(size_t index) const
uchar enum_type_data_t::get_max_serial(uint64 value) const
udm_t
bool udm_t::is_retaddr() const
bool udm_t::is_savregs() const
bool udm_t::is_special_member() const
bool udm_t::is_by_til() const
void udm_t::set_retaddr(bool on=true)
void udm_t::set_savregs(bool on=true)
void udm_t::set_by_til(bool on=true)
udt_type_data_t
bool udt_type_data_t::is_fixed() const
void udt_type_data_t::set_fixed(bool on=true)
IDB events
The following table provide a list of IDB events that have been replaced or, in some cases, removed.
truc_created
local_types_changed
deleting_struc
none
struc_deleted
local_types_changed
changing_struc_align
none
struc_align_changed
local_types_changed
renaming_struc
none
struc_renamed
local_types_changed
expanding_struc
none
struc_expanded
lt_udt_expanded, frame_expanded, local_types_changed
struc_member_created
lt_udm_created, frame_udm_created, local_types_changed
deleting_struc_member
none
struc_member_deleted
lt_udm_deleted, frame_udm_deleted, local_types_changed
renaming_struc_member
none
struc_member_renamed
lt_udm_renamed, frame_udm_renamed, local_types_changed
changing_struc_member
none
struc_member_changed
lt_udm_changed, frame_udm_changed, local_types_changed
changing_struc_cmt
none
struc_cmt_changed
local_types_changed
enum_created
local_types_changed
deleting_enum
none
enum_deleted
local_types_changed
renaming_enum
none
enum_renamed
local_types_changed
changing_enum_bf
local_types_changed
enum_bf_changed
local_types_changed
changing_enum_cmt
none
enum_cmt_changed
local_types_changed
enum_member_created
local_types_changed
deleting_enum_member
none
enum_member_deleted
local_types_changed
enum_width_changed
local_types_changed
enum_flag_changed
local_types_changed
enum_ordinal_changed
none
Last updated