IDA 9.0 IDAPython changes and porting guide
How to use this Porting Guide? This guide provides a comprehensive list of all changes in IDAPython API between IDA 8.4 and 9.0. Here’s how you can make the most of it:
- Explore by module: navigate directly to a specific module and review the changes affecting it
- Jump to alternative examples demonstrating how to port removed functions
- Check how-to examples that demonstrate the usage of new/udpated APIs
- Introduction
- ida_struct
- ida_enum
- ida_typeinf
- ida_frame
- ida_bytes
- idc
- ida_dirtree
- ida_diskio
- ida_fpro
- ida_funcs
- ida_gdl
- ida_graph
- ida_hexrays
- ida_ida
- ida_idaapi
- ida_idd
- ida_idp
- ida_ieee
- ida_kernwin
- ida_lines
- ida_moved
- ida_nalt
- ida_netnode
- ida_pro
- Removed functions
- Added classes
- plugin_options_t
- uchar_pointer
- ushort_pointer
- uint_pointer
- sint8_pointer
- int8_pointer
- uint8_pointer
- int16_pointer
- uint16_pointer
- int32_pointer
- uint32_pointer
- int64_pointer
- uint64_pointer
- ssize_pointer
- bool_pointer
- short_pointer
- char_pointer
- sel_pointer
- asize_pointer
- adiff_pointer
- uval_pointer
- ea32_pointer
- ea64_pointer
- flags_pointer
- flags64_pointer
- tid_pointer
- Added functions
- ida_regfinder
- ida_registry
- ida_search
- ida_ua
- idautils
- IDB events
- Type information error codes
- Alternative examples
- How to examples
This guide provides information about what has been changed in the IDAPython API between IDA 8.4 and 9.0.
The largest change is due to the removal of two modules:
ida_structida_enum
For years now, those 2 modules have been superseded by the ida_typeinf module, which offers similar functionality.
In case you are not familiar with ida_typeinf's main concepts, we recommend having a look at them first.
ida_structstructures were accessed mostly through their index (or ID), whileida_typeinfadopts another approach using type names (or ordinals). Consequently, the notion of "structure index" bears less importance, and doesn't have a direct alternative.- many
ida_struct.get_struc_*operations were accepting atid_t. While the notion oftid_tis still present in IDA 9.0, it is not part of identifying a type anymore (a type is now identified either by its name, or its ordinal). The notion oftid_tis mostly used to "bind" types to data & functions in the IDB. For example, callingida_nalt.get_strid(address)will return you such atid_t. From atid_t, you can load the correspondingtinfo_tobject by usingtinfo_t(tid=id).
The table below provides alternatives to the functions that have been removed in IDA 9.0.
| 8.4 | 9.0 |
|---|---|
add_struc |
tinfo_t.create_udt |
add_struc_member |
tinfo_t.add_udm |
del_struc |
del_numbered_type, del_named_type |
del_struc_member |
tinfo_t.del_udm |
del_struc_members |
see example |
expand_struc |
tinfo_t.expand_udt |
get_best_fit_member |
udt_type_data_t.get_best_fit_member |
get_first_struc_idx |
til_t.numbered_types (see notes) |
get_innermost_member |
tinfo_t.get_innermost_udm |
get_last_struc_idx |
see notes |
get_max_offset |
tinfo_t.get_size (structures), or tinfo_t.get_udt_nmembers (unions) |
get_member |
tinfo_t.get_udm / tinfo_t.get_udm_by_offset |
get_member_by_fullname |
get_udm_by_fullname |
get_member_by_id |
tinfo_t.get_udm_by_tid |
get_member_by_name |
tinfo_t.get_udm |
get_member_cmt |
tinfo_t.get_udm + udm_t.cmt |
get_member_fullname |
get_tif_name |
get_member_id |
tinfo_t(tid=...) + tinfo_t.get_udm_tid |
get_member_name |
tinfo_t(tid=...) + tinfo_t.get_udm + udm_t.name |
get_member_size |
tinfo_t(tid=...) + tinfo_t.get_udm + udm_t.size |
get_member_struc |
get_udm_by_fullname |
get_member_tinfo |
udm_t.type |
get_next_member_idx |
see notes |
get_next_struc_idx |
see notes |
get_or_guess_member_tinfo |
|
get_prev_member_idx |
see notes |
get_prev_struc_idx |
see notes |
get_sptr |
see example |
get_struc |
tinfo_t(tid=...) |
get_struc_by_idx |
see notes |
get_struc_cmt |
tinfo_t.get_type_cmt |
get_struc_first_offset |
|
get_struc_id |
get_named_type_tid |
get_struc_idx |
see notes |
get_struc_last_offset |
tinfo_t.get_udt_details + udm_t.offset |
get_struc_name |
get_tid_name |
get_struc_next_offset |
|
get_struc_prev_offset |
|
get_struc_qty |
see example |
get_struc_size |
tinfo_t(tid=...) + tinfo_t.get_size |
is_anonymous_member_name |
ida_frame.is_anonymous_member_name |
is_dummy_member_name |
ida_frame.is_dummy_member_name |
is_member_id |
idc.is_member_id |
is_special_member |
see example |
is_union |
tinfo_t(tid=...) + tinfo_t.is_union |
is_varmember |
udm_t.is_varmember |
is_varstr |
tinfo_t(tid=...) + tinfo_t.is_varstruct |
retrieve_member_info |
|
save_struc |
tinfo_t.save_type / tinfo_t.set_named_type / tinfo_t.set_numbered_type |
set_member_cmt |
tinfo_t(tid=...) + tinfo_t.set_udm_cmt |
set_member_name |
tinfo_t(tid=...) + tinfo_t.rename_udm |
set_member_tinfo |
|
set_member_type |
tinfo_t(tid=...) + tinfo_t.set_udm_type |
set_struc_align |
|
set_struc_cmt |
tinfo_t(tid=...) + tinfo_t.set_type_cmt |
set_struc_hidden |
|
set_struc_idx |
|
set_struc_listed |
set_type_choosable |
set_struc_name |
tinfo_t(tid=...) + tinfo_t.rename_type |
stroff_as_size |
ida_typeinf.stroff_as_size |
struct_field_visitor_t |
ida_typeinf.tinfo_visitor_t |
unsync_and_delete_struc |
|
visit_stroff_fields |
|
visit_stroff_udms |
ida_typeinf.visit_stroff_udms |
by_tilseeida_typeinf.udm_t.is_by_tileoffflagget_sizeuseida_typeinf.udm_t.size // 8instead.get_soffseesoffbelow.has_tihas_unionidis_baseclassseeida_typeinf.udm_t.is_baseclassis_destructorseeida_typeinf.udm_t.can_be_dtoris_dupnamepropssoffuseida_typeinf.udm_t.offset // 8instead.thisthisownunimem
agefrom_tilget_alignmentget_last_memberget_memberhas_unionseeida_typeinf.tinfo_t.has_unionidseeida_typeinf.tinfo_t.get_tidis_choosableis_copyofis_frameseeida_typeinf.tinfo_t.is_frameis_ghostis_hiddenis_mappedtois_syncedis_unionseeida_typeinf.tinfo_t.is_unionis_varstrseeida_typeinf.tinfo_t.is_varstructlike_unionmembersmemqtyseeida_typeinf.tinfo_t.get_udt_nmembersordinalseeida_typeinf.tinfo_t.get_ordinalpropsset_alignmentthisown
visit_field
visit_udm
The functions below 8.4 are removed those under 9.0 are alternatives.
The idc alternatives are based on:
ida_typeinfmoduleida_typeinf.tinfo_t, the type info classida_typeinf.enum_type_data_t, the enumeration type classida_typeinf.edm_t, the enumeration member class
| 8.4 | 9.0 |
|---|---|
add_enum |
idc.add_enum |
add_enum_member |
idc.add_enum_member |
del_enum |
idc.del_enum |
del_enum_member |
idc.del_enum_member |
for_all_enum_members |
|
get_bmask_cmt |
idc.get_bmask_cmt |
get_bmask_name |
idc.get_bmask_name |
get_enum |
idc.get_enum |
get_enum_cmt |
idc.get_enum_cmt |
get_enum_flag |
idc.get_enum_flag |
get_enum_idx |
|
get_enum_member |
idc.get_enum_member |
get_enum_member_bmask |
idc.get_enum_member_bmask |
get_enum_member_by_name |
idc.get_enum_member_by_name |
get_enum_member_cmt |
idc.get_enum_member_cmt |
get_enum_member_enum |
idc.get_enum_member_enum |
get_enum_member_name |
idc.get_enum_member_name |
get_enum_member_serial |
|
get_enum_member_value |
idc.get_enum_member_value |
get_enum_name |
idc.get_enum_name |
get_enum_name2 |
|
get_enum_qty |
|
get_enum_size |
idc.get_enum_size |
get_enum_type_ordinal |
|
get_enum_width |
idc.get_enum_width |
get_first_bmask |
idc.get_first_bmask |
get_first_enum_member |
idc.get_first_enum_member |
get_first_serial_enum_member |
|
get_last_bmask |
idc.get_last_bmask |
get_last_enum_member |
idc.get_last_enum_member |
get_last_serial_enum_member |
|
get_next_bmask |
idc.get_next_bmask |
get_next_enum_member |
idc.get_next_enum_member |
get_next_serial_enum_member |
|
get_prev_bmask |
idc.get_prev_bmask |
get_prev_enum_member |
idc.get_prev_enum_member |
get_prev_serial_enum_member |
|
getn_enum |
|
is_bf |
idc.is_bf |
is_enum_fromtil |
|
is_enum_hidden |
|
is_ghost_enum |
|
is_one_bit_mask |
|
set_bmask_cmt |
idc.set_bmask_cmt |
set_bmask_name |
idc.set_bmask_name |
set_enum_bf |
idc.set_enum_bf |
set_enum_cmt |
idc.set_enum_cmt |
set_enum_flag |
idc.set_enum_flag |
set_enum_fromtil |
|
set_enum_ghost |
|
set_enum_hidden |
|
set_enum_idx |
|
set_enum_member_cmt |
idc.set_enum_member_cmt |
set_enum_member_name |
idc.set_enum_member_name |
set_enum_name |
idc.set_enum_name |
set_enum_type_ordinal |
|
set_enum_width |
idc.set_enum_width |
visit_enum_member
callregs_t_regcountget_ordinal_from_idb_typeis_autosyncget_udm_tid: usetinfo_t.get_udm_tidas an alternative.get_tinfo_tid: usetinfo_t.get_tidas an alternative.tinfo_t_get_stockget_ordinal_qty: useida_typeinf.get_ordinal_countorida_typeinf.get_ordinal_limitas alternatives.import_type: useidc.import_typeas an alternative.
detach_tinfo_t(_this: "tinfo_t") -> "bool"get_tinfo_by_edm_name(tif: "tinfo_t", til: "til_t", mname: "char const *") -> "ssize_t"stroff_as_size(plen: "int", tif: "tinfo_t", value: "asize_t") -> "bool"visit_stroff_udms(sfv: "udm_visitor_t", path: "tid_t const *", disp: "adiff_t *", appzero: "bool") -> "adiff_t *"is_one_bit_mask(mask: "uval_t") -> "bool"get_idainfo_by_udm(flags: "flags64_t *", ti: "opinfo_t", set_lzero: "bool *", ap: "array_parameters_t", udm: "udm_t") -> "bool"
visit_udm
get_constant_group
set_registers(self, kind: "callregs_t::reg_kind_t", first_reg: "int", last_reg: "int") -> "void"
all_constants(self)all_groups(self, skip_trivial=False)get_constant_group(self, *args) -> "PyObject *"get_max_serial(self, value: "uint64") -> "uchar"get_serial(self, index: "size_t") -> "uchar"
find_argument(self, *args) -> "ssize_t"
find_base(self, n: "char const *") -> "til_t *"get_type_names(self) -> "const char *"
detach(self) -> "bool"is_punknown(self) -> "bool"get_enum_nmembers(self) -> "size_t"is_empty_enum(self) -> "bool"get_enum_width(self) -> "int"calc_enum_mask(self) -> "uint64"get_edm_tid(self, idx: "size_t") -> "tid_t"is_udm_by_til(self, idx: "size_t") -> "bool"set_udm_by_til(self, idx: "size_t", on: "bool"=True, etf_flags: "uint"=0) -> "tinfo_code_t"set_fixed_struct(self, on: "bool"=True) -> "tinfo_code_t"set_struct_size(self, new_size: "size_t") -> "tinfo_code_t"is_fixed_struct(self) -> "bool"get_func_frame(self, pfn: "func_t const *") -> "bool"is_frame(self) -> "bool"get_frame_func(self) -> "ea_t"set_enum_radix(self, radix: "int", sign: "bool", etf_flags: "uint"=0) -> "tinfo_code_t"rename_funcarg(self, index: "size_t", name: "char const *", etf_flags: "uint"=0) -> "tinfo_code_t"set_funcarg_type(self, index: "size_t", tif: "tinfo_t", etf_flags: "uint"=0) -> "tinfo_code_t"set_func_rettype(self, tif: "tinfo_t", etf_flags: "uint"=0) -> "tinfo_code_t"del_funcargs(self, idx1: "size_t", idx2: "size_t", etf_flags: "uint"=0) -> "tinfo_code_t"del_funcarg(self, idx: "size_t", etf_flags: "uint"=0) -> "tinfo_code_t"add_funcarg(self, farg: "funcarg_t", etf_flags: "uint"=0, idx: "ssize_t"=-1) -> "tinfo_code_t"set_func_cc(self, cc: "cm_t", etf_flags: "uint"=0) -> "tinfo_code_t"set_funcarg_loc(self, index: "size_t", argloc: "argloc_t", etf_flags: "uint"=0) -> "tinfo_code_t"set_func_retloc(self, argloc: "argloc_t", etf_flags: "uint"=0) -> "tinfo_code_t"get_stkvar(self, insn: "insn_t const &", x: "op_t const", v: "sval_t") -> "ssize_t"
is_retaddr(self) -> "bool"is_savregs(self) -> "bool"is_special_member(self) -> "bool"is_by_til(self) -> "bool"set_retaddr(self, on: "bool"=True) -> "void"set_savregs(self, on: "bool"=True) -> "voidset_by_til(self, on: "bool"=True) -> "void"
set_fixed(self, on: "bool"=True) -> "void"
| 8.4 | 9.0 |
|---|---|
find_udm(self, udm: "udmt_t *", strmem_flags: "int") -> "int" |
find_udm(self, udm: "udmt_t *", strmem_flags: "int") -> "int" |
find_udm(self, name: "char const *", strmem_flags: "int") -> "int" |
|
get_type_by_edm_name(self, mname: "const char *", til: "til_t"=None) -> "bool" |
get_edm_by_name(self, mname: "char const *", til: "til_t"=None) -> "ssize_t" |
8.4 To access the structure of a function frame, use:
get_struc() (use func_t::frame as structure ID)get_frame(const func_t *pfn)get_frame(ea_t ea)
9.0 To access the structure of a function frame, use:
tinfo_t::get_func_frame(const func_t *pfn)as the preferred way.get_func_frame(tinfo_t *out, const func_t *pfn)
get_stkvar: see tinfo_tget_frame: see tinfo_t.get-func_frameget_frame_member_by_idget_min_spd_eadelete_unreferenced_stkvarsdelete_wrong_stkvar_ops
get_func_frame(out: "tinfo_t",pfn: "func_t const *") -> "bool"add_frame_member(pfn: "func_t const *", name: "char const *", offset: "uval_t", tif: "tinfo_t", repr: "value_repr_t"=None, etf_flags: "uint"=0) -> "bool"is_anonymous_member_name(name: "char const *") -> "bool"is_dummy_member_name(name: "char const *") -> "bool"is_special_frame_member(tid: "tid_t") -> "bool"set_frame_member_type(pfn: "func_t const *",offset: "uval_t", tif: "tinfo_t", repr: "value_repr_t"=None, etf_flags: "uint"=0) -> "bool"delete_frame_members(pfn: "func_t const *",start_offset: "uval_t", end_offset: "uval_t") -> "bool"calc_frame_offset(pfn: "func_t *", off: "sval_t", insn: "insn_t const *"=None, op: "op_t const *"=None) -> "sval_t"
| 8.4 | 9.0 |
|---|---|
define_stkvar(pfn: "func_t *", name: "const char *", off: "sval_t", flags: "flags64_t", ti: "const opinfo_t *", nbytes: "asize_t") -> bool |
define_stkvar(pfn: "func_t *", name: "char const *", off: "sval_t", tif: "tinfo_t", repr: "value_repr_t"=None) -> "bool" |
free_chunckget_8bit
find_bytes(bs: typing.Union[bytes, bytearray, str], range_start: int, range_size: typing.Optional[int] = None, range_end: typing.Optional[int] = ida_idaapi.BADADDR, mask: typing.Optional[typing.Union[bytes, bytearray]] = None, flags: typing.Optional[int] = BIN_SEARCH_FORWARD | BIN_SEARCH_NOSHOW, radix: typing.Optional[int] = 16, strlit_encoding: typing.Optional[typing.Union[int, str]] = PBSENC_DEF1BPU) -> intfind_string(_str: str, range_start: int, range_end: typing.Optional[int] = ida_idaapi.BADADDR, range_size: typing.Optional[int] = None, strlit_encoding: typing.Optional[typing.Union[int, str]] = PBSENC_DEF1BPU, flags: typing.Optional[int] = BIN_SEARCH_FORWARD | BIN_SEARCH_NOSHOW) -> int
| 8.4 | 9.0 |
|---|---|
op_enum(ea: "ea_t", n: "int", id: "enum_t", serial: "uchar"=0) -> "bool" |
op_enum(ea: "ea_t", n: "int", id: "tid_t", serial: "uchar"=0) -> "bool" |
get_enum_id(ea: "ea_t", n: "int") -> "tid_t" |
get_enum_id(ea: "ea_t", n: "int") -> "enum_t" |
parse_binpat_str(out: "compiled_binpat_vec_t", ea: "ea_t", _in: "char const *", radix: "int", strlits_encoding: "int"=0) -> "str" |
parse_binpat_str(out: "compiled_binpat_vec_t", ea: "ea_t", _in: "char const *", radix: "int", strlits_encoding: "int"=0) -> "bool" |
bin_search3(start_ea: "ea_t", end_ea: "ea_t", data: "compiled_binpat_vec_t", flags: "int) -> ea_t |
bin_search(start_ea: "ea_t", end_ea: "ea_t", data: "compiled_binpat_vec_t const &", flags: "int") -> (ea_t, size_t) |
bin_search(start_ea: "ea_t", end_ea: "ea_t", image: "uchar const *", mask: "uchar const *", len: "size_t", flags: "int") -> ea_t |
|
get_octet2(ogen: "octet_generator_t") -> "uchar_t*" |
get_octet(ogen: "octet_generator_t") -> "uchar_t*" |
dirtree_cursor_root_cursordirtree_t_errstr
enumerate_files2eclose
qflcose(fp: "FILE *") -> "int"
set_ea(self, _ea: "ea_t") -> "bool"
clear(self)resize(self, n: "int") -> "void"size(self) -> "size_t"set(self, _node: "int", num: "int") -> "void"clr(self, _node: "int") -> "bool"node(self, _order: "size_t") -> "int"order(self, _node: "int") -> "int"
See ida-gdl node_ordering_t has been made an alias of ida_gdl.node_ordering_t
See ida-gdl edge_t has been made an alias of ida_gdl.edge_t
| 8.4 | 9.0 |
|---|---|
abstract_graph_t |
drawable_graph_t |
mutable_graph_t |
interactive_graph_t |
abstract_graph_t has been made an alias of drawable_graph_t mutbale_graph_t has been made an alias of interactive_graph_t
| 8.4 | 9.0 |
|---|---|
create_mutable_graph |
create_interactive_graph |
delete_mutable_graph |
delete_interactive_graph |
grcode_create_mutable_graph |
grcode_create_interactive_graph |
create_mutable_graph has been made an alias of create_interactive_graph delete_mutable_graph has been made an alias of delete_interactive_graph grcode_create_mutable_graph has been made an alias of grcode_create_interactive_graph
get_member_typecheckout_hexrays_licensecinsn_t_insn_is_epilog
| 8.4 | 9.0 |
|---|---|
save_user_labels2(func_ea: "ea_t", user_labels: "user_labels_t", func: "cfunc_t"=None) -> "void" |
save_user_labels(func_ea: "ea_t", user_labels: "user_labels_t", func: "cfunc_t"=None) -> "void" |
restore_user_labels2(func_ea: "ea_t", func: "cfunc_t"=None) -> "user_labels_t *" |
restore_user_labels(func_ea: "ea_t", func: "cfunc_t"=None) -> "user_labels_t *" |
max_vlr_value(size: "int") -> "uvlr_t"min_vlr_svalue(size: "int") -> "uvlr_t"max_vlr_svalue(size: "int") -> "uvlr_t"is_unsigned_cmpop(cmpop: "cmpop_t") -> "bool"is_signed_cmpop(cmpop: "cmpop_t") -> "bool"is_cmpop_with_eq(cmpop: "cmpop_t") -> "bool"is_cmpop_without_eq(cmpop: "cmpop_t") -> "bool"
catchexpr_tccatch_tctry_tcthrow_tcblock_pos_t
set_strmem_typerename_strmem
splice(self, pos: "qlist< cinsn_t >::iterator", other: "cinsn_list_t", first: "qlist< cinsn_t >::iterator", last: "qlist< cinsn_t >::iterator") -> "void"
pre_structural(self, ct: "control_graph_t *", cfunc: "cfunc_t", g: "simple_graph_t") -> "int"begin_inlining(self, cdg: "codegen_t", decomp_flags: "int") -> "int"inlining_func(self, cdg: "codegen_t", blk: "int", mbr: "mba_ranges_t") -> "int"inlined_func(self, cdg: "codegen_t", blk: "int", mbr: "mba_ranges_t", i1: "int", i2: "int") -> "int"collect_warnings(self, warnings: "qstrvec_t *", cfunc: "cfunc_t") -> "int"
was_scattered_arg(self) -> "bool"set_scattered_arg(self) -> "void"clr_scattered_arg(self) -> "void"
find_input_reg(self, reg: "int", _size: "int"=1) -> "int"
compute_dominators(self, domin: "array_of_node_bitset_t &", post: "bool"=False) -> "void"compute_immediate_dominators(self, domin: "array_of_node_bitset_t const &", idomin: "intvec_t", post: "bool"=False) -> "void"depth_first_preorder(self, pre: "node_ordering_t") -> "int"depth_first_postorder(self, post: "node_ordering_t") -> "int"begin(self) -> "simple_graph_t::iterator"end(self) -> "simple_graph_t::iterator"front(self) -> "int"inc(self, p: "simple_graph_t::iterator &", n: "int"=1) -> "void"goup(self, node: "int") -> "int"
calc_max_exp(self) -> "int"is_nan(self) -> "bool"
was_unpaired(self) -> "bool"
split_block(self, blk: "mblock_t", start_insn: "minsn_t") -> "mblock_t *"inline_func(self, cdg: "codegen_t", blknum: "int", ranges: "mba_ranges_t", decomp_flags: "int"=0, inline_flags: "int"=0) -> "merror_t"locate_stkpnt(self, ea: "ea_t") -> "stkpnt_t const *"
clear(self) -> "void"
| 8.4 | 9.0 |
|---|---|
flowchart(self, fc: "qflow_chart_t") -> "int" |
flowchart(self, fc: "qflow_chart_t", mba: "mba_t") -> "int" |
| 8.4 | 9.0 |
|---|---|
cvt_to_cmp(self, strict: "bool") -> "bool" |
cvt_to_cmp(self) -> "bool" |
max_value(self, size_ : "int") -> "uvlr_t" |
max_value(self) -> "uvlr_t" |
min_svalue(self, size_: "int") -> "uvlr_t" |
min_svalue(self) -> "uvlr_t" |
max_svalue(self, size_: "int") -> "uvlr_t" |
max_svalue(self) -> "uvlr_t" |
| 8.4 | 9.0 |
|---|---|
get_stkvar(self, p_off=None: "uval_t *") -> "member_t *" |
get_stkvar(self, udm: "udm_t"=None, p_off: "uval_t *"=None) -> "ssize_t" |
| 8.4 | 9.0 |
|---|---|
get_stkvar(self, p_off: "uval_t *") -> "member_t *" |
get_stkvar(self, udm: "udm_t"=None, p_off: "uval_t *"=None) -> "ssize_t" |
is_node_altval(self) -> "bool"is_node_supval(self) -> "bool"is_node_valobj(self) -> "bool"is_node_blob(self) -> "bool"is_node_var(self) -> "bool"is_struc_field(self) -> "bool"is_cstr(self) -> "bool"is_qstring(self) -> "bool"is_bytearray(self) -> "bool"is_buf_var(self) -> "bool"is_decimal(self) -> "bool"is_hexadecimal(self) -> "bool"is_readonly_var(self) -> "bool"is_incremented(self) -> "bool"is_val_mapped(self) -> "bool"is_hash(self) -> "bool"use_hlpstruc(self) -> "bool"is_bitmap(self) -> "bool"is_onoff(self) -> "bool"is_scalar_var(self) -> "bool"is_bitfield(self) -> "bool"is_boolean(self) -> "bool"has_individual_node(self) -> "bool"str_true(self) -> "char const *"str_false(self) -> "char const *"ridx(self) -> "size_t"hashname(self) -> "char const *"
As will be shown in ida_idaapi Removed functions get_inf_structurehas been removed. It has been replaced by the following accessors.
| In 8.4 | In 9.0 |
|---|---|
ida_idaapi.get_inf_structure().procname |
ida_ida.inf_get_procname() |
ida_idaapi.get_inf_structure().max_ea |
ida_ida.inf_get_max_ea() |
ida_idaapi.get_inf_structure().is_32bit() |
ida_ida.inf_is_32bit_exactly() |
The list of getters and setters is given below.
inf_get_version() -> "ushort"inf_get_genflags() -> "ushort"inf_get_lflags() -> "uint32"inf_get_app_bitness() -> "uint"inf_get_database_change_count() -> "uint32"inf_get_filetype() -> "filetype_t"inf_get_ostype() -> "ushort"inf_get_apptype() -> "ushort"inf_get_asmtype() -> "uchar"inf_get_specsegs() -> "uchar"inf_get_af() -> "uint32"inf_get_af2() -> "uint32"inf_get_baseaddr() -> "uval_t"inf_get_start_ss() -> "sel_t"inf_get_start_cs() -> "sel_t"inf_get_start_ip() -> "ea_t"inf_get_start_ea() -> "ea_t"inf_get_start_sp() -> "ea_t"inf_get_main() -> "ea_t"inf_get_min_ea() -> "ea_t"inf_get_max_ea() -> "ea_t"inf_get_omin_ea() -> "ea_t"inf_get_omax_ea() -> "ea_t"inf_get_lowoff() -> "ea_t"inf_get_highoff() -> "ea_t"inf_get_maxref() -> "uval_t"inf_get_netdelta() -> "sval_t"inf_get_xrefnum() -> "uchar"inf_get_type_xrefnum() -> "uchar"inf_get_refcmtnum() -> "uchar"inf_get_xrefflag() -> "uchar"inf_get_max_autoname_len() -> "ushort"inf_get_nametype() -> "char"inf_get_short_demnames() -> "uint32"inf_get_long_demnames() -> "uint32"inf_get_demnames() -> "uchar"inf_get_listnames() -> "uchar"inf_get_indent() -> "uchar"inf_get_cmt_indent() -> "uchar"inf_get_margin() -> "ushort"inf_get_lenxref() -> "ushort"inf_get_outflags() -> "uint32"inf_get_cmtflg() -> "uchar"inf_get_limiter() -> "uchar"inf_get_bin_prefix_size() -> "short"inf_get_prefflag() -> "uchar"inf_get_strlit_flags() -> "uchar"inf_get_strlit_break() -> "uchar"inf_get_strlit_zeroes() -> "char"inf_get_strtype() -> "int32"inf_get_strlit_sernum() -> "uval_t"inf_get_datatypes() -> "uval_t"inf_get_abibits() -> "uint32"inf_get_appcall_options() -> "uint32"inf_get_privrange_start_ea() -> "ea_t"inf_get_privrange_end_ea() -> "ea_t"inf_get_cc_id() -> "comp_t"inf_get_cc_cm() -> "cm_t"inf_get_cc_size_i() -> "uchar"inf_get_cc_size_b() -> "uchar"inf_get_cc_size_e() -> "uchar"inf_get_cc_defalign() -> "uchar"inf_get_cc_size_s() -> "uchar"inf_get_cc_size_l() -> "uchar"inf_get_cc_size_ll() -> "uchar"inf_get_cc_size_ldbl() -> "uchar"inf_get_procname() -> "size_t"inf_get_strlit_pref() -> "size_t"inf_get_cc(out: "compiler_info_t") -> "bool"inf_get_privrange(*args) -> "range_t"inf_get_af_low() -> "ushort"inf_get_af_high() -> "ushort"inf_get_af2_low() -> "ushort"inf_get_pack_mode() -> "int"inf_get_demname_form() -> "uchar"inf_is_auto_enabled() -> "bool"inf_is_graph_view() -> "bool"inf_is_32bit_or_higher() -> "bool"inf_is_32bit_exactly() -> "bool"inf_is_16bit() -> "bool"inf_is_64bit() -> "bool"inf_is_dll() -> "bool"inf_is_flat_off32() -> "bool"inf_is_be() -> "bool"inf_is_wide_high_byte_first() -> "bool"inf_is_snapshot() -> "bool"inf_is_kernel_mode() -> "bool"inf_is_limiter_thin() -> "bool"inf_is_limiter_thick() -> "bool"inf_is_limiter_empty() -> "bool"inf_is_mem_aligned4() -> "bool"inf_is_hard_float() -> "bool"inf_abi_set_by_user() -> "bool"inf_allow_non_matched_ops() -> "bool"inf_allow_sigmulti() -> "bool"inf_append_sigcmt() -> "bool"inf_big_arg_align(*args) -> "bool"inf_check_manual_ops() -> "bool"inf_check_unicode_strlits() -> "bool"inf_coagulate_code() -> "bool"inf_coagulate_data() -> "bool"inf_compress_idb() -> "bool"inf_create_all_xrefs() -> "bool"inf_create_func_from_call() -> "bool"inf_create_func_from_ptr() -> "bool"inf_create_func_tails() -> "bool"inf_create_jump_tables() -> "bool"inf_create_off_on_dref() -> "bool"inf_create_off_using_fixup() -> "bool"inf_create_strlit_on_xref() -> "bool"inf_data_offset() -> "bool"inf_dbg_no_store_path() -> "bool"inf_decode_fpp() -> "bool"inf_del_no_xref_insns() -> "bool"inf_final_pass() -> "bool"inf_full_sp_ana() -> "bool"inf_gen_assume() -> "bool"inf_gen_lzero() -> "bool"inf_gen_null() -> "bool"inf_gen_org() -> "bool"inf_huge_arg_align(cc: cm_t) -> "bool"inf_like_binary() -> "bool":inf_line_pref_with_seg() -> "bool"inf_loading_idc() -> "bool"inf_macros_enabled() -> "bool"inf_map_stkargs() -> "bool"inf_mark_code() -> "bool"inf_merge_strlits() -> "bool"inf_no_store_user_info() -> "bool"inf_noflow_to_data() -> "bool"inf_noret_ana() -> "bool"inf_op_offset() -> "bool"inf_pack_idb() -> "bool"inf_pack_stkargs(*args) -> "bool"inf_prefix_show_funcoff() -> "bool"inf_prefix_show_segaddr() -> "bool"inf_prefix_show_stack() -> "bool"inf_prefix_truncate_opcode_bytes() -> "bool"inf_propagate_regargs() -> "bool"inf_propagate_stkargs() -> "bool"inf_readonly_idb() -> "bool"inf_rename_jumpfunc() -> "bool"inf_rename_nullsub() -> "bool"inf_should_create_stkvars() -> "bool"inf_should_trace_sp() -> "bool"inf_show_all_comments() -> "bool"inf_show_auto() -> "bool"inf_show_hidden_funcs() -> "bool"inf_show_hidden_insns() -> "bool"inf_show_hidden_segms() -> "bool"inf_show_line_pref() -> "bool"inf_show_repeatables() -> "bool"inf_show_src_linnum() -> "bool"inf_show_void() -> "bool"inf_show_xref_fncoff() -> "bool"inf_show_xref_seg() -> "bool"inf_show_xref_tmarks() -> "bool"inf_show_xref_val() -> "bool"inf_stack_ldbl() -> "bool"inf_stack_varargs() -> "bool"inf_strlit_autocmt() -> "bool"inf_strlit_name_bit() -> "bool"inf_strlit_names() -> "bool"inf_strlit_savecase() -> "bool"inf_strlit_serial_names() -> "bool"inf_test_mode() -> "bool"inf_trace_flow() -> "bool"inf_truncate_on_del() -> "bool"inf_unicode_strlits() -> "bool"inf_use_allasm() -> "bool"inf_use_flirt() -> "bool"inf_use_gcc_layout() -> "bool"
inf_set_allow_non_matched_ops(_v: "bool"=True) -> "bool"inf_set_graph_view(_v: "bool"=True) -> "bool"inf_set_lflags(_v: "uint32") -> "bool"inf_set_decode_fpp(_v: "bool"=True) -> "bool"inf_set_32bit(_v: "bool"=True) -> "bool"inf_set_64bit(_v: "bool"=True) -> "bool"inf_set_dll(_v: "bool"=True) -> "bool"inf_set_flat_off32(_v: "bool"=True) -> "bool"inf_set_be(_v: "bool"=True) -> "bool"inf_set_wide_high_byte_first(_v: "bool"=True) -> "bool"inf_set_dbg_no_store_path(_v: "bool"=True) -> "bool"inf_set_snapshot(_v: "bool"=True) -> "bool"inf_set_pack_idb(_v: "bool"=True) -> "bool"inf_set_compress_idb(_v: "bool"=True) -> "bool"inf_set_kernel_mode(_v: "bool"=True) -> "bool"inf_set_app_bitness(bitness: "uint") -> "void"inf_set_database_change_count(_v: "uint32") -> "bool"inf_set_filetype(_v: "filetype_t") -> "bool"inf_set_ostype(_v: "ushort") -> "bool"inf_set_apptype(_v: "ushort") -> "bool"inf_set_asmtype(_v: "uchar") -> "bool"inf_set_specsegs(_v: "uchar") -> "bool"inf_set_af(_v: "uint32") -> "bool"inf_set_trace_flow(_v: "bool"=True) -> "bool"inf_set_mark_code(_v: "bool"=True) -> "bool"inf_set_create_jump_tables(_v: "bool"=True) -> "bool"inf_set_noflow_to_data(_v: "bool"=True) -> "bool"inf_set_create_all_xrefs(_v: "bool"=True) -> "bool"inf_set_del_no_xref_insns(_v: "bool"=True) -> "bool"inf_set_create_func_from_ptr(_v: "bool"=True) -> "bool"inf_set_create_func_from_call(_v: "bool"=True) -> "bool"inf_set_create_func_tails(_v: "bool"=True) -> "bool"inf_set_should_create_stkvars(_v: "bool"=True) -> "bool"inf_set_propagate_stkargs(_v: "bool"=True) -> "bool"inf_set_propagate_regargs(_v: "bool"=True) -> "bool"inf_set_should_trace_sp(_v: "bool"=True) -> "bool"inf_set_full_sp_ana(_v: "bool"=True) -> "bool"inf_set_noret_ana(_v: "bool"=True) -> "bool"inf_set_guess_func_type(_v: "bool"=True) -> "bool"inf_set_truncate_on_del(_v: "bool"=True) -> "bool"inf_set_create_strlit_on_xref(_v: "bool"=True) -> "bool"inf_set_check_unicode_strlits(_v: "bool"=True) -> "bool"inf_set_create_off_using_fixup(_v: "bool"=True) -> "bool"inf_set_create_off_on_dref(_v: "bool"=True) -> "bool"inf_set_op_offset(_v: "bool"=True) -> "bool"inf_set_data_offset(_v: "bool"=True) -> "bool"inf_set_use_flirt(_v: "bool"=True) -> "bool"inf_set_append_sigcmt(_v: "bool"=True) -> "bool"inf_set_allow_sigmulti(_v: "bool"=True) -> "bool"inf_set_hide_libfuncs(_v: "bool"=True) -> "bool"inf_set_rename_jumpfunc(_v: "bool"=True) -> "bool"inf_set_rename_nullsub(_v: "bool"=True) -> "bool"inf_set_coagulate_data(_v: "bool"=True) -> "bool"inf_set_coagulate_code(_v: "bool"=True) -> "bool"inf_set_final_pass(_v: "bool"=True) -> "bool"inf_set_af2(_v: "uint32") -> "bool"inf_set_handle_eh(_v: "bool"=True) -> "bool"inf_set_handle_rtti(_v: "bool"=True) -> "bool"inf_set_macros_enabled(_v: "bool"=True) -> "bool"inf_set_merge_strlits(_v: "bool"=True) -> "bool"inf_set_baseaddr(_v: "uval_t") -> "bool"inf_set_start_ss(_v: "sel_t") -> "bool"inf_set_start_cs(_v: "sel_t") -> "bool"inf_set_start_ip(_v: "ea_t") -> "bool"inf_set_start_ea(_v: "ea_t") -> "bool"inf_set_start_sp(_v: "ea_t") -> "bool"inf_set_main(_v: "ea_t") -> "bool"inf_set_min_ea(_v: "ea_t") -> "bool"inf_set_max_ea(_v: "ea_t") -> "bool"inf_set_omin_ea(_v: "ea_t") -> "bool"inf_set_omax_ea(_v: "ea_t") -> "bool"inf_set_lowoff(_v: "ea_t") -> "bool"inf_set_highoff(_v: "ea_t") -> "bool"inf_set_maxref(_v: "uval_t") -> "bool"inf_set_netdelta(_v: "sval_t") -> "bool"inf_set_xrefnum(_v: "uchar") -> "bool"inf_set_type_xrefnum(_v: "uchar") -> "bool"inf_set_refcmtnum(_v: "uchar") -> "bool"inf_set_xrefflag(_v: "uchar") -> "bool"inf_set_show_xref_seg(_v: "bool"=True) -> "bool"inf_set_show_xref_tmarks(_v: "bool"=True) -> "bool"inf_set_show_xref_fncoff(_v: "bool"=True) -> "bool"inf_set_show_xref_val(_v: "bool"=True) -> "bool"inf_set_max_autoname_len(_v: "ushort") -> "bool"inf_set_nametype(_v: "char") -> "bool"inf_set_short_demnames(_v: "uint32") -> "bool"inf_set_long_demnames(_v: "uint32") -> "bool"inf_set_demnames(_v: "uchar") -> "bool"inf_set_listnames(_v: "uchar") -> "bool"inf_set_indent(_v: "uchar") -> "bool"inf_set_cmt_indent(_v: "uchar") -> "bool"inf_set_margin(_v: "ushort") -> "bool"inf_set_lenxref(_v: "ushort") -> "bool"inf_set_outflags(_v: "uint32") -> "bool"inf_set_show_void(_v: "bool"=True) -> "bool"inf_set_show_auto(_v: "bool"=True) -> "bool"inf_set_gen_null(_v: "bool"=True) -> "bool"inf_set_show_line_pref(_v: "bool"=True) -> "bool"inf_set_line_pref_with_seg(_v: "bool"=True) -> "bool"inf_set_gen_lzero(_v: "bool"=True) -> "bool"inf_set_gen_org(_v: "bool"=True) -> "bool"inf_set_gen_assume(_v: "bool"=True) -> "bool"inf_set_gen_tryblks(_v: "bool"=True) -> "bool"inf_set_cmtflg(_v: "uchar") -> "bool"inf_set_show_repeatables(_v: "bool"=True) -> "bool"inf_set_show_all_comments(_v: "bool"=True) -> "bool"inf_set_hide_comments(_v: "bool"=True) -> "bool"inf_set_show_src_linnum(_v: "bool"=True) -> "bool"inf_set_show_hidden_insns(_v: "bool"=True) -> "bool"inf_set_show_hidden_funcs(_v: "bool"=True) -> "bool"inf_set_show_hidden_segms(_v: "bool"=True) -> "bool"inf_set_limiter(_v: "uchar") -> "bool"inf_set_limiter_thin(_v: "bool"=True) -> "bool"inf_set_limiter_thick(_v: "bool"=True) -> "bool"inf_set_limiter_empty(_v: "bool"=True) -> "bool"inf_set_bin_prefix_size(_v: "short") -> "bool"inf_set_prefflag(_v: "uchar") -> "bool"inf_set_prefix_show_segaddr(_v: "bool"=True) -> "bool"inf_set_prefix_show_funcoff(_v: "bool"=True) -> "bool"inf_set_prefix_show_stack(_v: "bool"=True) -> "bool"inf_set_prefix_truncate_opcode_bytes(_v: "bool"=True) -> "bool"inf_set_strlit_flags(_v: "uchar") -> "bool"inf_set_strlit_names(_v: "bool"=True) -> "bool"inf_set_strlit_name_bit(_v: "bool"=True) -> "bool"inf_set_strlit_serial_names(_v: "bool"=True) -> "bool"inf_set_unicode_strlits(_v: "bool"=True) -> "bool"inf_set_strlit_autocmt(_v: "bool"=True) -> "bool"inf_set_strlit_savecase(_v: "bool"=True) -> "bool"inf_set_strlit_break(_v: "uchar") -> "bool"inf_set_strlit_zeroes(_v: "char") -> "bool"inf_set_strtype(_v: "int32") -> "bool"inf_set_strlit_sernum(_v: "uval_t") -> "bool"inf_set_datatypes(_v: "uval_t") -> "bool"inf_set_abibits(_v: "uint32") -> "bool"inf_set_mem_aligned4(_v: "bool"=True) -> "bool"inf_set_pack_stkargs(_v: "bool"=True) -> "bool"inf_set_big_arg_align(_v: "bool"=True) -> "bool"inf_set_stack_ldbl(_v: "bool"=True) -> "bool"inf_set_stack_varargs(_v: "bool"=True) -> "bool"inf_set_hard_float(_v: "bool"=True) -> "bool"inf_set_abi_set_by_user(_v: "bool"=True) -> "bool"inf_set_use_gcc_layout(_v: "bool"=True) -> "bool"inf_set_map_stkargs(_v: "bool"=True) -> "bool"inf_set_huge_arg_align(_v: "bool"=True) -> "bool"inf_set_appcall_options(_v: "uint32") -> "bool"inf_set_privrange_start_ea(_v: "ea_t") -> "bool"inf_set_privrange_end_ea(_v: "ea_t") -> "bool"inf_set_cc_id(_v: "comp_t") -> "bool"inf_set_cc_cm(_v: "cm_t") -> "bool"inf_set_cc_size_i(_v: "uchar") -> "bool"inf_set_cc_size_b(_v: "uchar") -> "bool"inf_set_cc_size_e(_v: "uchar") -> "bool"inf_set_cc_defalign(_v: "uchar") -> "bool"inf_set_cc_size_s(_v: "uchar") -> "bool"inf_set_cc_size_l(_v: "uchar") -> "bool"inf_set_cc_size_ll(_v: "uchar") -> "bool"inf_set_cc_size_ldbl(_v: "uchar") -> "bool"inf_set_procname(*args) -> "bool"inf_set_strlit_pref(*args) -> "bool"inf_set_cc(_v: "compiler_info_t") -> "bool"inf_set_privrange(_v: "range_t") -> "bool"inf_set_af_low(saf: "ushort") -> "void"inf_set_af_high(saf2: "ushort") -> "void"inf_set_af2_low(saf: "ushort") -> "void"inf_set_pack_mode(pack_mode: "int") -> "int"inf_inc_database_change_count(cnt: "int"=1) -> "void"
get_inf_structuresee inf_structure getters and inf_structure settersloader_input_t_from_linputloader_input_t_from_capsuleloader_input_t_from_fp
cpu2ieee(ieee_out: "fpvalue_t *", cpu_fpval: "void const *", size: "int") -> "int"ieee2cpu(cpu_fpval: "void *", ieee_out: "fpvalue_t const &", size: "int") -> "int"
See also IDB events below.
has_realcvt
get_uFlag
| 8.4 | 9.0 |
|---|---|
gen_stkvar_def(ctx: "outctx_t &", mptr: "member_t const *", v: : "sval_t") -> ssize_t |
gen_stkvar_def(ctx: "outctx_t &", mptr: "udm_t", v: "sval_t", tid: "tid_t") -> "ssize_t" |
| 8.4 | 9.0 |
|---|---|
ev_gen_stkvar_def(self, *args) -> "int" |
ev_gen_stkvar_def(self, outctx: "outctx_t *", stkvar: "udm_t", v: "sval_t", tid: "tid_t") -> "int" |
lt_udm_created(self, udtname: "char const *", udm: "udm_t") -> "void"lt_udm_deleted(self, udtname: "char const *", udm_tid: "tid_t", udm: "udm_t") -> "void"lt_udm_renamed(self, udtname: "char const *", udm: "udm_t", oldname: "char const *") -> "void"lt_udm_changed(self, udtname: "char const *", udm_tid: "tid_t", udmold: "udm_t", udmnew: "udm_t") -> "void"lt_udt_expanded(self, udtname: "char const *", udm_tid: "tid_t", delta: "adiff_t") -> "void"frame_created(self, func_ea: "ea_t") -> "void"frame_udm_created(self, func_ea: "ea_t", udm: "udm_t") -> "void"frame_udm_deleted(self, func_ea: "ea_t", udm_tid: "tid_t", udm: "udm_t") -> "void"frame_udm_renamed(self, func_ea: "ea_t", udm: "udm_t", oldname: "char const *") -> "void"frame_udm_changed(self, func_ea: "ea_t", udm_tid: "tid_t", udmold: "udm_t", udmnew: "udm_t") -> "void"frame_expanded(self, func_ea: "ea_t", udm_tid: "tid_t", delta: "adiff_t") -> "void"
All the _processor_t functions have been removed from ida_idp.
_get_10bytes_set_10bytes
place_t_as_enumplace_tplace_t_as_structplace_topen_enums_windowopen_structs_windowchoose_strucchoose_enum(title, default_id) -> "enum_t"choose_enum_by_value(title, default_id, value, nbytes) -> "enum_t"
place_t_as_idaplace_thas been made an alias ofplace_t.as_idaplace_tplace_t_as_simpleline_place_thas been made an alias ofplace_t.as_simpleline_place_tplace_t_as_tiplace_thas been made an alias ofplace_t.as_tiplace_t
enumplace_tstructplace_t
as_enumplace_tas_structplace_t
place_as_enumplace_tplace_as_structplace_t
find_in
nearest_before(self, range: "tagged_line_section_t", start: "cpidx_t", tag: "color_t"=0) -> "tagged_line_section_t const *"nearest_after(self, range: "tagged_line_section_t", start: "cpidx_t", tag: "color_t"=0) -> "tagged_line_section_t const *"
has_widget_lifecycle(self) -> "bool"
is_ida_library(path: "char *", pathsize: "size_t", handle: "void **") -> "bool"
set_user_defined_prefix
bookmarks_t_markhas been made an alias ofbookmarks_t.markbookmarks_t_get_deschas been made an alias ofbookmarks_t.get_descbookmarks_t_find_indexhas been made an alias ofbookmarks_t.find_indexbookmarks_t_sizehas been made an alias ofbookmarks_t.sizebookmarks_t_erasehas been made an alias ofbookmarks_t.erasebookmarks_t_get_dirtree_idhas been made an alias ofbookmarks_t.get_dirtree_idbookmarks_t_gethas been made an alias ofbookmarks_t.get
validate_idb_names
netnode.exist has been made an alias of netnode.exist
uchar_array_frompointertid_array_frompointerea_array_frompointersel_array_frompointerint_pointer_frompointersel_pointer_frompointerea_pointer_frompointer
See Added classes below
erase(self, name: "char const *") -> "bool"
assign(self, value: "uchar") -> "void"value(self) -> "uchar"cast(self) -> "uchar *"frompointer(t: "uchar *") -> "uchar_pointer *"
assign(self, value: "ushort") -> "void"value(self) -> "ushort"cast(self) -> "ushort *"frompointer(t: "ushort *") -> "ushort_pointer *"
assign(self, value: "uint") -> "void"value(self) -> "uint"cast(self) -> "uint *"frompointer(t: "uint *") -> "uint_pointer *"
assign(self, value: "sint8") -> "void"value(self) -> "sint8"cast(self) -> "sint8 *"frompointer(t: "sint8 *") -> "sint8_pointer *"
assign(self, value: "int8") -> "void"value(self) -> "int8"cast(self) -> "int8 *"frompointer(t: "int8 *") -> "int8_pointer *"
assign(self, value: "uint8") -> "void"value(self) -> "uint8"cast(self) -> "uint8 *"frompointer(t: "uint8 *") -> "uint8_pointer *"
assign(self, value: "int16") -> "void"value(self) -> "int16"cast(self) -> "int16 *"frompointer(t: "int16 *") -> "int16_pointer *"
assign(self, value: "uint16") -> "void"value(self) -> "uint16"cast(self) -> "uint16 *"frompointer(t: "uint16 *") -> "uint16_pointer *"
assign(self, value: "int32") -> "void"value(self) -> "int32"cast(self) -> "int32 *"frompointer(t: "int32 *") -> "int32_pointer *"
assign(self, value: "uint32") -> "void"value(self) -> "uint32"cast(self) -> "uint32 *"frompointer(t: "uint32 *") -> "uint32_pointer *"
assign(self, value: "int64") -> "void"value(self) -> "int64"cast(self) -> "int64 *"frompointer(t: "int64 *") -> "int64_pointer *"
assign(self, value: "uint64") -> "void"value(self) -> "uint64"cast(self) -> "uint64 *"frompointer(t: "uint64 *") -> "uint64_pointer *"
assign(self, value: "ssize_t") -> "void"value(self) -> "ssize_t"cast(self) -> "ssize_t *"frompointer(t: "ssize_t *") -> "ssize_pointer *"
assign(self, value: "bool") -> "void"value(self) -> "bool"cast(self) -> "bool *"frompointer(t: "bool *") -> "bool_pointer *"
assign(self, value: "short") -> "void"value(self) -> "short"cast(self) -> "short *"frompointer(t: "short *") -> "short_pointer *"
assign(self, value: "char") -> "void"value(self) -> "char"cast(self) -> "char *"frompointer(t: "char *") -> "char_pointer *"
assign(self, value: "sel_t") -> "void"value(self) -> "sel_t"cast(self) -> "sel_t *"frompointer(t: "sel_t *") -> "sel_pointer *"
assign(self, value: "asize_t") -> "void"value(self) -> "asize_t"cast(self) -> "asize_t *"frompointer(t: "asize_t *") -> "asize_pointer *"
assign(self, value: "adiff_t") -> "void"value(self) -> "adiff_t"cast(self) -> "adiff_t *"from_pointer(t: "adiff_t*") -> "adiff_pointer *"
assign(self, value: "uval_t") -> "void"value(self) -> "uval_t"cast(self) -> "uval_t *"frompointer(t: "uval_t *") -> "uval_pointer *"
assign(self, value: "ea32_t") -> "void"value(self) -> "ea32_t"cast(self) -> "ea32_t *"frompointer(t: "ea32_t *") -> "ea32_pointer *"
assign(self, value: "ea64_t") -> "void"value(self) -> "ea64_t"cast(self) -> "ea64_t *"frompointer(t: "ea64_t *") -> "ea64_pointer *"
assign(self, value: "flags_t") -> "void"value(self) -> "flags_t"cast(self) -> "flags_t *"frompointer(t: "flags_t *") -> "flags_pointer *"
assign(self, value: "flags64_t") -> "void"value(self) -> "flags64_t"cast(self) -> "flags64_t *"frompointer(t: "flags64_t *") -> "flags64_pointer *"
assign(self, value: "tid_t") -> "void"value(self) -> "tid_t"cast(self) -> "tid_t *"frompointer(t: "tid_t *") -> "tid_pointer *"
get_login_name() -> "qstring *"
reg_value_info_t_make_dead_endreg_value_info_t_make_abortedreg_value_info_t_make_badinsnreg_value_info_t_make_unkinsnreg_value_info_t_make_unkfuncreg_value_info_t_make_unkloopreg_value_info_t_make_unkmultreg_value_info_t_make_numreg_value_info_t_make_initial_sp
| 8.4 | 9.0 |
|---|---|
invalidate_regfinder_cache(ea: "ea_t") -> "void" |
invalidate_regfinder_cache(from=BADADDR: "ea_t", to=BADADDR: "ea_t") -> "void" |
movt(self, r: "reg_value_info_t", insn: "insn_t const &") -> "void"
reg_loadreg_flush
find_binary
construct_macro(insn: "insn_t *", enable: "bool", build_macro: "PyObject *") -> bool (See [Modified functions](#modified-functions-4))
| 8.4 | 9.0 |
|---|---|
construct_macro2(_this: "macro_constructor_t *", insn: "insn_t *", enable: "bool") -> "bool" |
construct_macro(_this: "macro_constructor_t *", insn: "insn_t *", enable: "bool") -> "bool" |
construct_macro(self, insn: "insn_t", enable: "bool") -> "bool"
| 8.4 | 9.0 |
|---|---|
Structs() -> [(idx, sid, name)] |
Structs() -> [(ordinal, sid, name)] |
StructMembers(sid) -> [(offset, name, size)] |
StructMembers(sid) -> [(offset_in_bytes, name, size_in_bytes)] |
The following table provide a list of IDB events that have been replaced or, in some cases, removed.
| Since 7 | In 9.0 |
|---|---|
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 |
Following is the list of error values returned by the type info module. It can also be found in typeinf.hpp in the IDASDK:
| Error name | Val. | Meaning |
|---|---|---|
| TERR_OK | 0 | ok |
| TERR_STABLE | 1 | it means no errors occurred but nothing has changed (this code is internal: should never be returned to caller) -* |
| TERR_SAVE_ERROR | -1 | failed to save |
| TERR_SERIALIZE | -2 | failed to serialize |
| TERR_BAD_NAME | -3 | name is not acceptable |
| TERR_BAD_ARG | -4 | bad argument |
| TERR_BAD_TYPE | -5 | bad type |
| TERR_BAD_SIZE | -6 | bad size |
| TERR_BAD_INDEX | -7 | bad index |
| TERR_BAD_ARRAY | -8 | arrays are forbidden as function arguments |
| TERR_BAD_BF | -9 | bitfields are forbidden as function arguments |
| TERR_BAD_OFFSET | -10 | bad member offset |
| TERR_BAD_UNIVAR | -11 | unions cannot have variable sized members |
| TERR_BAD_VARLAST | -12 | variable sized member must be the last member in the structure |
| TERR_OVERLAP | -13 | the member overlaps with other members that cannot be deleted |
| TERR_BAD_SUBTYPE | -14 | recursive structure nesting is forbidden |
| TERR_BAD_VALUE | -15 | value is not acceptable |
| TERR_NO_BMASK | -16 | bitmask is not found |
| TERR_BAD_BMASK | -17 | Bad enum member mask. The specified mask should not intersect with any existing mask in the enum. Zero masks are prohibited too |
| TERR_BAD_MSKVAL | -18 | bad bmask and value combination |
| TERR_BAD_REPR | -19 | bad or incompatible field representation |
| TERR_GRP_NOEMPTY | -20 | could not delete group mask for not empty group |
| TERR_DUPNAME | -21 | duplicate name |
| TERR_UNION_BF | -22 | unions cannot have bitfields |
| TERR_BAD_TAH | -23 | bad bits in the type attributes (TAH bits) |
| TERR_BAD_BASE | -24 | bad base class |
| TERR_BAD_GAP | -25 | bad gap |
| TERR_NESTED | -26 | recursive structure nesting is forbidden |
| TERR_NOT_COMPAT | -27 | the new type is not compatible with the old type |
| TERR_BAD_LAYOUT | -28 | failed to calculate the structure/union layout |
| TERR_BAD_GROUPS | -29 | bad group sizes for bitmask enum |
| TERR_BAD_SERIAL | -30 | enum value has too many serials |
| TERR_ALIEN_NAME | -31 | enum member name is used in another enum |
| TERR_STOCK | -32 | stock type info cannot be modified |
| TERR_ENUM_SIZE | -33 | bad enum size |
| TERR_NOT_IMPL | -34 | not implemented |
| TERR_TYPE_WORSE | -35 | the new type is worse than the old type |
| TERR_BAD_FX_SIZE | -36 | cannot extend struct beyond fixed size |
This section gives examples of how to port some ida_struct and ida_enum functions using ida_typeinf.
The following code can be used as an example of how to replace ida_struct.del_struct_members.
def del_struct_members(sid, offset1, offset2):
tif = ida_typeinf.tinfo_t()
if tif.get_type_by_tid(sid) and tif.is_udt():
udm = ida_typeinf.udm_t()
udm.offset = offset1 * 8
idx1 = tif.find_udm(udm, ida_typeinf.STRMEM_OFFSET)
udm = ida_typeinf.udm_t()
udm.offset = offset2 * 8
idx2 = tif.find_udm(udm, ida_typeinf.STRMEM_OFFSET)
return tif.del_udms(idx1, idx2)The following code can be used as an example of how to replace ida_struct.get_member_by_fullname.
def get_member_by_fullname(fullname):
udm = ida_typeinf.udm_t()
idx = ida_typeinf.get_udm_by_fullname(udm, fullname)
if idx == -1:
return None
else:
return udmThe following code can be used as an example of how to replace ida_struct.get_struc_qty.
def get_struc_qty():
count = 0
limit = ida_typeinf.get_ordinal_limit()
for i in range(1, limit):
tif = ida_typeinf.tinfo_t()
if not tif.get_numbered_type(i, ida_typeinf.BTF_STRUCT):
continue
else:
count += 1
return countThe following code can be used as an example of how to replace ida_struct.is_special_member.
def is_special_member(member_id):
tif = ida_typeing.tinfo_t()
udm = ida_typeinf.udm_t()
if tif.get_udm_by_tid(udm, member_id) != -1:
return udm.is_special_member()
return FalseThe following code can be used as an example of how to replace ida_struct.get_sptr.
def get_sptr(udm):
tif = udm.type
if tif.is_udt() and tif.is_struct():
return tif
else:
return Nonedef list_enum_members(name)
tid = idc.get_struc_id(name)
if not tid == ida_idaapi.BADADDR:
for (offset, name, size) in idautils.StructMembers(tid):
print(f'Member {name} at offset {offset} of size {size}')def list_struct_members2(name):
til = ida_typeinf.get_idati()
tif = ida_typeinf.tinfo_t()
if not tif.get_named_type(til, name, ida_typeinf.BTF_STRUCT, True, False):
print(f"'{name}' is not a structure")
elif tif.is_typedef():
print(f"'{name}' is not a (non typedefed) structure.")
else:
udt = ida_typeinf.udt_type_data_t()
if tif.get_udt_details(udt):
idx = 0
print(f'Listing the {name} structure {udt.size()} field names:')
for udm in udt:
print(f'Field {idx}: {udm.name}')
idx += 1
else:
print(f"Unable to get udt details for structure '{name}'")def list_enum_members(name):
til = ida_typeinf.get_idati()
tif = ida_typeinf.tinfo_t()
if not tif.get_named_type(til, name, ida_typeinf.BTF_ENUM, True, False):
print(f"'{name}' is not an enum")
elif tif.is_typedef():
print(f"'{name}' is not a (non typedefed) enum.")
else:
edt = ida_typeinf.enum_type_data_t()
if tif.get_enum_details(edt):
idx = 0
bitfield = ''
if edt.is_bf():
bitfield = '(bitfield)'
print(f"Listing the '{name}' {bitfield} enum {edt.size()} field names:")
for edm in edt:
print(f'Field {idx}: {edm.name} = {edm.value}')
idx += 1
else:
print(f"Unable to get udt details for enum '{name}'")func = ida_funcs.get_func(here())
if func:
func_name = ida_funcs.get_func_name(func.start_ea)
frame_tif = ida_typeinf.tinfo_t()
if ida_frame.get_func_frame(frame_tif, func):
frame_udt = ida_typeinf.udt_type_data_t()
if frame_tif.get_udt_details(frame_udt):
print('List frame information:')
print('-----------------------')
print(f'{func_name} @ {func.start_ea:x} framesize {frame_tif.get_size():x}')
print(f'Local variable size: {func.frsize:x}')
print(f'Saved registers: {func.frregs:x}')
print(f'Argument size: {func.argsize:x}')
print('{')
idx = 0
for udm in frame_udt:
print(f'\t[{idx}] {udm.name}: soff={udm.offset//8:x} eof={udm.end()//8:x} {udm.type.dstr()}')
idx += 1
print('}')
else:
print(f'{here():x} is not inside a function.')func = ida_funcs.get_func(here())
if func:
print(f'Function @ {func.start_ea:x}')
frame_tif = ida_typeinf.tinfo_t()
if ida_frame.get_func_frame(frame_tif, func):
print('Frame found')
nmembers = frame_tif.get_udt_nmembers()
print(f'Frame has {nmembers} members')
if nmembers > 0:
frame_udt = ida_typeinf.udt_type_data_t()
if frame_tif.get_udt_details(frame_udt):
for frame_udm in frame_udt:
start_off = frame_udm.begin() // 8
end_off = frame_udm.end() // 8
xreflist = ida_frame.xreflist_t()
ida_frame.build_stkvar_xrefs(xreflist, func, start_off, end_off)
size = xreflist.size()
print(f'{frame_udm.name} stack variable starts @ {start_off:x}, ends @ {end_off:x}, xref size: {size}')
for idx in range(size):
match xreflist[idx].type:
case ida_xref.dr_R:
type = 'READ'
case ida_xref.dr_W:
type = 'WRITE'
case _:
type = 'UNK'
print(f'\t[{idx}]: xref @ {xreflist[idx].ea:x} of type {type}')
else:
print('Unable to get the frame details.')
else:
print('No members found.')
else:
print('No function under the cursor')struct_str = """struct pcap_hdr_s {
uint32_t magic_number; /* magic number */
uint16_t version_major; /* major version number */
uint16_t version_minor; /* minor version number */
int32_t thiszone; /* GMT to local correction */
uint32_t sigfigs; /* accuracy of timestamps */
uint32_t snaplen; /* max length of captured packets, in octets */
uint32_t network; /* data link type */
};"""
tif = ida_typeinf.tinfo_t()
if tif.get_named_type(None, 'pcap_hdr_s'):
ida_typeinf.del_named_type(None, 'pcap_hdr_s', ida_typeinf.NTF_TYPE)
ida_typeinf.idc_parse_types(struct_str, 0)
if not tif.get_named_type(None, 'pcap_hdr_s'):
print('Unable to retrieve pcap_hdr_s structure')tif = ida_typeinf.tinfo_t()
if tif.get_named_type(None, 'pcaprec_hdr_s'):
ida_typeinf.del_named_type(None, 'pcaprec_hdr_s', ida_typeinf.NTF_TYPE)
field_list = [('ts_sec', ida_typeinf.BTF_UINT32),
('ts_usec', ida_typeinf.BTF_UINT32),
('incl_len', ida_typeinf.BTF_UINT32),
('orig_len', ida_typeinf.BTF_UINT32)]
udt = ida_typeinf.udt_type_data_t()
udm = ida_typeinf.udm_t()
for (name, type) in field_list:
udm.name = name
udm.type = ida_typeinf.tinfo_t(type)
udt.push_back(udm)
if tif.create_udt(udt):
tif.set_named_type(None, 'pcaprec_hdr_s')tif = ida_typeinf.tinfo_t()
if tif.get_named_type(None, 'my_union'):
ida_typeinf.del_named_type(None, 'my_union', ida_typeinf.NTF_TYPE)
tif = ida_typeinf.tinfo_t()
udt = ida_typeinf.udt_type_data_t()
field_list = [('member1', ida_typeinf.BTF_INT32),
('member2', ida_typeinf.BTF_CHAR),
('member3', ida_typeinf.BTF_FLOAT)]
udt.is_union = True
udm = ida_typeinf.udm_t()
for (name, type) in field_list:
udm.name = name
udm.type = ida_typeinf.tinfo_t(type)
udt.push_back(udm)
tif.get_named_type(None, 'pcap_hdr_s')
if tif.create_ptr(tif):
udm.name = 'header_ptr'
udm.type = tif
udt.push_back(udm)
tif.clear()
tif.create_udt(udt, ida_typeinf.BTF_UNION)
tif.set_named_type(None, 'my_union')edt = ida_typeinf.enum_type_data_t()
edm = ida_typeinf.edm_t()
for name, value in [('field1', 1), ('field2', 2), ('field3', 4)]:
edm.name = name
edm.value = value
edt.push_back(edm)
tif = ida_typeinf.tinfo_t()
if tif.create_enum(edt):
tif.set_enum_is_bitmask(ida_typeinf.tinfo_t.ENUMBM_ON)
tif.set_named_type(None, 'bmenum')tif = ida_typeinf.tinfo_t(ida_typeinf.BTF_INT)
if tif.create_array(tif, 5, 0):
type = tif._print()
tif.set_named_type(None, 'my_int_array1')atd = ida_typeinf.array_type_data_t()
atd.base = 0
atd.nelems = 5
atd.elem_type = ida_typeinf.tinfo_t(ida_typeinf.BTF_INT)
tif = ida_typeinf.tinfo_t()
if tif.create_array(atd):
type = tif._print()
tif.set_named_type(None, 'my_int_array2')class lt_logger_hooks_t(ida_idp.IDB_Hooks):
def __init__(self):
ida_idp.IDB_Hooks.__init__(self)
self.inhibit_log = 0
def _format_value(self, v):
return str(v)
def _log(self, msg=None):
if self.inhibit_log <= 0:
if msg:
print(f'>>> lt_logger_hooks_f: {msg}')
else:
stack = inspect.stack()
frame, _, _, _, _, _ = stack[1]
args, _, _, values = inspect.getargvalues(frame)
method_name = inspect.getframeinfo(frame)[2]
argstrs = []
for arg in args[1:]:
argstrs.append("%s=%s" % (arg, self._format_value(values[arg])))
print(f'>>> lt_logger_hooks_t.{method_name}: {", ".join(args)}')
return 0
def lt_udm_created(self, udtname, udm):
msg = f'UDM {udm.name} has been created in UDT {udtname}'
return self._log(msg)
def lt_udm_deleted(self, udtname, udm_tid):
msg = f'UDM tid {udm_tid:x} has been deleted from {udtname}'
return self._log(msg)
def lt_udm_renamed(self, udtname, udm, oldname):
msg = f'UDM {oldname} from UDT {udtname} has been renamed to {udm.name}'
return self._log(msg)
def lt_udm_changed(self, udtname, udm_tid, udmold, udmnew):
return self._log()
# Remove an existing hook on second run
try:
idp_hook_stat = "un"
print("Local type IDB hook: checking for hook...")
lthook
print("Local type IDB hook: unhooking....")
idp_hook_stat2 = ""
lthook.unhook()
del lthook
except:
print("local type IDB hook: not installed, installing now....")
idp_hook_stat = ""
idp_hook_stat2 = "un"
lthook = lt_logger_hooks_t()
lthook.hook()
print(f'Local type IDB hook {idp_hook_stat}installed. Run the script again to {idp_hook_stat2}install')class frame_logger_hooks_t(ida_idp.IDB_Hooks):
def __init__(self):
ida_idp.IDB_Hooks.__init__(self)
self.inhibit_log = 0
def _format_value(self, v):
return str(v)
def _log(self, msg=None):
if self.inhibit_log <= 0:
if msg:
print(f'>>> frame_logger_hooks_f: {msg}')
else:
stack = inspect.stack()
frame, _, _, _, _, _ = stack[1]
args, _, _, values = inspect.getargvalues(frame)
method_name = inspect.getframeinfo(frame)[2]
argstrs = []
for arg in args[1:]:
argstrs.append("%s=%s" % (arg, self._format_value(values[arg])))
print(f'>>> frame_logger_hooks_t.{method_name}: {", ".join(args)}')
return 0
def frame_udm_created(self, func_ea, udm):
return self._log()
def frame_udm_deleted(self, func_ea, udm_tid, udm):
return self._log()
def frame_udm_renamed(self, func_ea, udm, oldname):
return self._log()
def frame_udm_changed(self, func_ea, udm_tid, udmold, udmnew):
return self._log()
# Remove an existing hook on second run
try:
frame_idp_hook_stat = "un"
print("Frame IDP hook: checking for hook...")
framehook
print("Frame IDP hook: unhooking....")
frame_idp_hook_stat2 = ""
framehook.unhook()
del framehook
except:
print("Frame IDP hook: not installed, installing now....")
frame_idp_hook_stat = ""
frame_idp_hook_stat2 = "un"
framehook = frame_logger_hooks_t()
framehook.hook()
print(f'Frame IDB hook {frame_idp_hook_stat}installed. Run the script again to {frame_idp_hook_stat2}install')