diff --git a/examples/core/actions.py b/examples/core/actions.py index 86274f9..547dcb9 100644 --- a/examples/core/actions.py +++ b/examples/core/actions.py @@ -18,8 +18,6 @@ keywords: actions see_also: add_hotkey """ -from __future__ import print_function - import ida_kernwin class SayHi(ida_kernwin.action_handler_t): diff --git a/examples/core/add_hotkey.py b/examples/core/add_hotkey.py index a79e146..1ef2e03 100644 --- a/examples/core/add_hotkey.py +++ b/examples/core/add_hotkey.py @@ -16,8 +16,6 @@ keywords: actions see_also: actions """ -from __future__ import print_function - import ida_kernwin def hotkey_pressed(): diff --git a/examples/core/add_idc_hotkey.py b/examples/core/add_idc_hotkey.py index e17b920..acf3ebb 100644 --- a/examples/core/add_idc_hotkey.py +++ b/examples/core/add_idc_hotkey.py @@ -11,8 +11,6 @@ keywords: actions see_also: actions, add_hotkey """ -from __future__ import print_function - import ida_expr import ida_kernwin diff --git a/examples/core/bin_search.py b/examples/core/bin_search.py index 8a0a892..7b4c77b 100644 --- a/examples/core/bin_search.py +++ b/examples/core/bin_search.py @@ -15,9 +15,6 @@ description: encoding, or as UTF-16.) """ -from __future__ import print_function - - import ida_kernwin import ida_bytes import ida_ida diff --git a/examples/core/colorize_disassembly.py b/examples/core/colorize_disassembly.py index 273559b..283c3a6 100644 --- a/examples/core/colorize_disassembly.py +++ b/examples/core/colorize_disassembly.py @@ -16,9 +16,6 @@ keywords: coloring, idc see_also: colorize_disassembly_on_the_fly """ -from __future__ import print_function - - BG_BLUE = 0xc02020 BG_GREEN = 0x208020 BG_RED = 0x2020c0 diff --git a/examples/core/colorize_disassembly_on_the_fly.py b/examples/core/colorize_disassembly_on_the_fly.py index 1028043..ebaaf9c 100644 --- a/examples/core/colorize_disassembly_on_the_fly.py +++ b/examples/core/colorize_disassembly_on_the_fly.py @@ -101,12 +101,13 @@ class on_the_fly_coloring_hooks_t(ida_kernwin.UI_Hooks): del self.by_widget[title] -class carousel_color_ah_t(): +class carousel_color_ah_t(ida_kernwin.action_handler_t): """ The action that will be invoked by IDA when the user activates its shortcut. """ def __init__(self, hooks): + ida_kernwin.action_handler_t.__init__(self) self.hooks = hooks def activate(self, ctx): diff --git a/examples/core/create_structure_programmatically.py b/examples/core/create_structure_programmatically.py index bf34825..37a899c 100644 --- a/examples/core/create_structure_programmatically.py +++ b/examples/core/create_structure_programmatically.py @@ -8,7 +8,6 @@ description: author: Gergely Erdelyi (gergely.erdelyi@d-dome.net) """ -from __future__ import print_function #--------------------------------------------------------------------- # Structure test # diff --git a/examples/core/custom_cli.py b/examples/core/custom_cli.py index 7eae682..c20c0ad 100644 --- a/examples/core/custom_cli.py +++ b/examples/core/custom_cli.py @@ -9,7 +9,6 @@ description: It provides an example tab completion support. """ -from __future__ import print_function # ----------------------------------------------------------------------- # This is an example illustrating how to implement a CLI # diff --git a/examples/core/custom_data_types_and_formats.py b/examples/core/custom_data_types_and_formats.py index 796f92b..81fedd7 100644 --- a/examples/core/custom_data_types_and_formats.py +++ b/examples/core/custom_data_types_and_formats.py @@ -11,8 +11,6 @@ description: one format for a specific 'custom data type'.) """ -from __future__ import print_function - import ida_bytes import ida_idaapi import ida_lines diff --git a/examples/core/dump_extra_comments.py b/examples/core/dump_extra_comments.py index 3224418..6205282 100644 --- a/examples/core/dump_extra_comments.py +++ b/examples/core/dump_extra_comments.py @@ -9,8 +9,6 @@ description: the previous and next extra comments. """ -from __future__ import print_function - import ida_lines import ida_kernwin diff --git a/examples/core/dump_flowchart.py b/examples/core/dump_flowchart.py index f226138..dd705cf 100644 --- a/examples/core/dump_flowchart.py +++ b/examples/core/dump_flowchart.py @@ -10,8 +10,6 @@ description: `ida_gdl.FlowChart` type. """ -from __future__ import print_function - import ida_gdl import ida_funcs import ida_kernwin diff --git a/examples/core/dump_selection.py b/examples/core/dump_selection.py index ad717dc..3fb1871 100644 --- a/examples/core/dump_selection.py +++ b/examples/core/dump_selection.py @@ -15,8 +15,6 @@ description: """ -from __future__ import print_function - import ida_kernwin import ida_lines diff --git a/examples/core/extend_idc.py b/examples/core/extend_idc.py index 25d45cd..982006c 100644 --- a/examples/core/extend_idc.py +++ b/examples/core/extend_idc.py @@ -14,8 +14,6 @@ description: `pow(3, 7)` """ -from __future__ import print_function - import ida_expr if ida_expr.add_idc_func( diff --git a/examples/core/install_user_defined_prefix.py b/examples/core/install_user_defined_prefix.py index 1f71d52..8ddf136 100644 --- a/examples/core/install_user_defined_prefix.py +++ b/examples/core/install_user_defined_prefix.py @@ -8,8 +8,6 @@ description: `ida_lines.user_defined_prefix_t` helper type. """ -from __future__ import print_function - import ida_lines import ida_idaapi diff --git a/examples/core/list_imports.py b/examples/core/list_imports.py index 8130261..72d974e 100644 --- a/examples/core/list_imports.py +++ b/examples/core/list_imports.py @@ -5,8 +5,6 @@ description: Using the API to enumerate file imports. """ -from __future__ import print_function - import ida_nalt nimps = ida_nalt.get_import_module_qty() diff --git a/examples/core/list_patched_bytes.py b/examples/core/list_patched_bytes.py index cb6bc42..af7ca82 100644 --- a/examples/core/list_patched_bytes.py +++ b/examples/core/list_patched_bytes.py @@ -6,8 +6,6 @@ description: that were patched using IDA. """ -from __future__ import print_function - import ida_bytes import ida_idaapi diff --git a/examples/core/list_segment_functions.py b/examples/core/list_segment_functions.py index eb9562f..e32ce57 100644 --- a/examples/core/list_segment_functions.py +++ b/examples/core/list_segment_functions.py @@ -10,7 +10,6 @@ keywords: xrefs see_also: list_segment_functions_using_idautils """ -from __future__ import print_function # # Reference Lister # diff --git a/examples/core/list_segment_functions_using_idautils.py b/examples/core/list_segment_functions_using_idautils.py index 09e2b9c..c983e46 100644 --- a/examples/core/list_segment_functions_using_idautils.py +++ b/examples/core/list_segment_functions_using_idautils.py @@ -13,7 +13,6 @@ keywords: xrefs see_also: list_segment_functions """ -from __future__ import print_function # # Reference Lister # diff --git a/examples/core/list_strings.py b/examples/core/list_strings.py index 3032a01..8cb2a3c 100644 --- a/examples/core/list_strings.py +++ b/examples/core/list_strings.py @@ -9,7 +9,6 @@ description: see_also: show_selected_strings """ -from __future__ import print_function import ida_nalt import idautils diff --git a/examples/core/register_timer.py b/examples/core/register_timer.py index dd1988c..13421d8 100644 --- a/examples/core/register_timer.py +++ b/examples/core/register_timer.py @@ -5,8 +5,6 @@ description: Register (possibly repeating) timers. """ -from __future__ import print_function - import ida_kernwin # ------------------------------------------------------------------------- diff --git a/examples/core/trigger_actions_programmatically.py b/examples/core/trigger_actions_programmatically.py index 3f9e5a7..eafaa55 100644 --- a/examples/core/trigger_actions_programmatically.py +++ b/examples/core/trigger_actions_programmatically.py @@ -15,8 +15,6 @@ description: keywords: actions """ -from __future__ import print_function - import ida_kernwin # -------------------------------------------------------------------------- diff --git a/examples/cvt64/py_cvt64_sample.py b/examples/cvt64/py_cvt64_sample.py new file mode 100755 index 0000000..11ff7e8 --- /dev/null +++ b/examples/cvt64/py_cvt64_sample.py @@ -0,0 +1,82 @@ +""" +summary: This file contains the CVT64 examples. + +description: + For more infortmation see SDK/plugins/cvt64_sample example +""" + +import idaapi +import ida_idaapi +import ida_netnode + +SAMPLE_NETNODE_NAME = "$ cvt64 py_sample netnode" +DEVICE_INDEX = idaapi.BADADDR # -1 +IDPFLAGS_INDEX = idaapi.BADADDR # -1 +HASH_COMMENT = "Comment" +HASH_ADDRESS = "Address" + +#-------------------------------------------------------------------------- +class idp_listener_t(idaapi.IDP_Hooks): + def __init__(self): + idaapi.IDP_Hooks.__init__(self) + + def ev_cvt64_hashval(self, node, tag, name, data): + helper = idaapi.netnode(SAMPLE_NETNODE_NAME) + if helper == node and tag == ida_netnode.htag: + if name == HASH_COMMENT: + comment = helper.hashstr(name) + helper.hashset_buf(name, comment) + return 1 + if name == HASH_ADDRESS: + address = helper.hashval_long(name) + if address == ida_idaapi.BADADDR32: + address = ida_idaapi.BADADDR + helper.hashset_idx(name, address) + return 1 + return 0 + + def ev_cvt64_supval(self, node, tag, idx, data): + helper = idaapi.netnode(SAMPLE_NETNODE_NAME) + if helper == node: + if tag == ida_netnode.stag and idx == ida_idaapi.BADADDR32: + helper.supset(DEVICE_INDEX, data) + return 1 + if tag == ida_netnode.atag and len(data): + if idx == ida_idaapi.BADADDR32: + idx = IDPFLAGS_INDEX + val = int.from_bytes(data, 'little') + if val == ida_idaapi.BADADDR32: + val = ida_idaapi.BADADDR + helper.altset(idx, val) + return 1 + return 0 + +#-------------------------------------------------------------------------- +# This class is instantiated once per each opened database. +class cvt64_ctx_t(idaapi.plugmod_t): + + def __init__(self): + self.prochook = idp_listener_t() + self.prochook.hook() + + def __del__(self): + self.prochook.unhook() + + def run(self, arg): + pass + +#-------------------------------------------------------------------------- +# This class is instantiated when IDA loads the plugin. +class cvt64_sample_t(idaapi.plugin_t): + flags = idaapi.PLUGIN_MULTI | idaapi.PLUGIN_MOD + comment = "IDAPython: An example how to implement CVT64 functionality" + wanted_name = "IDAPython: CVT64 sample" + wanted_hotkey = "" + help = "" + + def init(self): + return cvt64_ctx_t() + +#-------------------------------------------------------------------------- +def PLUGIN_ENTRY(): + return cvt64_sample_t() diff --git a/examples/debugging/appcall/simple_appcall_linux.py b/examples/debugging/appcall/simple_appcall_linux.py index ff4150d..b143be6 100644 --- a/examples/debugging/appcall/simple_appcall_linux.py +++ b/examples/debugging/appcall/simple_appcall_linux.py @@ -20,8 +20,6 @@ description: Note: the real body of code is in `simple_appcall_common.py`. """ -from __future__ import print_function - import os import sys sys.path.append(os.path.dirname(__file__)) diff --git a/examples/debugging/appcall/simple_appcall_win.py b/examples/debugging/appcall/simple_appcall_win.py index 3f9bcac..5861e3f 100644 --- a/examples/debugging/appcall/simple_appcall_win.py +++ b/examples/debugging/appcall/simple_appcall_win.py @@ -20,8 +20,6 @@ description: Note: the real body of code is in `simple_appcall_common.py`. """ -from __future__ import print_function - import os import sys sys.path.append(os.path.dirname(__file__)) diff --git a/examples/debugging/dbghooks/automatic_steps.py b/examples/debugging/dbghooks/automatic_steps.py index 9d58d86..9044143 100644 --- a/examples/debugging/dbghooks/automatic_steps.py +++ b/examples/debugging/dbghooks/automatic_steps.py @@ -7,8 +7,6 @@ description: execution. """ -from __future__ import print_function - import ida_dbg import ida_ida import ida_lines diff --git a/examples/debugging/show_debug_names.py b/examples/debugging/show_debug_names.py index 6875e6d..71c5788 100644 --- a/examples/debugging/show_debug_names.py +++ b/examples/debugging/show_debug_names.py @@ -6,8 +6,6 @@ description: symbols that the process being debugged, provides. """ -from __future__ import print_function - import ida_dbg import ida_ida import ida_name diff --git a/examples/hexrays/decompile_entry_points.py b/examples/hexrays/decompile_entry_points.py index 504338b..e363ea4 100644 --- a/examples/hexrays/decompile_entry_points.py +++ b/examples/hexrays/decompile_entry_points.py @@ -10,8 +10,6 @@ description: idat -Ldecompile.log -Sdecompile_entry_points.py -c file """ -from __future__ import print_function - import ida_ida import ida_auto import ida_loader diff --git a/examples/hexrays/vds1.py b/examples/hexrays/vds1.py index 6c58827..668bec8 100644 --- a/examples/hexrays/vds1.py +++ b/examples/hexrays/vds1.py @@ -2,8 +2,6 @@ summary: decompile & print current function. """ -from __future__ import print_function - import ida_hexrays import ida_lines import ida_funcs diff --git a/examples/hexrays/vds3.py b/examples/hexrays/vds3.py index 72cb78b..b7558cb 100644 --- a/examples/hexrays/vds3.py +++ b/examples/hexrays/vds3.py @@ -33,8 +33,6 @@ description: author: EiNSTeiN_ (einstein@g3nius.org) """ -from __future__ import print_function - import idautils import ida_kernwin diff --git a/examples/hexrays/vds4.py b/examples/hexrays/vds4.py index 2997403..3249d8f 100644 --- a/examples/hexrays/vds4.py +++ b/examples/hexrays/vds4.py @@ -15,8 +15,6 @@ description: author: EiNSTeiN_ (einstein@g3nius.org) """ -from __future__ import print_function - import ida_kernwin import ida_hexrays import ida_bytes diff --git a/examples/hexrays/vds5.py b/examples/hexrays/vds5.py index 95d3286..e467040 100644 --- a/examples/hexrays/vds5.py +++ b/examples/hexrays/vds5.py @@ -12,8 +12,6 @@ description: request that ida displays that using `ida_gdl.display_gdl`. """ -from __future__ import print_function - import ida_pro import ida_hexrays import ida_kernwin diff --git a/examples/hexrays/vds6.py b/examples/hexrays/vds6.py index 23510f1..483bd48 100644 --- a/examples/hexrays/vds6.py +++ b/examples/hexrays/vds6.py @@ -8,8 +8,6 @@ description: Note: this is rather crude, not quite "pythonic" code. """ -from __future__ import print_function - import idautils import idc import ida_idaapi diff --git a/examples/hexrays/vds7.py b/examples/hexrays/vds7.py index c1c2617..ddc296a 100644 --- a/examples/hexrays/vds7.py +++ b/examples/hexrays/vds7.py @@ -8,8 +8,6 @@ description: author: EiNSTeiN_ (einstein@g3nius.org) """ -from __future__ import print_function - import ida_hexrays class cblock_visitor_t(ida_hexrays.ctree_visitor_t): diff --git a/examples/hexrays/vds_create_hint.py b/examples/hexrays/vds_create_hint.py index 2dea8b6..f5326d9 100644 --- a/examples/hexrays/vds_create_hint.py +++ b/examples/hexrays/vds_create_hint.py @@ -26,7 +26,7 @@ class hint_hooks_t(ida_hexrays.Hexrays_Hooks): elif cit == ida_hexrays.VDI_EXPR: ce = vu.item.e if ce.op == ida_hexrays.cot_call: - return 2, "==> ", 1 + return 0, "==> ", 1 if ce.op == ida_hexrays.cit_if: return 1, "condition", 1 return 0 diff --git a/examples/hexrays/vds_hooks.py b/examples/hexrays/vds_hooks.py index ee5a7b9..8163a34 100644 --- a/examples/hexrays/vds_hooks.py +++ b/examples/hexrays/vds_hooks.py @@ -14,8 +14,6 @@ description: see_also: curpos_details """ -from __future__ import print_function - import inspect import ida_idaapi diff --git a/examples/hexrays/vds_xrefs.py b/examples/hexrays/vds_xrefs.py index f56723b..4b6ada2 100644 --- a/examples/hexrays/vds_xrefs.py +++ b/examples/hexrays/vds_xrefs.py @@ -10,7 +10,6 @@ description: author: EiNSTeiN_ (einstein@g3nius.org) """ -from __future__ import print_function import ida_kernwin import ida_hexrays @@ -168,13 +167,11 @@ class XrefsForm(ida_kernwin.PluginForm): addresses = [] for ea in idautils.Functions(): - cfunc = ida_hexrays.decompile(ea) + cfunc = ida_hexrays.decompile(ea, flags=ida_hexrays.DECOMP_GXREFS_FORCE) if not cfunc: print('Decompilation of %x failed' % (ea, )) continue - print(str(cfunc)) # KLUDGE - for citem in cfunc.treeitems: citem = citem.to_specific_type if not (type(citem) == ida_hexrays.cexpr_t and citem.opname in ('memptr', 'memref')): diff --git a/examples/idbs/be_ornot_be.i64 b/examples/idbs/be_ornot_be.i64 new file mode 100644 index 0000000..b065f91 Binary files /dev/null and b/examples/idbs/be_ornot_be.i64 differ diff --git a/examples/idphooks/ana_emu_out.py b/examples/idphooks/ana_emu_out.py index f33bb26..e7c0741 100644 --- a/examples/idphooks/ana_emu_out.py +++ b/examples/idphooks/ana_emu_out.py @@ -9,8 +9,6 @@ description: See Linux/arch/arm/include/asm/bug.h for more info """ -from __future__ import print_function - import ida_idp import ida_bytes import ida_segregs diff --git a/examples/idphooks/assemble.py b/examples/idphooks/assemble.py index e617ee8..0078bbd 100644 --- a/examples/idphooks/assemble.py +++ b/examples/idphooks/assemble.py @@ -8,7 +8,6 @@ description: * "nothing" -> nop """ -from __future__ import print_function import ida_idp import idautils diff --git a/examples/index.html b/examples/index.html index cd284e8..1341c91 100644 --- a/examples/index.html +++ b/examples/index.html @@ -404,6 +404,7 @@ across 4 predefined colors (and return to the "no color" state.)
  • ida_kernwin.CK_EXTRA8
  • ida_kernwin.UI_Hooks
  • ida_kernwin.action_desc_t
  • +
  • ida_kernwin.action_handler_t
  • ida_kernwin.get_current_viewer
  • ida_kernwin.get_custom_viewer_location
  • ida_kernwin.get_custom_viewer_place_xcoord
  • @@ -1387,6 +1388,43 @@ menu, so as to keep focus on "IDA View-A" and have the + +

    Category: cvt64

    +
    +
    +
    + + + py_cvt64_sample: This file contains the CVT64 examples. +
    +
    + +
    +For more infortmation see SDK/plugins/cvt64_sample example
    +
    + +
      +
    • Category: cvt64
    • +
    • Summary: This file contains the CVT64 examples.
    • +
    • View on GitHub
    • + + + +
    • APIs used +
        +
      • ida_idaapi.BADADDR
      • +
      • ida_idaapi.BADADDR32
      • +
      • ida_netnode.atag
      • +
      • ida_netnode.htag
      • +
      • ida_netnode.stag
      • +
      +
    • + + +
    +
    +
    +

    Category: debugging

    @@ -2944,6 +2982,7 @@ pressed in the Decompiler window.
  • APIs used +
  • + +
    +
    + + + paint_over_graph: Custom painting on top of graph view edges +
    +
    + +
    +This sample registers an action enabling painting of a recognizable
    +string of text over horizontal nodes edge sections beyond a
    +satisfying size threshold.
    +
    +In a disassembly view, open the context menu and select
    +"Paint on edges". This should work for both graph disassembly,
    +and proximity browser.
    +
    +Using an "event filter", we will intercept paint events
    +targeted at the disassembly view, let it paint itself, and
    +then add our own markers along.
    +
    + +
    @@ -3430,7 +3527,7 @@ A few notes:
    -Using an "event filter", we'll intercept paint events
    +Using an "event filter", we will intercept paint events
     targeted at the navigation band widget, let it paint itself,
     and then add our own markers on top.
     
    @@ -3888,7 +3985,6 @@ The important bits to enable this are:
  • ida_kernwin.CH_CAN_INS
  • ida_kernwin.CH_HAS_DIRTREE
  • ida_kernwin.CH_MULTI
  • -
  • ida_kernwin.CH_NOIDB
  • ida_kernwin.Choose
  • ida_kernwin.Choose.ALL_CHANGED
  • ida_kernwin.Choose.CHCOL_DRAGHINT
  • diff --git a/examples/index.md b/examples/index.md index 2ea569c..c7a8263 100644 --- a/examples/index.md +++ b/examples/index.md @@ -303,6 +303,7 @@ coloring UI_Hooks * ida_kernwin.CK_EXTRA8 * ida_kernwin.UI_Hooks * ida_kernwin.action_desc_t +* ida_kernwin.action_handler_t * ida_kernwin.get_current_viewer * ida_kernwin.get_custom_viewer_location * ida_kernwin.get_custom_viewer_place_xcoord @@ -1120,6 +1121,34 @@ actions * ida_kernwin.msg * ida_kernwin.process_ui_action + + + + +## Category: cvt64 + +#### py_cvt64_sample +
    + This file contains the CVT64 examples. + +
    + +#### Source code +cvt64/py_cvt64_sample.py + +#### Category +cvt64 + +#### Description +For more infortmation see SDK/plugins/cvt64_sample example + +#### Uses +* ida_idaapi.BADADDR +* ida_idaapi.BADADDR32 +* ida_netnode.atag +* ida_netnode.htag +* ida_netnode.stag +
    @@ -2452,6 +2481,7 @@ ctxmenu Hexrays_Hooks #### Uses * ida_funcs.get_func_name +* ida_hexrays.DECOMP_GXREFS_FORCE * ida_hexrays.Hexrays_Hooks * ida_hexrays.USE_KEYBOARD * ida_hexrays.VDI_EXPR @@ -2859,6 +2889,56 @@ A few notes: * ida_kernwin.find_widget * ida_kernwin.process_ui_action + + + + +#### paint_over_graph +
    + Custom painting on top of graph view edges + +
    + +#### Source code +pyqt/paint_over_graph.py + +#### Category +pyqt + +#### Description +This sample registers an action enabling painting of a recognizable +string of text over horizontal nodes edge sections beyond a +satisfying size threshold. + +In a disassembly view, open the context menu and select +"Paint on edges". This should work for both graph disassembly, +and proximity browser. + +Using an "event filter", we will intercept paint events +targeted at the disassembly view, let it paint itself, and +then add our own markers along. + +#### Keywords +ctxmenu UI_Hooks + +#### Uses +* ida_graph.edge_t +* ida_graph.get_graph_viewer +* ida_graph.get_viewer_graph +* ida_graph.point_t +* ida_graph.viewer_get_gli +* ida_kernwin.AST_DISABLE_FOR_WIDGET +* ida_kernwin.AST_ENABLE_FOR_WIDGET +* ida_kernwin.BWN_DISASM +* ida_kernwin.PluginForm.FormToPyQtWidget +* ida_kernwin.UI_Hooks +* ida_kernwin.action_desc_t +* ida_kernwin.action_handler_t +* ida_kernwin.attach_action_to_popup +* ida_kernwin.get_widget_type +* ida_kernwin.register_action +* ida_moves.graph_location_info_t +
    @@ -2876,7 +2956,7 @@ A few notes: pyqt #### Description -Using an "event filter", we'll intercept paint events +Using an "event filter", we will intercept paint events targeted at the navigation band widget, let it paint itself, and then add our own markers on top. @@ -3242,7 +3322,6 @@ actions chooser folders * ida_kernwin.CH_CAN_INS * ida_kernwin.CH_HAS_DIRTREE * ida_kernwin.CH_MULTI -* ida_kernwin.CH_NOIDB * ida_kernwin.Choose * ida_kernwin.Choose.ALL_CHANGED * ida_kernwin.Choose.CHCOL_DRAGHINT diff --git a/examples/pyqt/paint_over_graph.py b/examples/pyqt/paint_over_graph.py new file mode 100644 index 0000000..dcd1d7f --- /dev/null +++ b/examples/pyqt/paint_over_graph.py @@ -0,0 +1,142 @@ +""" +summary: custom painting on top of graph view edges + +description: + This sample registers an action enabling painting of a recognizable + string of text over horizontal nodes edge sections beyond a + satisfying size threshold. + + In a disassembly view, open the context menu and select + "Paint on edges". This should work for both graph disassembly, + and proximity browser. + + Using an "event filter", we will intercept paint events + targeted at the disassembly view, let it paint itself, and + then add our own markers along. +""" + +from PyQt5 import QtCore +from PyQt5 import QtGui +from PyQt5 import QtWidgets + +import ida_graph +import ida_kernwin +import ida_moves + +edge_segment_threshold = 50 +text_color = QtGui.QColor(0, 0, 0) +text_antialiasing = True +verbose = False + +class painter_t(QtCore.QObject): + def __init__(self, w, verbose=False): + QtCore.QObject.__init__(self) + self.idaview = w + self.idaview_pyqt = ida_kernwin.PluginForm.FormToPyQtWidget(w) + self.target = self.idaview_pyqt.viewport() + self.target.installEventFilter(self) + self.painting = False + + def eventFilter(self, receiver, event): + if not self.painting and \ + receiver == self.target and \ + event.type() == QtCore.QEvent.Paint: + # Send a paint event that we won't intercept + self.painting = True + try: + pev = QtGui.QPaintEvent(self.target.rect()) + QtWidgets.QApplication.instance().sendEvent(self.target, pev) + finally: + self.painting = False + + # now we can paint our items + viewer = ida_graph.get_graph_viewer(self.idaview) + graph = ida_graph.get_viewer_graph(viewer) + if graph: + painter = QtGui.QPainter(receiver) + if text_antialiasing: + painter.setRenderHints(QtGui.QPainter.TextAntialiasing) + else: + # this is primarily used for testing + font = painter.font() + font.setStyleStrategy(font.NoAntialias) + painter.setFont(font) + painter.setPen(text_color) + + # The edge layout info we retrieve will be in "graph + # coordinates". In order to transform those points to + # view coordinates we will need the graph location info + gli = ida_moves.graph_location_info_t() + ida_graph.viewer_get_gli(gli, viewer); + def to_view_coords(pt): + x = int((pt.x - gli.orgx) * gli.zoom) + y = int((pt.y - gli.orgy) * gli.zoom) + return ida_graph.point_t(x, y) + + # Let `src_node` be each visible node in the graph... + for src_node in range(graph.size()): + if not graph.is_visible_node(src_node): + continue + + # ...and `dst_node` be each visible node + # to which `src_node` is connected + for dst_node_idx in range(graph.nsucc(src_node)): + dst_node = graph.succ(src_node, dst_node_idx) + if not graph.is_visible_node(dst_node): + continue + + edge_info = graph.get_edge(ida_graph.edge_t(src_node, dst_node)) + if edge_info: + + # For all horizontal edge segments satisfying the length requirements... + for idx in range(len(edge_info.layout)-1): + src = to_view_coords(edge_info.layout[idx]) + dst = to_view_coords(edge_info.layout[idx+1]) + if src.y == dst.y and abs(src.x - dst.x) > edge_segment_threshold: + off = 6 + text = "%s -> %s (#%d)" % (src_node, dst_node, idx) + if verbose: + print("Painting \"%s\"" % text) + painter.drawText(min(src.x, dst.x) + off, src.y - off, text) + + painter.end() + + # ...and prevent the widget form painting itself again + return True + return QtCore.QObject.eventFilter(self, receiver, event) + +painter = None + +class paint_on_edges_t(ida_kernwin.action_handler_t): + def activate(self, ctx): + if self.get_idaview(ctx): + global painter + painter = painter_t(ctx.widget) + return 1 + return 0 + + def update(self, ctx): + return ida_kernwin.AST_ENABLE_FOR_WIDGET \ + if self.get_idaview(ctx) \ + else ida_kernwin.AST_DISABLE_FOR_WIDGET + + def get_idaview(self, ctx): + return ctx.widget if ctx.widget_type == ida_kernwin.BWN_DISASM else None + +action_name = "paint_over_graph:enable" +ida_kernwin.register_action( + ida_kernwin.action_desc_t( + action_name, + "Paint on edges", + paint_on_edges_t())) + +# +# Make sure our action is available for all disassembly views +# +class context_menu_hooks_t(ida_kernwin.UI_Hooks): + def finish_populating_widget_popup(self, widget, popup): + if ida_kernwin.get_widget_type(widget) == ida_kernwin.BWN_DISASM: + ida_kernwin.attach_action_to_popup(widget, popup, action_name, None) + +hooks = context_menu_hooks_t() +hooks.hook() diff --git a/examples/pyqt/paint_over_navbar.py b/examples/pyqt/paint_over_navbar.py index 1bca746..4b5fcd4 100644 --- a/examples/pyqt/paint_over_navbar.py +++ b/examples/pyqt/paint_over_navbar.py @@ -2,7 +2,7 @@ summary: custom painting on top of the navigation band description: - Using an "event filter", we'll intercept paint events + Using an "event filter", we will intercept paint events targeted at the navigation band widget, let it paint itself, and then add our own markers on top. """ diff --git a/examples/uihooks/log_misc_events.py b/examples/uihooks/log_misc_events.py index 6f489b5..e4eb4da 100644 --- a/examples/uihooks/log_misc_events.py +++ b/examples/uihooks/log_misc_events.py @@ -6,8 +6,6 @@ description: dump their information to the "Output" window """ -from __future__ import print_function - import inspect import ida_kernwin diff --git a/examples/widgets/forms/askusingform.py b/examples/widgets/forms/askusingform.py index 5855a64..646c876 100644 --- a/examples/widgets/forms/askusingform.py +++ b/examples/widgets/forms/askusingform.py @@ -11,7 +11,6 @@ description: keywords: forms """ -from __future__ import print_function # ----------------------------------------------------------------------- # This is an example illustrating how to use the Form class # (c) Hex-Rays diff --git a/examples/widgets/graphs/custom_graph_with_actions.py b/examples/widgets/graphs/custom_graph_with_actions.py index 722869c..e03027c 100644 --- a/examples/widgets/graphs/custom_graph_with_actions.py +++ b/examples/widgets/graphs/custom_graph_with_actions.py @@ -8,7 +8,6 @@ description: keywords: graph, actions """ -from __future__ import print_function # ----------------------------------------------------------------------- # This is an example illustrating how to use the user graphing functionality # in Python diff --git a/examples/widgets/graphs/sync_two_graphs.py b/examples/widgets/graphs/sync_two_graphs.py index a8657f8..1a487f5 100644 --- a/examples/widgets/graphs/sync_two_graphs.py +++ b/examples/widgets/graphs/sync_two_graphs.py @@ -14,8 +14,6 @@ keywords: graph, idaview see_also: wrap_idaview """ -from __future__ import print_function - import ida_kernwin import ida_moves import ida_graph diff --git a/examples/widgets/idaview/wrap_idaview.py b/examples/widgets/idaview/wrap_idaview.py index cf51056..a5acc70 100644 --- a/examples/widgets/idaview/wrap_idaview.py +++ b/examples/widgets/idaview/wrap_idaview.py @@ -10,8 +10,6 @@ keywords: idaview, graph see_also: custom_graph_with_actions, sync_two_graphs """ -from __future__ import print_function - # ----------------------------------------------------------------------- # (c) Hex-Rays diff --git a/examples/widgets/listings/custom_viewer.py b/examples/widgets/listings/custom_viewer.py index a5feb2a..b4258d0 100644 --- a/examples/widgets/listings/custom_viewer.py +++ b/examples/widgets/listings/custom_viewer.py @@ -12,8 +12,6 @@ description: keywords: listing, actions """ -from __future__ import print_function - import ida_kernwin import ida_lines diff --git a/examples/widgets/tabular_views/custom/choose.py b/examples/widgets/tabular_views/custom/choose.py index 38eb527..14d9c15 100644 --- a/examples/widgets/tabular_views/custom/choose.py +++ b/examples/widgets/tabular_views/custom/choose.py @@ -11,7 +11,6 @@ keywords: chooser, actions see_also: choose_multi, chooser_with_folders """ -from __future__ import print_function import ida_kernwin from ida_kernwin import Choose diff --git a/examples/widgets/tabular_views/custom/choose_multi.py b/examples/widgets/tabular_views/custom/choose_multi.py index 5af20e5..6f55678 100644 --- a/examples/widgets/tabular_views/custom/choose_multi.py +++ b/examples/widgets/tabular_views/custom/choose_multi.py @@ -9,10 +9,8 @@ keywords: chooser, actions see_also: choose, chooser_with_folders """ -from __future__ import print_function from ida_kernwin import Choose - class MyChoose(Choose): def __init__(self, title, nb = 5): diff --git a/examples/widgets/tabular_views/custom/chooser_with_folders.py b/examples/widgets/tabular_views/custom/chooser_with_folders.py index 686da79..f9ad2e9 100644 --- a/examples/widgets/tabular_views/custom/chooser_with_folders.py +++ b/examples/widgets/tabular_views/custom/chooser_with_folders.py @@ -80,7 +80,6 @@ SUPVAL_COL2_DATA_TAG = '2' class base_idapython_tree_view_t(ida_kernwin.Choose): def __init__(self, title, nitems=100, dirspec_log=True, flags=0): - flags |= ida_kernwin.CH_NOIDB flags |= ida_kernwin.CH_MULTI flags |= ida_kernwin.CH_HAS_DIRTREE ida_kernwin.Choose.__init__(self, diff --git a/examples/widgets/tabular_views/custom/func_chooser.py b/examples/widgets/tabular_views/custom/func_chooser.py index e94ce3b..1916d80 100644 --- a/examples/widgets/tabular_views/custom/func_chooser.py +++ b/examples/widgets/tabular_views/custom/func_chooser.py @@ -10,7 +10,6 @@ keywords: chooser, functions see_also: choose, choose_multi, chooser_with_folders """ -from __future__ import print_function import idautils import idc import ida_funcs diff --git a/idapython.cpp b/idapython.cpp index 5617494..08831cc 100644 --- a/idapython.cpp +++ b/idapython.cpp @@ -629,7 +629,7 @@ struct python_highlighter_t : public ida_syntax_highlighter_t int py_major = 0, py_minor= 0; qsscanf(Py_GetVersion(), "%d.%d", &py_major, &py_minor); if ( py_major >= 3 && py_minor >= 5 ) - add_keywords("async|await", HF_KEYWORD1); + add_keywords("async|await", HF_KEYWORD1); if ( py_major >= 3 && py_minor >= 10 ) add_keywords("match|case", HF_KEYWORD1); } @@ -984,7 +984,7 @@ bool idapython_plugin_t::init() // add new Python keywords as needed python_highlighter.add_new_keywords(); - + // remove current directory _prepare_sys_path(); diff --git a/idapython.script b/idapython.script index 1b587d8..5b90f1a 100644 --- a/idapython.script +++ b/idapython.script @@ -12,6 +12,10 @@ global: PyW_PyListToEa64Vec; PyW_PyListToSizeVec; PyW_PyListToStrVec; + PyW_from_jvalue_t; + PyW_to_jvalue_t; + PyW_from_jobj_t; + PyW_to_jobj_t; PyW_ShowCbErr; PyW_SizeVecToPyList; PyW_UvalVecToPyList; diff --git a/idapython_implib.def b/idapython_implib.def index 223fa81..b3f782e 100644 --- a/idapython_implib.def +++ b/idapython_implib.def @@ -13,6 +13,10 @@ EXPORTS PyW_PyListToEa64Vec PyW_PyListToSizeVec PyW_PyListToStrVec + PyW_from_jvalue_t + PyW_to_jvalue_t + PyW_from_jobj_t + PyW_to_jobj_t PyW_register_compiled_form PyW_ShowCbErr PyW_TryGetAttrString diff --git a/libpython3.tbd b/libpython3.tbd index a527a87..908492a 100644 --- a/libpython3.tbd +++ b/libpython3.tbd @@ -1,11 +1,11 @@ --- !tapi-tbd tbd-version: 4 -targets: [ arm64-macos ] +targets: [ arm64-macos, x86_64-macos ] install-name: '@executable_path/libpython3.link.dylib' current-version: 3.9 compatibility-version: 3.9 exports: - - targets: [ arm64-macos ] + - targets: [ arm64-macos, x86_64-macos ] symbols: [ _PyAST_CompileEx, _PyAST_CompileObject, _PyAST_FromNode, _PyAST_FromNodeObject, _PyAST_Validate, _PyArena_AddPyObject, _PyArena_Free, _PyArena_Malloc, _PyArena_New, _PyArg_Parse, _PyArg_ParseTuple, _PyArg_ParseTupleAndKeywords, diff --git a/makefile b/makefile index 6582073..eb8370f 100644 --- a/makefile +++ b/makefile @@ -102,8 +102,8 @@ else endif #---------------------------------------------------------------------- -ifdef __APPLE_SILICON__ - # set up a stub .tbd library to link against, see tbd.readme +ifdef __MAC__ + # use a stub .tbd library to link against, see tbd.md TBD_FILE = libpython$(PYTHON_VERSION_MAJOR).tbd # note: this path must be compatible with -L$(R) -lpython3 in pyplg.mak TBD_MODULE_DEP = $(R)$(TBD_FILE) @@ -149,7 +149,6 @@ ifdef DO_IDAMAKE_SIMPLIFY QGENIDAAPI = @echo $(call qcolor,genidaapi) $< && # QGENSWIGHEADER = @echo $(call qcolor,genswigheader) $< && # QINJECT_PYDOC = @echo $(call qcolor,inject_pydoc) $$< && # - QINJECT_BASE_HOOKS_FLAGS = @echo $(call qcolor,inject_base_hooks_flags) $< && # QPATCH_CODEGEN = @echo $(call qcolor,patch_codegen) $$< && # QPATCH_H_CODEGEN = @echo $(call qcolor,patch_h_codegen) $$< && # QPATCH_PYTHON_CODEGEN = @echo $(call qcolor,patch_python_codegen) $$< && # @@ -190,7 +189,7 @@ endif ifeq ($(OUT_OF_TREE_BUILD),) IDAT_CMD=TVHEADLESS=1 $(IDAT_PATH)$(SUFF64) else - IDAT_CMD=TVHEADLESS=1 IDAPYTHON_DYNLOAD_BASE=$(SDK_BIN_PATH) $(IDAT_PATH)$(SUFF64) + IDAT_CMD=TVHEADLESS=1 IDAPYTHON_DYNLOAD_BASE=$(R) $(IDAT_PATH)$(SUFF64) endif # envvar HAS_HEXRAYS must have been set by build.py if needed @@ -406,7 +405,7 @@ ifeq ($(OUT_OF_TREE_BUILD),) $(Q)$(CP) $? $@ DEST_SIP += $(DEST_SIP310_PYDLL) $(DEST_SIP310_PYI) - # sip for Python [3.11, ... + # sip for Python [3.11, 3.12) DEST_SIP311_DIR:=$(DEST_PYQT_DIR)/python_3.11 $(DEST_SIP311_DIR): -$(Q)if [ ! -d "$(DEST_SIP311_DIR)" ] ; then mkdir -p 2>/dev/null $(DEST_SIP311_DIR) ; fi @@ -418,20 +417,36 @@ ifeq ($(OUT_OF_TREE_BUILD),) $(Q)$(CP) $? $@ DEST_SIP += $(DEST_SIP311_PYDLL) $(DEST_SIP311_PYI) + # sip for Python [3.12, ... + DEST_SIP312_DIR:=$(DEST_PYQT_DIR)/python_3.12 + $(DEST_SIP312_DIR): + -$(Q)if [ ! -d "$(DEST_SIP312_DIR)" ] ; then mkdir -p 2>/dev/null $(DEST_SIP312_DIR) ; fi + DEST_SIP312_PYDLL:=$(DEST_SIP312_DIR)/$(SIP_PYDLL_FNAME) + DEST_SIP312_PYI:=$(DEST_SIP312_DIR)/$(SIP_PYI_FNAME) + $(DEST_SIP312_PYDLL): $(wildcard $(SIP312_TREE)/lib/python*/PyQt5/$(SIP_PYDLL_FNAME)) | $(DEST_SIP312_DIR) + $(Q)$(CP) $? $@ + $(DEST_SIP312_PYI): $(wildcard $(SIP312_TREE)/lib/python*/PyQt5/$(SIP_PYI_FNAME)) | $(DEST_SIP312_DIR) + $(Q)$(CP) $? $@ + DEST_SIP += $(DEST_SIP312_PYDLL) $(DEST_SIP312_PYI) + # And pick the right sip.so now (Python3 only; for Python2, we already put it in the right place) - ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 10; echo $$?),0) # ugh - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP311_PYDLL) + ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 11; echo $$?),0) # ugh + DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP312_PYDLL) else - ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 9; echo $$?),0) # ugh - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP310_PYDLL) + ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 10; echo $$?),0) # ugh + DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP311_PYDLL) else - ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 8; echo $$?),0) # ugh - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP39_PYDLL) + ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 9; echo $$?),0) # ugh + DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP310_PYDLL) else - ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 7; echo $$?),0) # ugh - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP38_PYDLL) + ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 8; echo $$?),0) # ugh + DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP39_PYDLL) else - DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP34_PYDLL) + ifeq ($(shell test $(PYTHON_VERSION_MINOR) -gt 7; echo $$?),0) # ugh + DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP38_PYDLL) + else + DEST_INSTALL_SIP_PYDLL:=$(DEST_SIP34_PYDLL) + endif endif endif endif @@ -652,11 +667,6 @@ find-pywraps-deps = $(wildcard pywraps/py_$(subst .i,,$(notdir $(1)))*.hpp) $(wi find-pydoc-patches-deps = $(wildcard tools/inject_pydoc/$(1).py) find-patch-codegen-deps = $(wildcard tools/patch_codegen/*$(1)*.py) -ADDITIONAL_PYWRAP_DEP_idaapi=$(ST_PYW)/py_idaapi.hpp -$(ST_PYW)/py_idaapi.hpp: pywraps/py_idaapi.hpp.in tools/inject_base_hooks_flags.py pywraps.hpp - $(QINJECT_BASE_HOOKS_FLAGS)$(PYTHON) tools/inject_base_hooks_flags.py -i $< -o $@ -f pywraps.hpp - - # Some .i files depend on some other .i files in order to be parseable by SWiG # (e.g., segregs.i imports range.i). Declare the list of such dependencies here # so they will be picked by the auto-generated rules. @@ -706,7 +716,7 @@ define make-module-rules --verbose > $(ST_WRAP)/ida_$(1).pydoc_injection # obj/x86_linux_gcc/swig/X.i - $(ST_SWIG)/$(1).i: $(addprefix $(F),$(call find-pywraps-deps,$(1))) $(ADDITIONAL_PYWRAP_DEP_$(1)) swig/$(1).i $(ST_SWIG_HEADER) $(SWIG_IFACE_$(1):%=$(ST_SWIG)/%.i) $(ST_SWIG_HEADER) tools/deploy.py $(PARSED_HEADERS_MARKER) + $(ST_SWIG)/$(1).i: $(addprefix $(F),$(call find-pywraps-deps,$(1))) swig/$(1).i $(ST_SWIG_HEADER) $(SWIG_IFACE_$(1):%=$(ST_SWIG)/%.i) $(ST_SWIG_HEADER) tools/deploy.py $(PARSED_HEADERS_MARKER) $(QDEPLOY)$(PYTHON) tools/deploy.py \ --pywraps $(ST_PYW) \ --template $$(subst $(F),,$$@) \ @@ -847,7 +857,11 @@ else DUMPDOC_IS_64:=False endif -PYDOC_INJECTIONS_IDAT_CMD=$(IDAT_CMD) $(BATCH_SWITCH) -S"$< $(ST_PYDOC_INJECTIONS) $(ST_WRAP) $(DUMPDOC_IS_64)" -t -L$(F)dumpdoc.log >/dev/null +ifndef NOTEAMS + VAULT_SERVER_OPTS=-Ovault:host=$(TEAMS_BUILD_HOST):port=$(TEAMS_BUILD_PORT):user=$(TEAMS_BUILD_USER):pass=$(TEAMS_BUILD_PASS) +endif + +PYDOC_INJECTIONS_IDAT_CMD=$(IDAT_CMD) $(BATCH_SWITCH) $(VAULT_SERVER_OPTS) -S"$< $(ST_PYDOC_INJECTIONS) $(ST_WRAP) $(DUMPDOC_IS_64)" -t -L$(F)dumpdoc.log >/dev/null pydoc_injections: $(ST_PYDOC_INJECTIONS_SUCCESS) $(ST_PYDOC_INJECTIONS_SUCCESS): tools/dumpdoc.py $(IDAPYTHON_MODULES) $(PYTHON_BINARY_MODULES) ifeq ($(or $(__CODE_CHECKER__),$(NO_CMP_API),$(__ASAN__),$(IDAHOME),$(DEMO_OR_FREE)),) @@ -922,7 +936,7 @@ endif $(R)idapyswitch$(B): $(call dumb_target, pro, $(IDAPYSWITCH_OBJS)) #---------------------------------------------------------------------- -ifdef __APPLE_SILICON__ +ifdef __MAC__ tbd: $(TBD_MODULE_DEP) # copy the tbd library to idabin, and instruct idapyswitch to create the symlink to libpython $(TBD_MODULE_DEP): $(TBD_FILE) $(IDAPYSWITCH_DEP) @@ -993,10 +1007,10 @@ $(F)idapyswitch$(O): $(I)auto.hpp $(I)bitrange.hpp $(I)bytes.hpp \ $(I)exehdr.h $(I)fixup.hpp $(I)fpro.h $(I)funcs.hpp \ $(I)ida.hpp $(I)idp.hpp $(I)ieee.h $(I)kernwin.hpp \ $(I)lines.hpp $(I)llong.hpp $(I)loader.hpp $(I)lzfse.h \ - $(I)lzvn_decode_base.h $(I)nalt.hpp $(I)name.hpp \ - $(I)netnode.hpp $(I)network.hpp $(I)offset.hpp $(I)pro.h \ - $(I)prodir.h $(I)range.hpp $(I)segment.hpp \ - $(I)segregs.hpp $(I)ua.hpp $(I)xref.hpp \ + $(I)lzvn_decode_base.h $(I)md5.h $(I)nalt.hpp \ + $(I)name.hpp $(I)netnode.hpp $(I)network.hpp \ + $(I)offset.hpp $(I)pro.h $(I)prodir.h $(I)range.hpp \ + $(I)segment.hpp $(I)segregs.hpp $(I)ua.hpp $(I)xref.hpp \ ../../ldr/ar/aixar.hpp ../../ldr/ar/ar.hpp \ ../../ldr/ar/arcmn.cpp ../../ldr/elf/../idaldr.h \ ../../ldr/elf/elf.h ../../ldr/elf/elfbase.h \ @@ -1065,8 +1079,9 @@ $(F)idapython$(O): $(I)bitrange.hpp $(I)bytes.hpp $(I)config.hpp \ $(I)diskio.hpp $(I)err.h $(I)expr.hpp $(I)fpro.h \ $(I)funcs.hpp $(I)gdl.hpp $(I)graph.hpp $(I)ida.hpp \ $(I)ida_highlighter.hpp $(I)idd.hpp $(I)idp.hpp \ - $(I)ieee.h $(I)kernwin.hpp $(I)lines.hpp $(I)llong.hpp \ - $(I)loader.hpp $(I)nalt.hpp $(I)name.hpp $(I)netnode.hpp \ - $(I)pro.h $(I)range.hpp $(I)segment.hpp $(I)typeinf.hpp \ - $(I)ua.hpp $(I)xref.hpp extapi.cpp extapi.hpp \ - idapython.cpp pywraps.cpp pywraps.hpp + $(I)ieee.h $(I)kernwin.hpp $(I)lex.hpp $(I)lines.hpp \ + $(I)llong.hpp $(I)loader.hpp $(I)nalt.hpp $(I)name.hpp \ + $(I)netnode.hpp $(I)parsejson.hpp $(I)pro.h \ + $(I)range.hpp $(I)segment.hpp $(I)typeinf.hpp $(I)ua.hpp \ + $(I)xref.hpp extapi.cpp \ + extapi.hpp idapython.cpp pywraps.cpp pywraps.hpp diff --git a/options.lnt b/options.lnt index 5b64ed4..d5dea4b 100644 --- a/options.lnt +++ b/options.lnt @@ -1 +1,3 @@ --esym(4100, obj) // unreferenced formal parameter \ No newline at end of file +-esym(4100, obj) // unreferenced formal parameter +-esym(2586, PySys_SetPath) // w2586 Function 'PySys_SetPath' is deprecated + diff --git a/out_of_tree/parsed_notifications.zip b/out_of_tree/parsed_notifications.zip index aeac2c6..0bd9948 100644 Binary files a/out_of_tree/parsed_notifications.zip and b/out_of_tree/parsed_notifications.zip differ diff --git a/pydoc_injections3.txt b/pydoc_injections3.txt index 46823eb..83a77bb 100644 --- a/pydoc_injections3.txt +++ b/pydoc_injections3.txt @@ -767,7 +767,7 @@ Help on function char_flag in module ida_bytes: char_flag(*args) -> 'flags64_t' char_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function chunk_size in module ida_bytes: @@ -807,7 +807,7 @@ clr_op_type(*args) -> 'bool' 'undefined') @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function code_flag in module ida_bytes: @@ -816,6 +816,13 @@ code_flag(*args) -> 'flags64_t' code_flag() -> flags64_t FF_CODE +Help on function combine_flags in module ida_bytes: + +combine_flags(*args) -> 'flags64_t' + combine_flags(F) -> flags64_t + + @param F: flags64_t + Help on class compiled_binpat_t in module ida_bytes: class compiled_binpat_t(builtins.object) @@ -1258,7 +1265,7 @@ Help on function custfmt_flag in module ida_bytes: custfmt_flag(*args) -> 'flags64_t' custfmt_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on class data_format_t in module ida_bytes: @@ -1498,7 +1505,7 @@ Help on function enum_flag in module ida_bytes: enum_flag(*args) -> 'flags64_t' enum_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function equal_bytes in module ida_bytes: @@ -1808,7 +1815,7 @@ Help on function flt_flag in module ida_bytes: flt_flag(*args) -> 'flags64_t' flt_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function free_chunk in module ida_bytes: @@ -2008,7 +2015,7 @@ get_enum_id(*args) -> 'uchar *' Get enum id of 'enum' operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands @return: id of enum or BADNODE Help on function get_first_hidden_range in module ida_bytes: @@ -2053,7 +2060,7 @@ get_forced_operand(*args) -> 'qstring *' Get forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: size of forced operand or -1 Help on function get_full_data_elsize in module ida_bytes: @@ -2117,7 +2124,8 @@ get_item_flag(*args) -> 'flags64_t' elements. @param from: (C++: ea_t) linear address of the instruction which refers to 'ea' - @param n: (C++: int) number of operand which refers to 'ea' + @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the + operands @param ea: (C++: ea_t) the referenced address @param appzero: (C++: bool) append a struct field name if the field offset is zero? meaningful only if the name refers to a structure. @@ -2132,12 +2140,26 @@ get_item_head(*args) -> 'ea_t' @param ea: (C++: ea_t) +Help on function get_item_refinfo in module ida_bytes: + +get_item_refinfo(*args) -> 'bool' + get_item_refinfo(ri, ea, n) -> bool + Get refinfo of the item at 'ea'. This function works for a regular offset + operand as well as for a tail byte of a structure variable (in this case refinfo + to corresponding structure member will be returned) + + @param ri: (C++: refinfo_t *) refinfo holder + @param ea: (C++: ea_t) the item address + @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the + operands + @return: success + Help on function get_item_size in module ida_bytes: get_item_size(*args) -> 'asize_t' get_item_size(ea) -> asize_t Get size of item (instruction/data) in bytes. Unexplored bytes have length of 1 - byte. This function never returns 0. + byte. This function returns 0 only for BADADDR. @param ea: (C++: ea_t) @@ -2214,6 +2236,27 @@ get_octet2(*args) -> 'uchar *' @param ogen: octet_generator_t * +Help on function get_operand_flag in module ida_bytes: + +get_operand_flag(*args) -> 'flags64_t' + get_operand_flag(typebits, n) -> flags64_t + Place operand `n`'s type flag in the right nibble of a 64-bit flags set. + + @param typebits: (C++: uint8) the type bits (one of `FF_N_`) + @param n: (C++: int) the operand number + @return: the shift to the nibble + +Help on function get_operand_type_shift in module ida_bytes: + +get_operand_type_shift(*args) -> 'int' + get_operand_type_shift(n) -> int + Get the shift in `flags64_t` for the nibble representing operand `n`'s type + + Note: n must be < UA_MAXOP, and is not checked + + @param n: (C++: uint32) the operand number + @return: the shift to the nibble + Help on function get_opinfo in module ida_bytes: get_opinfo(*args) -> 'opinfo_t *' @@ -2347,7 +2390,7 @@ get_stroff_path(*args) -> 'int' @param path: (C++: tid_t *) buffer for structure path (strpath). see nalt.hpp for more info. @param delta: (C++: adiff_t *) struct offset delta @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands @return: length of strpath Help on function get_wide_byte in module ida_bytes: @@ -2812,6 +2855,17 @@ is_enum1(*args) -> 'bool' @param F: (C++: flags64_t) +Help on function is_flag_for_operand in module ida_bytes: + +is_flag_for_operand(*args) -> 'bool' + is_flag_for_operand(F, typebits, n) -> bool + Check that the 64-bit flags set has the expected type for operand `n`. + + @param F: (C++: flags64_t) the flags + @param typebits: (C++: uint8) the type bits (one of `FF_N_`) + @param n: (C++: int) the operand number + @return: success + Help on function is_float in module ida_bytes: is_float(*args) -> 'bool' @@ -2860,7 +2914,7 @@ is_forced_operand(*args) -> 'bool' Is operand manually defined?. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number Help on function is_func in module ida_bytes: @@ -3351,7 +3405,7 @@ Help on function off_flag in module ida_bytes: off_flag(*args) -> 'flags64_t' off_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function op_adds_xrefs in module ida_bytes: @@ -3408,7 +3462,7 @@ op_enum(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param id: (C++: enum_t) id of enum @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several @@ -3459,7 +3513,7 @@ op_seg(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stkvar in module ida_bytes: @@ -3471,7 +3525,7 @@ op_stkvar(*args) -> 'bool' using insn_t::create_stkvar(). @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stroff in module ida_bytes: @@ -3482,7 +3536,7 @@ op_stroff(*args) -> 'bool' bytes, converts them to 16/32bit word data @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param path: (C++: const tid_t *) structure path (strpath). see nalt.hpp for more info. @param path_len: (C++: int) length of the structure path @param delta: (C++: adiff_t) struct offset delta. usually 0. denotes the difference between the @@ -3822,7 +3876,7 @@ Help on function seg_flag in module ida_bytes: seg_flag(*args) -> 'flags64_t' seg_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function set_cmt in module ida_bytes: @@ -3844,7 +3898,7 @@ set_forced_operand(*args) -> 'bool' Set forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @param op: (C++: const char *) text of operand * nullptr: do nothing (return 0) * "" : delete forced operand @@ -3889,7 +3943,7 @@ set_op_type(*args) -> 'bool' @param ea: (C++: ea_t) linear address @param type: (C++: flags64_t) new flag value (should be obtained from char_flag(), num_flag() and similar functions) - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @retval 1: ok @retval 0: failed (applied to a tail byte) @@ -3908,14 +3962,15 @@ set_opinfo(*args) -> 'bool' events @return: success @note: for custom formats (if is_custfmt(flag, n) is true) or for offsets (if - is_off(flag, n) is true) N can be in range -1..UA_MAXOP-1. In the case of - -1 the additional information about all operands will be set. + is_off(flag, n) is true) N can be in range 0..UA_MAXOP-1 or equal to + OPND_ALL. In the case of OPND_ALL the additional information about all + operands will be set. Help on function stkvar_flag in module ida_bytes: stkvar_flag(*args) -> 'flags64_t' stkvar_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function strlit_flag in module ida_bytes: @@ -3927,7 +3982,7 @@ Help on function stroff_flag in module ida_bytes: stroff_flag(*args) -> 'flags64_t' stroff_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function stru_flag in module ida_bytes: @@ -10928,7 +10983,7 @@ calc_stkvar_struc_offset(*args) -> 'ea_t' @param pfn: (C++: func_t *) pointer to function (can't be nullptr!) @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) number of operand: (0..UA_MAXOP-1) -1 if error, return BADADDR + @param n: (C++: int) 0..UA_MAXOP-1 operand number -1 if error, return BADADDR @return: BADADDR if some error (issue a warning if stack frame is bad) Help on function define_stkvar in module ida_frame: @@ -11066,14 +11121,10 @@ get_effective_spd(*args) -> 'sval_t' Help on function get_frame in module ida_frame: get_frame(*args) -> 'struc_t *' - get_frame(pfn) -> struc_t + get_frame(pfn) -> struc_t * Get pointer to function frame. @param pfn: func_t const * - - get_frame(ea) -> struc_t * - - @param ea: ea_t Help on function get_frame_part in module ida_frame: @@ -14195,6 +14246,8 @@ class GraphViewer(ida_kernwin.CustomIDAMemo) | | @return: Boolean | + | _OnBind(self, hook) + | | __getitem__(self, idx) | Returns a reference to the object associated with this node id | @@ -17568,7 +17621,8 @@ class Hexrays_Hooks(builtins.object) | | @param blk: (mblock_t *) | @param insn: (minsn_t *) Should return: 1 if combined the current instruction - | with a preceding one + | with a preceding one -1 if the instruction should not be combined 0 + | else | | create_hint(self, *args) -> 'PyObject *' | create_hint(self, vu) -> PyObject * @@ -17961,7 +18015,8 @@ class __cbhooks_t(Hexrays_Hooks) | | @param blk: (mblock_t *) | @param insn: (minsn_t *) Should return: 1 if combined the current instruction - | with a preceding one + | with a preceding one -1 if the instruction should not be combined 0 + | else | | dump_state(self, *args) -> 'PyObject *' | dump_state(self, assert_all_reimplemented=False) -> str @@ -23537,6 +23592,15 @@ class chain_visitor_t(builtins.object) | thisown | The membership flag +Help on function change_hexrays_config in module ida_hexrays: + +change_hexrays_config(*args) -> 'bool' + change_hexrays_config(directive) -> bool + Parse DIRECTIVE and update the current configuration variables. For the syntax + see hexrays.cfg + + @param directive: (C++: const char *) char const * + Help on function checkout_hexrays_license in module ida_hexrays: checkout_hexrays_license(*args) -> 'bool' @@ -26056,7 +26120,7 @@ decompile(ea, hf=None, flags=0) Help on function decompile_func in module ida_hexrays: decompile_func(*args) -> 'cfuncptr_t' - decompile_func(pfn, hf, decomp_flags=0) -> cfuncptr_t + decompile_func(pfn, hf=None, decomp_flags=0) -> cfuncptr_t Decompile a function. Multiple decompilations of the same function return the same object. @@ -26599,7 +26663,7 @@ class gco_info_t(builtins.object) Help on function gen_microcode in module ida_hexrays: gen_microcode(*args) -> 'mba_t *' - gen_microcode(mbr, hf, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t + gen_microcode(mbr, hf=None, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t Generate microcode of an arbitrary code snippet @param mbr: (C++: const mba_ranges_t &) snippet ranges @@ -30122,6 +30186,16 @@ class mba_t(builtins.object) | get_curfunc(self, *args) -> 'func_t *' | get_curfunc(self) -> func_t * | + | get_func_output_lists(self, *args) -> 'void' + | get_func_output_lists(self, return_regs, spoiled, type, call_ea=BADADDR, tail_call=False) + | Prepare the lists of registers & memory that are defined/killed by a function + | + | @param return_regs: (C++: mlist_t *) defined regs to return (eax,edx) + | @param spoiled: (C++: mlist_t *) spoiled regs (flags,ecx,mem) + | @param type: (C++: const tinfo_t &) the function type + | @param call_ea: (C++: ea_t) the call insn address (if known) + | @param tail_call: (C++: bool) is it the tail call? + | | get_graph(self, *args) -> 'mbl_graph_t *' | get_graph(self) -> mbl_graph_t | Get control graph. Call build_graph() if you need the graph before MMAT_LOCOPT. @@ -30309,6 +30383,13 @@ class mba_t(builtins.object) | serialize(self) | Serialize mbl array into a sequence of bytes. | + | set_lvar_name(self, *args) -> 'bool' + | set_lvar_name(self, v, name, flagbits) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | @param flagbits: int + | | set_maturity(self, *args) -> 'bool' | set_maturity(self, mat) -> bool | Set maturity level. @@ -30328,6 +30409,18 @@ class mba_t(builtins.object) | | @param f: int | + | set_nice_lvar_name(self, *args) -> 'bool' + | set_nice_lvar_name(self, v, name) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | + | set_user_lvar_name(self, *args) -> 'bool' + | set_user_lvar_name(self, v, name) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | | short_display(self, *args) -> 'bool' | short_display(self) -> bool | @@ -31766,6 +31859,9 @@ class mcallarg_t(mop_t) | | @param ea: ea_t | + | is_glbaddr_from_fixup(self, *args) -> 'bool' + | is_glbaddr_from_fixup(self) -> bool + | | is_impptr_done(self, *args) -> 'bool' | is_impptr_done(self) -> bool | @@ -33913,6 +34009,9 @@ class mop_addr_t(mop_t) | | @param ea: ea_t | + | is_glbaddr_from_fixup(self, *args) -> 'bool' + | is_glbaddr_from_fixup(self) -> bool + | | is_impptr_done(self, *args) -> 'bool' | is_impptr_done(self) -> bool | @@ -34782,6 +34881,9 @@ class mop_t(builtins.object) | | @param ea: ea_t | + | is_glbaddr_from_fixup(self, *args) -> 'bool' + | is_glbaddr_from_fixup(self) -> bool + | | is_impptr_done(self, *args) -> 'bool' | is_impptr_done(self) -> bool | @@ -35466,6 +35568,9 @@ class number_format_t(builtins.object) | flags | flags | + | flags32 + | flags32 + | | opnum | opnum | @@ -42878,6 +42983,10 @@ inf_hide_libfuncs(*args) -> 'bool' Help on function inf_huge_arg_align in module ida_ida: inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align(cc) -> bool + + @param cc: cm_t + inf_huge_arg_align() -> bool Help on function inf_inc_database_change_count in module ida_ida: @@ -44232,6 +44341,15 @@ is_filetype_like_binary(*args) -> 'bool' @param ft: (C++: filetype_t) enum filetype_t +Help on function move_privrange in module ida_ida: + +move_privrange(*args) -> 'bool' + move_privrange(new_privrange_start) -> bool + Move privrange to the specified address + + @param new_privrange_start: (C++: ea_t) new start address of the privrange + @return: success + Help on function in module ida_ida: lambda *args @@ -44254,6 +44372,15 @@ to_ea(*args) -> 'ea_t' @param reg_cs: (C++: sel_t) @param reg_ip: (C++: uval_t) +Help on function validate_idb in module ida_ida: + +validate_idb(*args) -> 'size_t' + validate_idb(vld_flags=0) -> size_t + Validate the database + + @param vld_flags: (C++: uint32) combination of VLD_.. constants + @return: number of corrupted/fixed records + Module "ida_idaapi"s docstring: """None""" @@ -44355,6 +44482,8 @@ class CustomIDAMemo(View_Hooks) | | @param values: A dictionary of 'int -> node_info_t' objects. | + | _OnBind(self, hook) + | | __init__(self) | __init__(self, _flags=0, _hkcb_flags=0x0001) -> View_Hooks | @@ -44779,10 +44908,6 @@ Help on function _replace_module_function in module ida_idaapi: _replace_module_function(replacement) -Help on function _utf8_native in module ida_idaapi: - -_utf8_native(utf8) - Help on function as_UTF16 in module ida_idaapi: as_UTF16(s) @@ -49657,6 +49782,30 @@ class IDP_Hooks(builtins.object) | @retval 1: ok | @retval <0: segment should not be created | + | ev_cvt64_hashval(self, *args) -> 'int' + | ev_cvt64_hashval(self, node, tag, name, data) -> int + | perform 32-64 conversion for a hash value + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param name: (const ::char *) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | + | ev_cvt64_supval(self, *args) -> 'int' + | ev_cvt64_supval(self, node, tag, idx, data) -> int + | perform 32-64 conversion for a netnode array element + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param idx: (::nodeidx_t) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | | ev_decorate_name(self, *args) -> 'PyObject *' | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * | Decorate/undecorate a C symbol name. @@ -50721,6 +50870,26 @@ class _processor_t(builtins.object) | cbsize(self, *args) -> 'int' | cbsize(self) -> int | + | cvt64_hashval(self, *args) -> 'ssize_t' + | cvt64_hashval(self, node, tag, name, data) -> ssize_t + | + | Parameters + | ---------- + | node: nodeidx_t + | tag: uchar + | name: char const * + | data: uchar const * + | + | cvt64_supval(self, *args) -> 'ssize_t' + | cvt64_supval(self, node, tag, idx, data) -> ssize_t + | + | Parameters + | ---------- + | node: nodeidx_t + | tag: uchar + | idx: nodeidx_t + | data: uchar const * + | | dbsize(self, *args) -> 'int' | dbsize(self) -> int | @@ -51854,6 +52023,10 @@ class _processor_t(builtins.object) | | ev_creating_segm = 26 | + | ev_cvt64_hashval = 98 + | + | ev_cvt64_supval = 97 + | | ev_decorate_name = 2020 | | ev_del_cref = 66 @@ -51960,7 +52133,7 @@ class _processor_t(builtins.object) | | ev_is_switch = 41 | - | ev_last_cb_before_debugger = 97 + | ev_last_cb_before_debugger = 99 | | ev_last_cb_before_loader = 2023 | @@ -54304,6 +54477,13 @@ Help on function get_ash in module ida_idp: get_ash(*args) -> 'asm_t *' get_ash() -> asm_t +Help on function get_config_value in module ida_idp: + +get_config_value(*args) -> 'jvalue_t *' + get_config_value(key) -> bool + + @param key: char const * + Help on function get_idb_notifier_addr in module ida_idp: get_idb_notifier_addr(*args) -> 'PyObject *' @@ -55577,6 +55757,30 @@ class processor_t(IDP_Hooks) | idbs. | @return: must be 0 | + | ev_cvt64_hashval(self, *args) -> 'int' + | ev_cvt64_hashval(self, node, tag, name, data) -> int + | perform 32-64 conversion for a hash value + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param name: (const ::char *) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | + | ev_cvt64_supval(self, *args) -> 'int' + | ev_cvt64_supval(self, node, tag, idx, data) -> int + | perform 32-64 conversion for a netnode array element + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param idx: (::nodeidx_t) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | | ev_decorate_name(self, *args) -> 'PyObject *' | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * | Decorate/undecorate a C symbol name. @@ -57370,6 +57574,8 @@ class CustomIDAMemo(View_Hooks) | | @param values: A dictionary of 'int -> node_info_t' objects. | + | _OnBind(self, hook) + | | __init__(self) | __init__(self, _flags=0, _hkcb_flags=0x0001) -> View_Hooks | @@ -57927,6 +58133,8 @@ class IDAViewWrapper(CustomIDAMemo) | | @param values: A dictionary of 'int -> node_info_t' objects. | + | _OnBind(self, hook) + | | _get_cb(self, view, cb_name) | | _get_cb_arity(self, cb) @@ -58098,27 +58306,27 @@ class PluginForm(builtins.object) | ---------------------------------------------------------------------- | Static methods defined here: | - | FormToPyQtWidget = TWidgetToPyQtWidget(tw, ctx=) + | FormToPyQtWidget = TWidgetToPyQtWidget(tw, ctx=) | Convert a TWidget* to a QWidget to be used by PyQt | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | FormToPySideWidget = TWidgetToPySideWidget(tw, ctx=) + | FormToPySideWidget = TWidgetToPySideWidget(tw, ctx=) | Use this method to convert a TWidget* to a QWidget to be used by PySide | | @param ctx: Context. Reference to a module that already imported QtWidgets module | - | QtWidgetToTWidget(w, ctx=) + | QtWidgetToTWidget(w, ctx=) | Convert a QWidget to a TWidget* to be used by IDA | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | TWidgetToPyQtWidget(tw, ctx=) + | TWidgetToPyQtWidget(tw, ctx=) | Convert a TWidget* to a QWidget to be used by PyQt | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | TWidgetToPySideWidget(tw, ctx=) + | TWidgetToPySideWidget(tw, ctx=) | Use this method to convert a TWidget* to a QWidget to be used by PySide | | @param ctx: Context. Reference to a module that already imported QtWidgets module @@ -59218,6 +59426,17 @@ ask_yn(*args) -> 'int' @param format: (C++: const char *) The question in printf() style format @return: the selected button (one of Button IDs). Esc key returns ASKBTN_CANCEL. +Help on function atoea in module ida_kernwin: + +atoea(*args) 'unsigned-ea-like-numeric-type *'↗ + atoea(str) -> bool + Convert a number in C notation to an address. decimal: 1234 + octal: 0123 + hexadecimal: 0xabcd + binary: 0b00101010 + + @param str: (C++: const char *) the string to parse + Help on function attach_action_to_menu in module ida_kernwin: attach_action_to_menu(*args) -> 'bool' @@ -59590,10 +59809,6 @@ class chooser_base_t(builtins.object) | is_multi(self) -> bool | is multi-selection allowed? | - | is_noidb(self, *args) -> 'bool' - | is_noidb(self) -> bool - | can use the chooser before opening the database? - | | is_quick_filter_visible_initially(self, *args) -> 'bool' | is_quick_filter_visible_initially(self) -> bool | @@ -60250,7 +60465,7 @@ display_widget(*args) -> 'void' Help on function ea2str in module ida_kernwin: -ea2str(*args) -> 'size_t' +ea2str(*args) -> 'qstring *' ea2str(ea) -> str Convert linear address to UTF-8 string. @@ -64153,13 +64368,32 @@ class simpleline_t(builtins.object) Help on function str2ea in module ida_kernwin: -str2ea(*args) -> 'ea_t' - str2ea(str, screenEA=BADADDR) -> ea_t - Converts a string express to EA. The expression evaluator may be called as well. +str2ea(*args) 'unsigned-ea-like-numeric-type *'↗ + str2ea(str, screen_ea=BADADDR) -> bool + Convert string to linear address. Tries to interpret the string as: + 1) "current IP" keyword if supported by assembler (e.g. "$" in x86) + 2) segment:offset expression, where "segment" may be a name or a fixed segment + register (e.g. cs, ds) + 3) just segment name/register (translated to segment's start address) + 4) a name in the database (or debug name during debugging) + 5) +delta or -delta, where numerical 'delta' is added to or subtracted from + 'screen_ea' + 6) if all else fails, try to evaluate 'str' as an IDC expression - @param str: char const * - @param screenEA: ea_t - @return: BADADDR or address value + @param str: (C++: const char *) string to parse + @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view + @return: success + +Help on function str2ea_ex in module ida_kernwin: + +str2ea_ex(*args) 'unsigned-ea-like-numeric-type *'↗ + str2ea_ex(str, screen_ea=BADADDR, flags=0) -> bool + Same as str2ea() but possibly with some steps skipped. + + @param str: (C++: const char *) string to parse + @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view + @param flags: (C++: int) see String to address conversion flags + @return: success Help on function str2user in module ida_pro: @@ -66707,18 +66941,6 @@ calc_func_metadata(*args) -> 'md5_t *' @param pfn: func_t const * @param append_metadata: metadata_appender_t * -Help on function create_simple_diff_handler in module ida_lumina: - -create_simple_diff_handler(*args) -> 'simple_diff_handler_t *' - create_simple_diff_handler() -> simple_diff_handler_t - -Help on function create_simple_idb_diff_handler in module ida_lumina: - -create_simple_idb_diff_handler(*args) -> 'simple_idb_diff_handler_t *' - create_simple_idb_diff_handler(pfn) -> simple_idb_diff_handler_t - - @param pfn: func_t const * - Help on function diff_metadata in module ida_lumina: diff_metadata(*args) -> 'bool' @@ -66958,6 +67180,14 @@ extract_insn_opreprs_from_metadata(*args) -> 'void' @param out: insn_ops_reprs_t * @param ptr: uchar const * +Help on function extract_insn_opreprs_from_metadata_ex in module ida_lumina: + +extract_insn_opreprs_from_metadata_ex(*args) -> 'void' + extract_insn_opreprs_from_metadata_ex(out, ptr) + + @param out: insn_ops_reprs_t * + @param ptr: uchar const * + Help on function extract_type_from_metadata in module ida_lumina: extract_type_from_metadata(*args) -> 'bool' @@ -66987,7 +67217,7 @@ class frame_desc_t(builtins.object) | @param __frsize: sval_t | @param __argsize: asize_t | @param __frregs: ushort - | @param __members: frame_mems_t + | @param __members: frame_mems_t const & | | __repr__ = _swig_repr(self) | @@ -67029,11 +67259,11 @@ class frame_mem_t(builtins.object) | __init__(self, __name=None, __type=serialized_tinfo(), __cmt=None, __rptcmt=None, __offset=ea64_t(-1), __info=oprepr_t(), __nbytes=asize_t(-1)) -> frame_mem_t | | @param __name: char const * - | @param __type: serialized_tinfo + | @param __type: serialized_tinfo const & | @param __cmt: char const * | @param __rptcmt: char const * | @param __offset: ea64_t - | @param __info: oprepr_t + | @param __info: oprepr_t const & | @param __nbytes: asize_t | | __repr__ = _swig_repr(self) @@ -67422,7 +67652,7 @@ class func_info_and_pattern_t(func_info_t) | __init__(self, *args) | __init__(self, __pattern_id=pattern_id_t()) -> func_info_and_pattern_t | - | @param __pattern_id: pattern_id_t + | @param __pattern_id: pattern_id_t const & | | __repr__ = _swig_repr(self) | @@ -67609,7 +67839,7 @@ class func_info_base_t(builtins.object) | __init__(self, __name=None, __metadata=metadata_t()) -> func_info_base_t | | @param __name: char const * - | @param __metadata: metadata_t + | @param __metadata: metadata_t const & | | __repr__ = _swig_repr(self) | @@ -67844,7 +68074,7 @@ class func_info_t(builtins.object) | | @param __name: char const * | @param __size: uint32 - | @param __metadata: metadata_t + | @param __metadata: metadata_t const & | | __repr__ = _swig_repr(self) | @@ -68148,7 +68378,7 @@ class input_file_t(builtins.object) | __init__(self, __path=None, __md5=md5_t()) -> input_file_t | | @param __path: char const * - | @param __md5: md5_t + | @param __md5: md5_t const & | | __repr__ = _swig_repr(self) | @@ -68393,11 +68623,8 @@ class insn_ops_repr_t(insn_site_t) | flags | flags | - | op0 - | op0 - | - | op1 - | op1 + | ops + | ops | | thisown | The membership flag @@ -68683,8 +68910,8 @@ class lumina_info_t(builtins.object) | __init__(self, *args) | __init__(self, __client=peer_conn_t(), __server=lumina_server_info_t()) -> lumina_info_t | - | @param __client: peer_conn_t - | @param __server: lumina_server_info_t + | @param __client: peer_conn_t const & + | @param __server: lumina_server_info_t const & | | __repr__ = _swig_repr(self) | @@ -68948,7 +69175,7 @@ class lumina_user_t(builtins.object) | __init__(self, *args) | __init__(self, __license_info=user_license_info_t(), __name=None, __karma=0, __last_active=0, __features=0) -> lumina_user_t | - | @param __license_info: user_license_info_t + | @param __license_info: user_license_info_t const & | @param __name: char const * | @param __karma: int | @param __last_active: utc_timestamp_t @@ -69151,7 +69378,7 @@ class pattern_id_t(builtins.object) | __init__(self, __type=PAT_TYPE_UNKNOWN, __data=bytevec_t()) -> pattern_id_t | | @param __type: enum pattern_type_t - | @param __data: bytevec_t + | @param __data: bytevec_t const & | | __repr__ = _swig_repr(self) | @@ -69188,7 +69415,7 @@ class peer_conn_t(builtins.object) | | @param __session_id: uint32 | @param __peer_name: char const * - | @param __user: lumina_user_t + | @param __user: lumina_user_t const & | @param __established: utc_timestamp_t | | __repr__ = _swig_repr(self) @@ -69337,6 +69564,36 @@ class pkt_get_pop_t(builtins.object) | thisown | The membership flag +Help on class pkt_helo_result_t in module ida_lumina: + +class pkt_helo_result_t(builtins.object) + | Proxy of C++ pkt_helo_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_helo_result_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_helo_result_t(...) + | delete_pkt_helo_result_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | user + | user + Help on class pkt_helo_t in module ida_lumina: class pkt_helo_t(builtins.object) @@ -69637,7 +69894,7 @@ class pop_fun_t(func_info_pattern_and_frequency_t) | __init__(self, __hostname=None, __input=input_file_t(), __ea64=ea64_t(-1)) -> pop_fun_t | | @param __hostname: char const * - | @param __input: input_file_t + | @param __input: input_file_t const & | @param __ea64: ea64_t | | __repr__ = _swig_repr(self) @@ -69811,159 +70068,36 @@ class serialized_tinfo(builtins.object) | type | type -Help on class simple_diff_handler_t in module ida_lumina: - -class simple_diff_handler_t(func_md_diff_handler_t) - | Proxy of C++ simple_diff_handler_t class. - | - | Method resolution order: - | simple_diff_handler_t - | func_md_diff_handler_t - | builtins.object - | - | Methods defined here: - | - | __init__(self, *args, **kwargs) - | __init__(self) -> func_md_diff_handler_t - | - | @param self: PyObject * - | - | __repr__ = _swig_repr(self) - | - | __swig_destroy__ = delete_simple_diff_handler_t(...) - | delete_simple_diff_handler_t(self) - | - | on_comment_changed(self, *args) -> 'void' - | on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) - | - | @param fchunk_nr: uint32 - | @param fchunk_off: uint32 - | @param l: qstring const * - | @param r: qstring const * - | @param rep: bool - | - | on_extra_comment_changed(self, *args) -> 'void' - | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) - | - | @param fchunk_nr: uint32 - | @param fchunk_off: uint32 - | @param l: qstring const * - | @param r: qstring const * - | @param is_prev: bool - | - | on_frame_member_changed(self, *args) -> 'void' - | on_frame_member_changed(self, offset, l, r) - | - | @param offset: uint32 - | @param l: frame_mem_t const * - | @param r: frame_mem_t const * - | - | on_function_comment_changed(self, *args) -> 'void' - | on_function_comment_changed(self, l, r, rep) - | - | @param l: qstring const * - | @param r: qstring const * - | @param rep: bool - | - | on_insn_ops_repr_changed(self, *args) -> 'void' - | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) - | - | @param fchunk_nr: uint32 - | @param fchunk_off: uint32 - | @param l: insn_ops_repr_t const * - | @param r: insn_ops_repr_t const * - | - | on_name_changed(self, *args) -> 'void' - | on_name_changed(self, l, r) - | - | @param l: qstring const * - | @param r: qstring const * - | - | on_proto_changed(self, *args) -> 'void' - | on_proto_changed(self, l, r) - | - | @param l: md_type_parts_t const & - | @param r: md_type_parts_t const & - | - | on_score_changed(self, *args) -> 'void' - | on_score_changed(self, l, r) - | - | @param l: uint32 - | @param r: uint32 - | - | on_user_stkpnt_changed(self, *args) -> 'void' - | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) - | - | @param fchunk_nr: uint32 - | @param fchunk_off: uint32 - | @param l: int64 const * - | @param r: int64 const * - | - | ---------------------------------------------------------------------- - | Data descriptors defined here: - | - | indent - | indent - | - | lines - | lines - | - | thisown - | The membership flag - | - | ---------------------------------------------------------------------- - | Methods inherited from func_md_diff_handler_t: - | - | __disown__(self) - | - | ---------------------------------------------------------------------- - | Data descriptors inherited from func_md_diff_handler_t: - | - | __dict__ - | dictionary for instance variables (if defined) - | - | __weakref__ - | list of weak references to the object (if defined) - Help on class simple_idb_diff_handler_t in module ida_lumina: -class simple_idb_diff_handler_t(simple_diff_handler_t) - | Proxy of C++ simple_idb_diff_handler_t class. +class simple_idb_diff_handler_t(func_md_diff_handler_t) + | Proxy of C++ func_md_diff_handler_t class. | | Method resolution order: | simple_idb_diff_handler_t - | simple_diff_handler_t | func_md_diff_handler_t | builtins.object | | Methods defined here: | - | __init__(self, *args, **kwargs) + | __init__(self, pfn) | __init__(self) -> func_md_diff_handler_t | | @param self: PyObject * | - | __repr__ = _swig_repr(self) + | ensure_header_generated(self) | - | __swig_destroy__ = delete_simple_idb_diff_handler_t(...) - | delete_simple_idb_diff_handler_t(self) + | format_extra_cmt(self, cmt) | - | ---------------------------------------------------------------------- - | Data descriptors defined here: + | format_frame_member(self, m) | - | header_generated - | header_generated + | format_insn_ops(self, ro) | - | pfn - | pfn + | format_stkpnt(self, stkpnt) | - | thisown - | The membership flag + | format_type(self, type_parts) | - | ---------------------------------------------------------------------- - | Methods inherited from simple_diff_handler_t: - | - | on_comment_changed(self, *args) -> 'void' + | on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) | on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) | | @param fchunk_nr: uint32 @@ -69972,7 +70106,7 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | @param r: qstring const * | @param rep: bool | - | on_extra_comment_changed(self, *args) -> 'void' + | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) | | @param fchunk_nr: uint32 @@ -69981,21 +70115,21 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | @param r: qstring const * | @param is_prev: bool | - | on_frame_member_changed(self, *args) -> 'void' + | on_frame_member_changed(self, offset, l, r) | on_frame_member_changed(self, offset, l, r) | | @param offset: uint32 | @param l: frame_mem_t const * | @param r: frame_mem_t const * | - | on_function_comment_changed(self, *args) -> 'void' + | on_function_comment_changed(self, l, r, rep) | on_function_comment_changed(self, l, r, rep) | | @param l: qstring const * | @param r: qstring const * | @param rep: bool | - | on_insn_ops_repr_changed(self, *args) -> 'void' + | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) | | @param fchunk_nr: uint32 @@ -70003,25 +70137,25 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | @param l: insn_ops_repr_t const * | @param r: insn_ops_repr_t const * | - | on_name_changed(self, *args) -> 'void' + | on_name_changed(self, l, r) | on_name_changed(self, l, r) | | @param l: qstring const * | @param r: qstring const * | - | on_proto_changed(self, *args) -> 'void' + | on_proto_changed(self, l, r) | on_proto_changed(self, l, r) | | @param l: md_type_parts_t const & | @param r: md_type_parts_t const & | - | on_score_changed(self, *args) -> 'void' + | on_score_changed(self, l, r) | on_score_changed(self, l, r) | | @param l: uint32 | @param r: uint32 | - | on_user_stkpnt_changed(self, *args) -> 'void' + | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) | | @param fchunk_nr: uint32 @@ -70029,20 +70163,30 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | @param l: int64 const * | @param r: int64 const * | + | put(self, msg) + | + | put2(self, l, r, topic) + | + | where(self, fchunk_nr, fchunk_off) + | | ---------------------------------------------------------------------- - | Data descriptors inherited from simple_diff_handler_t: + | Data and other attributes defined here: | - | indent - | indent + | NO_DATA_MARKER = None + | + | indenter_t = | - | lines - | lines | | ---------------------------------------------------------------------- | Methods inherited from func_md_diff_handler_t: | | __disown__(self) | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_md_diff_handler_t(...) + | delete_func_md_diff_handler_t(self) + | | ---------------------------------------------------------------------- | Data descriptors inherited from func_md_diff_handler_t: | @@ -70051,6 +70195,9 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | | __weakref__ | list of weak references to the object (if defined) + | + | thisown + | The membership flag Help on class skipped_func_t in module ida_lumina: @@ -70062,7 +70209,7 @@ class skipped_func_t(builtins.object) | __init__(self, *args) | __init__(self, __pattern_id=pattern_id_t(), __count=0) -> skipped_func_t | - | @param __pattern_id: pattern_id_t + | @param __pattern_id: pattern_id_t const & | @param __count: uint32 | | __repr__ = _swig_repr(self) @@ -70605,7 +70752,8 @@ Help on function is_diff_merge_mode in module ida_merge: is_diff_merge_mode(*args) -> 'bool' is_diff_merge_mode() -> bool - Return TRUE if IDA is running in diff mode (MERGE_POLICY_DIFF) + Return TRUE if IDA is running in diff mode + (MERGE_POLICY_MDIFF/MERGE_POLICY_VDIFF) Help on class item_block_locator_t in module ida_merge: @@ -71099,6 +71247,20 @@ class moddata_diff_helper_t(builtins.object) | @param arg0: qstrvec_t * | @param arg1: idbattr_info_t const & | + | str2val(self, *args) -> 'bool' + | str2val(self, arg0, arg1, arg2) -> bool + | + | @param arg0: uint64 * + | @param arg1: idbattr_info_t const & + | @param arg2: char const * + | + | val2str(self, *args) -> 'bool' + | val2str(self, arg0, arg1, arg2) -> bool + | + | @param arg0: qstring * + | @param arg1: idbattr_info_t const & + | @param arg2: uint64 + | | ---------------------------------------------------------------------- | Data descriptors defined here: | @@ -71225,6 +71387,7 @@ class bookmarks_t(builtins.object) | Methods defined here: | | __getitem__(self, idx) + | Get the n-th bookmark for the widget. | | __init__(self, w) | Build an object suitable for iterating bookmarks @@ -71235,8 +71398,10 @@ class bookmarks_t(builtins.object) | so bookmarks can be re-used interchangeably between them | | __iter__(self) + | Iterate on bookmarks present for the widget. | | __len__(self) + | Get the number of bookmarks for the widget. | | __repr__ = _swig_repr(self) | @@ -73573,6 +73738,9 @@ class printop_t(builtins.object) | is_aflags_initialized(self, *args) -> 'bool' | is_aflags_initialized(self) -> bool | + | is_f64(self, *args) -> 'bool' + | is_f64(self) -> bool + | | is_ti_initialized(self, *args) -> 'bool' | is_ti_initialized(self) -> bool | @@ -74556,7 +74724,7 @@ append_struct_fields(*args) -> 'qstring *, adiff_t *' Append names of struct fields to a name if the name is a struct name. @param disp: (C++: adiff_t *) displacement from the name - @param n: (C++: int) number of operand n which the name appears + @param n: (C++: int) operand number in which the name appears @param path: (C++: const tid_t *) path in the struct. path is an array of id's. maximal length of array is MAXSTRUCPATH. the first element of the array is the structure id. consecutive elements are id's of used union members @@ -75562,6 +75730,17 @@ class netnode(builtins.object) | @param alt: uchar | @param tag: uchar | + | blobshift(self, *args) -> 'size_t' + | blobshift(self, _from, to, size, tag) -> size_t + | Shift the blob array elements. Moves the array elements at (from..from+size) to + | (to..to+size) + | + | @param from: (C++: nodeidx_t) + | @param to: (C++: nodeidx_t) + | @param size: (C++: nodeidx_t) + | @param tag: (C++: uchar) + | @return: number of shifted elements + | | blobsize(self, *args) -> 'size_t' | blobsize(self, _start, tag) -> size_t | Get size of blob. @@ -76285,7 +76464,9 @@ calc_offset_base(*args) -> 'ea_t' @param ea: (C++: ea_t) the referencing instruction/data address @param n: (C++: int) operand number * 0: first operand - * 1: other operand + * 1: second operand + * ... + * 7: eighth operand @return: output base address or BADADDR Help on function calc_probable_base_by_value in module ida_offset: @@ -76351,7 +76532,7 @@ get_default_reftype(*args) -> 'reftype_t' Get default reference type depending on the segment. @param ea: (C++: ea_t) - @return: one of REF_OFF8,REF_OFF16,REF_OFF32 + @return: one of REF_OFF8, REF_OFF16, REF_OFF32, REF_OFF64 Help on function get_offbase in module ida_offset: @@ -76360,7 +76541,7 @@ get_offbase(*args) -> 'ea_t' Get offset base value @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: offset base or BADADDR Help on function get_offset_expr in module ida_offset: @@ -76400,9 +76581,11 @@ get_offset_expression(*args) -> 'qstring *' offset array @param ea: (C++: ea_t) start of instruction or data with the offset expression - @param n: (C++: int) number of operand (may be ORed with OPND_OUTER) + @param n: (C++: int) operand number (may be ORed with OPND_OUTER) * 0: first operand * 1: second operand + * ... + * 7: eighth operand @param from: (C++: ea_t) linear address of instruction operand or data referring to the name. This address will be used to get fixup information, so it should point to exact position of operand in the instruction. @@ -76440,10 +76623,11 @@ op_offset_ex(*args) -> 'bool' * no segment: fail * 16bit segment: to 16bit word data * 32bit segment: to dword - @param n: (C++: int) number of operand (may be ORed with OPND_OUTER) + @param n: (C++: int) operand number (may be ORed with OPND_OUTER) * 0: first * 1: second - * 2: third + * ... + * 7: eighth operand * OPND_MASK: all operands @param ri: (C++: const refinfo_t *) reference information @return: success @@ -77512,6 +77696,12 @@ is_control_tty(*args) -> 'enum tty_control_t' @param fd: (C++: int) +Help on function is_cvt64 in module ida_pro: + +is_cvt64(*args) -> 'bool' + is_cvt64() -> bool + is IDA converting IDB into I64? + Help on function is_main_thread in module ida_pro: is_main_thread(*args) -> 'bool' @@ -80645,13 +80835,13 @@ class lock_segment(builtins.object) Help on function move_segm in module ida_segment: -move_segm(*args) -> 'int' - move_segm(s, to, flags=0) -> int - Move a segment to a new address. This function moves all information to the new - address. It fixes up address sensitive information in the kernel. The total - effect is equal to reloading the segment to the target address. For the file - format dependent address sensitive information, loader_t::move_segm is called. - Also IDB notification event idb_event::segm_moved is called. +move_segm(*args) -> 'move_segm_code_t' + move_segm(s, to, flags=0) -> move_segm_code_t + This function moves all information to the new address. It fixes up address + sensitive information in the kernel. The total effect is equal to reloading the + segment to the target address. For the file format dependent address sensitive + information, loader_t::move_segm is called. Also IDB notification event + idb_event::segm_moved is called. @param s: (C++: segment_t *) segment to move @param to: (C++: ea_t) new segment start address @@ -80685,6 +80875,14 @@ move_segm_start(*args) -> 'bool' @retval 1: ok @retval 0: failed, a warning message is displayed +Help on function move_segm_strerror in module ida_segment: + +move_segm_strerror(*args) -> 'char const *' + move_segm_strerror(code) -> char const * + Return string describing error MOVE_SEGM_... code. + + @param code: (C++: move_segm_code_t) enum move_segm_code_t + Help on function rebase_program in module ida_segment: rebase_program(*args) -> 'int' @@ -85175,6 +85373,12 @@ class callregs_t(builtins.object) | @param gprs: (C++: const int *) int const * | @param fprs: (C++: const int *) int const * | + | swap(self, *args) -> 'void' + | swap(self, r) + | swap two instances + | + | @param r: (C++: callregs_t &) + | | ---------------------------------------------------------------------- | Static methods defined here: | @@ -85737,6 +85941,9 @@ class enum_type_data_t(enum_member_vec_t) | is_64bit(self, *args) -> 'bool' | is_64bit(self) -> bool | + | is_bf(self, *args) -> 'bool' + | is_bf(self) -> bool + | | is_char(self, *args) -> 'bool' | is_char(self) -> bool | @@ -85749,6 +85956,12 @@ class enum_type_data_t(enum_member_vec_t) | is_udec(self, *args) -> 'bool' | is_udec(self) -> bool | + | set_bf(self, *args) -> 'bool' + | set_bf(self, bf) -> bool + | Convert enum to a bitmask (flag_enum) + | + | @param bf: (C++: bool) + | | swap(self, *args) -> 'void' | swap(self, r) | swap two instances @@ -85926,6 +86139,14 @@ class enum_type_data_t(enum_member_vec_t) | | __hash__ = None +Help on function enum_type_data_t__set_bf in module ida_typeinf: + +enum_type_data_t__set_bf(*args) -> 'bool' + enum_type_data_t__set_bf(_this, bf) -> bool + + @param _this: enum_type_data_t * + @param bf: bool + Help on function extract_argloc in module ida_typeinf: extract_argloc(*args) -> 'bool' @@ -86063,6 +86284,9 @@ class func_type_data_t(funcargvec_t) | is_static(self, *args) -> 'bool' | is_static(self) -> bool | + | is_swift_cc(self, *args) -> 'bool' + | is_swift_cc(self) -> bool + | | is_vararg_cc(self, *args) -> 'bool' | is_vararg_cc(self) -> bool | @@ -86999,6 +87223,14 @@ inf_big_arg_align(*args) -> 'bool' @param cc: cm_t +Help on function inf_huge_arg_align in module ida_typeinf: + +inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align() -> bool + inf_huge_arg_align(cc) -> bool + + @param cc: cm_t + Help on function inf_pack_stkargs in module ida_typeinf: inf_pack_stkargs(*args) -> 'bool' @@ -87135,6 +87367,14 @@ is_sdacl_byte(*args) -> 'bool' @param t: (C++: type_t) +Help on function is_swift_cc in module ida_typeinf: + +is_swift_cc(*args) -> 'bool' + is_swift_cc(cc) -> bool + Swift calling convention (arguments and return values in registers)? + + @param cc: (C++: cm_t) + Help on function is_tah_byte in module ida_typeinf: is_tah_byte(*args) -> 'bool' @@ -88487,6 +88727,18 @@ save_tinfo(*args) -> 'tinfo_code_t' @param name: char const * @param ntf_flags: int +Help on function save_tinfo2 in module ida_typeinf: + +save_tinfo2(*args) -> 'tinfo_code_t' + save_tinfo2(tif, til, ord, name, cmt, ntf_flags) -> tinfo_code_t + + @param tif: tinfo_t * + @param til: til_t * + @param ord: size_t + @param name: char const * + @param cmt: char const * + @param ntf_flags: int + Help on class scattered_aloc_t in module ida_typeinf: class scattered_aloc_t(argpartvec_t) @@ -90032,14 +90284,22 @@ class tinfo_t(builtins.object) | @param til: til_t * | @param name: char const * | @param ntf_flags: int + | + | set_named_type(self, til, name, cmt, ntf_flags=0) -> tinfo_code_t + | + | @param til: til_t * + | @param name: char const * + | @param cmt: char const * + | @param ntf_flags: int | | set_numbered_type(self, *args) -> 'tinfo_code_t' - | set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t + | set_numbered_type(self, til, ord, ntf_flags=0, name=None, cmt=None) -> tinfo_code_t | | @param til: til_t * | @param ord: uint32 | @param ntf_flags: int | @param name: char const * + | @param cmt: char const * | | set_symbol_type(self, *args) -> 'tinfo_code_t' | set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t @@ -90047,6 +90307,13 @@ class tinfo_t(builtins.object) | @param til: til_t * | @param name: char const * | @param ntf_flags: int + | + | set_symbol_type(self, til, name, cmt, ntf_flags=0) -> tinfo_code_t + | + | @param til: til_t * + | @param name: char const * + | @param cmt: char const * + | @param ntf_flags: int | | set_volatile(self, *args) -> 'void' | set_volatile(self) @@ -91803,7 +92070,7 @@ get_immvals(*args) -> 'PyObject *' case the transformed values (as needed for printing) will be stored instead. @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) number of operand (0..UA_MAXOP-1), -1 means all operands + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands @param F: (C++: flags64_t) flags for the specified address @return: number of immediate values (0..2*UA_MAXOP) @@ -91822,7 +92089,7 @@ get_printable_immvals(*args) -> 'PyObject *' Get immediate ready-to-print values at the specified address @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) number of operand (0..UA_MAXOP-1), -1 means all operands + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands @param F: (C++: flags64_t) flags for the specified address @return: number of immediate values (0..2*UA_MAXOP) @@ -92506,6 +92773,9 @@ class outctx_base_t(builtins.object) | gen_xref_lines(self, *args) -> 'bool' | gen_xref_lines(self) -> bool | + | getF(self, *args) -> 'flags64_t' + | getF(self) -> flags64_t + | | get_stkvar(self, *args) -> 'member_t *' | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * | @@ -92709,6 +92979,9 @@ class outctx_base_t(builtins.object) | ---------------------------------------------------------------------- | Data descriptors defined here: | + | F32 + | F32 + | | __dict__ | dictionary for instance variables (if defined) | @@ -92828,7 +93101,7 @@ class outctx_t(outctx_base_t) | It should be called from processor_t::ev_out_insn() and it will call | processor_t::ev_out_operand(). This function outputs a colored text. | - | @param n: (C++: int) number of operand + | @param n: (C++: int) 0..UA_MAXOP-1 operand number | @retval 1: operand is displayed | @retval 0: operand is hidden | @@ -92858,6 +93131,13 @@ class outctx_t(outctx_base_t) | @param prefix: (C++: const char *) char const * | @param flags: int | + | term_outctx(self, *args) -> 'int' + | term_outctx(self, prefix=None) -> int + | Finalize the output context. + | + | @param prefix: (C++: const char *) char const * + | @return: the number of generated lines. + | | ---------------------------------------------------------------------- | Data descriptors defined here: | @@ -92882,6 +93162,9 @@ class outctx_t(outctx_base_t) | insn | insn | + | next_line_ea + | next_line_ea + | | ph | ph | @@ -92994,6 +93277,9 @@ class outctx_t(outctx_base_t) | @param format: (C++: const char *) printf style colored line to generate | @return: overflow, lnar_maxsize has been reached | + | getF(self, *args) -> 'flags64_t' + | getF(self) -> flags64_t + | | get_stkvar(self, *args) -> 'member_t *' | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * | @@ -93163,16 +93449,12 @@ class outctx_t(outctx_base_t) | stack_view(self, *args) -> 'bool' | stack_view(self) -> bool | - | term_outctx(self, *args) -> 'int' - | term_outctx(self, prefix=None) -> int - | Finalize the output context. - | - | @param prefix: (C++: const char *) char const * - | @return: the number of generated lines. - | | ---------------------------------------------------------------------- | Data descriptors inherited from outctx_base_t: | + | F32 + | F32 + | | __dict__ | dictionary for instance variables (if defined) | @@ -93212,7 +93494,7 @@ print_operand(*args) -> 'qstring *' text representation of the specified operand (includes color codes.) @param ea: (C++: ea_t) the item address (instruction or data) - @param n: (C++: int) operand number (0,1,2...). meaningful only for instructions + @param n: (C++: int) 0..UA_MAXOP-1 operand number, meaningful only for instructions @param getn_flags: (C++: int) Name expression flags Currently only GETN_NODUMMY is accepted. @param newtype: (C++: struct printop_t *) if specified, print the operand using the specified type @@ -95952,7 +96234,7 @@ get_forced_operand(*args) -> 'qstring *' Get forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: size of forced operand or -1 Help on function get_frame_args_size in module idc: @@ -97618,7 +97900,7 @@ op_enum(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param id: (C++: enum_t) id of enum @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several @@ -97650,7 +97932,7 @@ set_forced_operand(*args) -> 'bool' Set forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @param op: (C++: const char *) text of operand * nullptr: do nothing (return 0) * "" : delete forced operand @@ -97750,7 +98032,7 @@ op_seg(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stkvar in module ida_bytes: @@ -97762,7 +98044,7 @@ op_stkvar(*args) -> 'bool' using insn_t::create_stkvar(). @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stroff in module idc: @@ -98931,7 +99213,7 @@ split_sreg_range(ea, reg, value, tag=2) @note: IDA keeps tracks of all the points where segment register change their values. This function allows you to specify the correct value of a segment - register if IDA is not able to find the corrent value. + register if IDA is not able to find the correct value. Help on function start_process in module ida_dbg: @@ -99360,123 +99642,63 @@ Documentation on variable FF_UNUSED in module ida_bytes: unused bit (was used for variable bytes) -Documentation on variable MS_0TYPE in module ida_bytes: +Documentation on variable MS_N_TYPE in module ida_bytes: - Mask for 1st arg typing. + Mask for nth arg. -Documentation on variable FF_0VOID in module ida_bytes: +Documentation on variable FF_N_VOID in module ida_bytes: Void (unknown)? -Documentation on variable FF_0NUMH in module ida_bytes: +Documentation on variable FF_N_NUMH in module ida_bytes: Hexadecimal number? -Documentation on variable FF_0NUMD in module ida_bytes: +Documentation on variable FF_N_NUMD in module ida_bytes: Decimal number? -Documentation on variable FF_0CHAR in module ida_bytes: +Documentation on variable FF_N_CHAR in module ida_bytes: Char ('x')? -Documentation on variable FF_0SEG in module ida_bytes: +Documentation on variable FF_N_SEG in module ida_bytes: Segment? -Documentation on variable FF_0OFF in module ida_bytes: +Documentation on variable FF_N_OFF in module ida_bytes: Offset? -Documentation on variable FF_0NUMB in module ida_bytes: +Documentation on variable FF_N_NUMB in module ida_bytes: Binary number? -Documentation on variable FF_0NUMO in module ida_bytes: +Documentation on variable FF_N_NUMO in module ida_bytes: Octal number? -Documentation on variable FF_0ENUM in module ida_bytes: +Documentation on variable FF_N_ENUM in module ida_bytes: Enumeration? -Documentation on variable FF_0FOP in module ida_bytes: +Documentation on variable FF_N_FOP in module ida_bytes: Forced operand? -Documentation on variable FF_0STRO in module ida_bytes: +Documentation on variable FF_N_STRO in module ida_bytes: Struct offset? -Documentation on variable FF_0STK in module ida_bytes: +Documentation on variable FF_N_STK in module ida_bytes: Stack variable? -Documentation on variable FF_0FLT in module ida_bytes: +Documentation on variable FF_N_FLT in module ida_bytes: Floating point number? -Documentation on variable FF_0CUST in module ida_bytes: - - Custom representation? - -Documentation on variable MS_1TYPE in module ida_bytes: - - Mask for the type of other operands. - -Documentation on variable FF_1VOID in module ida_bytes: - - Void (unknown)? - -Documentation on variable FF_1NUMH in module ida_bytes: - - Hexadecimal number? - -Documentation on variable FF_1NUMD in module ida_bytes: - - Decimal number? - -Documentation on variable FF_1CHAR in module ida_bytes: - - Char ('x')? - -Documentation on variable FF_1SEG in module ida_bytes: - - Segment? - -Documentation on variable FF_1OFF in module ida_bytes: - - Offset? - -Documentation on variable FF_1NUMB in module ida_bytes: - - Binary number? - -Documentation on variable FF_1NUMO in module ida_bytes: - - Octal number? - -Documentation on variable FF_1ENUM in module ida_bytes: - - Enumeration? - -Documentation on variable FF_1FOP in module ida_bytes: - - Forced operand? - -Documentation on variable FF_1STRO in module ida_bytes: - - Struct offset? - -Documentation on variable FF_1STK in module ida_bytes: - - Stack variable? - -Documentation on variable FF_1FLT in module ida_bytes: - - Floating point number? - -Documentation on variable FF_1CUST in module ida_bytes: +Documentation on variable FF_N_CUST in module ida_bytes: Custom representation? @@ -101663,9 +101885,9 @@ Documentation on variable operand_locator_t.opnum in module ida_hexrays: operand number in the instruction -Documentation on variable number_format_t.flags in module ida_hexrays: +Documentation on variable number_format_t.flags32 in module ida_hexrays: - ida flags, which describe number radix, enum, etc + low 32bit of flags (for compatibility) Documentation on variable number_format_t.opnum in module ida_hexrays: @@ -101684,6 +101906,10 @@ Documentation on variable number_format_t.type_name in module ida_hexrays: for stroffs: structure for offsetof() for enums: enum name +Documentation on variable number_format_t.flags in module ida_hexrays: + + ida flags, which describe number radix, enum, etc + Documentation on variable NF_FIXED in module ida_hexrays: number format has been defined by the user @@ -102825,7 +103051,7 @@ Documentation on variable WARN_ILL_PURGED in module ida_hexrays: Documentation on variable WARN_ILL_FUNCTYPE in module ida_hexrays: - 2 invalid function type has been ignored + 2 invalid function type 's' has been ignored Documentation on variable WARN_VARARG_TCAL in module ida_hexrays: @@ -104492,7 +104718,7 @@ Documentation on variable DECOMP_NO_WAIT in module ida_hexrays: Documentation on variable DECOMP_NO_CACHE in module ida_hexrays: - do not use decompilation cache + do not use decompilation cache (snippets are never cached) Documentation on variable DECOMP_NO_FRAME in module ida_hexrays: @@ -104512,7 +104738,21 @@ Documentation on variable DECOMP_NO_HIDE in module ida_hexrays: Documentation on variable DECOMP_NO_XREFS in module ida_hexrays: - do not update global xrefs cache + Obsolete. Use DECOMP_GXREFS_NOUPD. + +Documentation on variable DECOMP_GXREFS_DEFLT in module ida_hexrays: + + the default behavior: do not update the global xrefs cache upon decompile() + call, but when the pseudocode text is generated (e.g., through + cfunc_t.get_pseudocode()) + +Documentation on variable DECOMP_GXREFS_NOUPD in module ida_hexrays: + + do not update the global xrefs cache + +Documentation on variable DECOMP_GXREFS_FORCE in module ida_hexrays: + + update the global xrefs cache immediately Documentation on variable DECOMP_VOID_MBA in module ida_hexrays: @@ -105747,6 +105987,18 @@ Documentation on variable UA_MAXOP in module ida_ida: max number of operands allowed for an instruction +Documentation on variable VLD_AUTO_REPAIR in module ida_ida: + + automatically repair the database + +Documentation on variable VLD_DIALOG in module ida_ida: + + ask user to repair (this bit is mutually exclusive with VLD_AUTO_REPAIR) + +Documentation on variable VLD_SILENT in module ida_ida: + + no messages to the output window + Documentation on variable idbattr_info_t.name in module ida_ida: human-readable name @@ -105754,7 +106006,7 @@ Documentation on variable idbattr_info_t.name in module ida_ida: Documentation on variable idbattr_info_t.offset in module ida_ida: field position: offset within a structure (IDI_STRUCFLD) altval or supval index - (IDI_NODEVAL) hashval name (IDI_NODEVAL+IDI_HASH) + (IDI_NODEVAL) hashval name (IDI_ALTVAL/IDI_SUPVAL+IDI_HASH) Documentation on variable idbattr_info_t.width in module ida_ida: @@ -106474,14 +106726,15 @@ Documentation on variable debugger_t.ev_set_exception_info in module ida_idd: Documentation on variable debugger_t.ev_suspended in module ida_idd: This event will be generated by the kernel each time it has suspended the - debugger process and refreshed the database. The debugger module may add - information to the database if it wants. + debuggee process and refreshed the database. The debugger module may add + information to the database if necessary. - The reason for introducing this event is that when an event line LOAD_DLL + The reason for introducing this event is that when an event like LOAD_DLL happens, the database does not reflect the memory state yet and therefore we can't add information about the dll into the database in the get_debug_event() - event. Only when the kernel has adjusted the database we can do it. Example: for - imported PE DLLs we will add the exported event names to the database. + function. Only when the kernel has adjusted the database we can do it. Example: + for loaded PE DLLs we can add the exported function names to the list of debug + names (see set_debug_names()). This event is generated in the main thread. @@ -107167,15 +107420,15 @@ Documentation on variable CF_CHG3 in module ida_idp: Documentation on variable CF_CHG4 in module ida_idp: - The instruction modifies 4 operand. + The instruction modifies the fourth operand. Documentation on variable CF_CHG5 in module ida_idp: - The instruction modifies 5 operand. + The instruction modifies the fifth operand. Documentation on variable CF_CHG6 in module ida_idp: - The instruction modifies 6 operand. + The instruction modifies the sixth operand. Documentation on variable CF_USE1 in module ida_idp: @@ -107191,15 +107444,15 @@ Documentation on variable CF_USE3 in module ida_idp: Documentation on variable CF_USE4 in module ida_idp: - The instruction uses value of the 4 operand. + The instruction uses value of the fourth operand. Documentation on variable CF_USE5 in module ida_idp: - The instruction uses value of the 5 operand. + The instruction uses value of the fifth operand. Documentation on variable CF_USE6 in module ida_idp: - The instruction uses value of the 6 operand. + The instruction uses value of the sixth operand. Documentation on variable CF_JUMP in module ida_idp: @@ -107216,19 +107469,19 @@ Documentation on variable CF_HLL in module ida_idp: Documentation on variable CF_CHG7 in module ida_idp: - The instruction modifies the 7th operand. + The instruction modifies the seventh operand. Documentation on variable CF_CHG8 in module ida_idp: - The instruction modifies the 8th operand. + The instruction modifies the eighth operand. Documentation on variable CF_USE7 in module ida_idp: - The instruction uses value of the 7th operand. + The instruction uses value of the seventh operand. Documentation on variable CF_USE8 in module ida_idp: - The instruction uses value of the 8th operand. + The instruction uses value of the eighth operand. Documentation on variable asm_t.flag in module ida_idp: @@ -109284,6 +109537,122 @@ Documentation on variable IWID_STACK in module ida_kernwin: Alias. Some IWID_* were confusing, and thus have been renamed. This is to ensure bw-compat. +Documentation on variable IDA_DEBUG_DREFS in module ida_kernwin: + + drefs + +Documentation on variable IDA_DEBUG_OFFSET in module ida_kernwin: + + offsets + +Documentation on variable IDA_DEBUG_FLIRT in module ida_kernwin: + + flirt + +Documentation on variable IDA_DEBUG_IDP in module ida_kernwin: + + idp module + +Documentation on variable IDA_DEBUG_LDR in module ida_kernwin: + + ldr module + +Documentation on variable IDA_DEBUG_PLUGIN in module ida_kernwin: + + plugin module + +Documentation on variable IDA_DEBUG_IDS in module ida_kernwin: + + ids files + +Documentation on variable IDA_DEBUG_CONFIG in module ida_kernwin: + + config file + +Documentation on variable IDA_DEBUG_CHECKMEM in module ida_kernwin: + + check heap consistency + +Documentation on variable IDA_DEBUG_LICENSE in module ida_kernwin: + + licensing + +Documentation on variable IDA_DEBUG_DEMANGLE in module ida_kernwin: + + demangler + +Documentation on variable IDA_DEBUG_QUEUE in module ida_kernwin: + + queue + +Documentation on variable IDA_DEBUG_ROLLBACK in module ida_kernwin: + + rollback + +Documentation on variable IDA_DEBUG_ALREADY in module ida_kernwin: + + already data or code + +Documentation on variable IDA_DEBUG_TIL in module ida_kernwin: + + type system + +Documentation on variable IDA_DEBUG_NOTIFY in module ida_kernwin: + + show all notifications + +Documentation on variable IDA_DEBUG_DEBUGGER in module ida_kernwin: + + debugger + +Documentation on variable IDA_DEBUG_APPCALL in module ida_kernwin: + + appcall + +Documentation on variable IDA_DEBUG_SRCDBG in module ida_kernwin: + + source debugging + +Documentation on variable IDA_DEBUG_ACCESSIBILITY in module ida_kernwin: + + accessibility + +Documentation on variable IDA_DEBUG_NETWORK in module ida_kernwin: + + network + +Documentation on variable IDA_DEBUG_INTERNET in module ida_kernwin: + + internet connection (for API backward compatibility) + +Documentation on variable IDA_DEBUG_SIMPLEX in module ida_kernwin: + + full stack analysis + +Documentation on variable IDA_DEBUG_DBGINFO in module ida_kernwin: + + handling of debug info (e.g. pdb, dwarf) + +Documentation on variable IDA_DEBUG_LUMINA in module ida_kernwin: + + lumina related + +Documentation on variable IDA_DEBUG_THEMES in module ida_kernwin: + + themes + +Documentation on variable IDA_DEBUG_REGEX in module ida_kernwin: + + regular expression + +Documentation on variable IDA_DEBUG_SUBPROC in module ida_kernwin: + + sub process + +Documentation on variable IDA_DEBUG_ALWAYS in module ida_kernwin: + + everything + Documentation on variable AST_ENABLE_ALWAYS in module ida_kernwin: enable action and do not call action_handler_t::update() anymore @@ -109348,10 +109717,6 @@ Documentation on variable CH_ATTRS in module ida_kernwin: generate ui_get_chooser_item_attrs (gui only) -Documentation on variable CH_NOIDB in module ida_kernwin: - - use the chooser before opening the database - Documentation on variable CH_FORCE_DEFAULT in module ida_kernwin: if a non-modal chooser was already open, change selection to the default one @@ -109459,7 +109824,9 @@ Documentation on variable CHCOL_PLAIN in module ida_kernwin: Documentation on variable CHCOL_PATH in module ida_kernwin: - file path + file path. TUI IDA will truncate excessive cell lengths starting at their + beginning, and prepending the resulting text with "..." order to leave the + filename visible Documentation on variable CHCOL_HEX in module ida_kernwin: @@ -110181,6 +110548,10 @@ Documentation on variable CLNL_FINDCMT in module ida_kernwin: Search for the comment symbol everywhere in the line, not only at the beginning. +Documentation on variable S2EAOPT_NOCALC in module ida_kernwin: + + don't try to interpret string as IDC (or current extlang) expression + Documentation on variable Choose.CH_MODAL in module ida_kernwin: Modal chooser @@ -111357,6 +111728,10 @@ Documentation on variable MERGE_KIND_IGNOREMICRO in module ida_merge: IM ("$ ignore micro") flags. +Documentation on variable MERGE_KIND_FILEREGIONS in module ida_merge: + + merge fileregions + Documentation on variable MERGE_KIND_HIDDENRANGES in module ida_merge: merge hidden ranges @@ -111429,6 +111804,10 @@ Documentation on variable MERGE_KIND_UI in module ida_merge: UI. +Documentation on variable MERGE_KIND_DEKSTOPS in module ida_merge: + + dekstops + Documentation on variable MERGE_KIND_NOTEPAD in module ida_merge: notepad @@ -111445,6 +111824,10 @@ Documentation on variable MERGE_KIND_DBG_MEMREGS in module ida_merge: manual memory regions (debugger) +Documentation on variable MERGE_KIND_LUMINA in module ida_merge: + + lumina function metadata + Documentation on variable MERGE_KIND_LAST in module ida_merge: last predefined merge handler type. please note that there can be more merge @@ -111777,6 +112160,10 @@ Documentation on variable NSUP_OREF7 in module ida_nalt: outer complex reference information for operand 8 +Documentation on variable NSUP_EX_FLAGS in module ida_nalt: + + Extended flags. + Documentation on variable NSUP_POINTS in module ida_nalt: SP change points blob (see funcs.cpp). values NSUP_POINTS..NSUP_POINTS+0x1000 @@ -111854,6 +112241,14 @@ Documentation on variable PATCH_TAG in module ida_nalt: Patch netnode tag. +Documentation on variable IDB_DESKTOPS_NODE_NAME in module ida_nalt: + + hash indexed by desktop name with dekstop netnode + +Documentation on variable IDB_DESKTOPS_TAG in module ida_nalt: + + tag to store desktop blob & timestamp + Documentation on variable AFL_LINNUM in module ida_nalt: has line number info @@ -112737,7 +113132,7 @@ Documentation on variable ltag in module ida_netnode: Documentation on variable IDA_SDK_VERSION in module ida_pro: - IDA SDK v8.2. + IDA SDK v8.3. Documentation on variable MAXSTR in module ida_pro: @@ -113293,33 +113688,6 @@ Documentation on variable SEGMOD_SPARSE in module ida_segment: use sparse storage if extending the segment (for set_segm_start(), set_segm_end()) -Documentation on variable MSF_SILENT in module ida_segment: - - don't display a "please wait" box on the screen - -Documentation on variable MSF_NOFIX in module ida_segment: - - don't call the loader to fix relocations - -Documentation on variable MSF_LDKEEP in module ida_segment: - - keep the loader in the memory (optimization) - -Documentation on variable MSF_FIXONCE in module ida_segment: - - call loader only once with the special calling method. valid for - rebase_program(). see loader_t::move_segm. - -Documentation on variable MSF_PRIORITY in module ida_segment: - - loader segments will overwrite any existing debugger segments when moved. valid - for move_segm() - -Documentation on variable MSF_NETNODES in module ida_segment: - - move netnodes instead of changing inf.netdelta (this is slower); valid for - rebase_program() - Documentation on variable MOVE_SEGM_OK in module ida_segment: all ok @@ -113368,6 +113736,33 @@ Documentation on variable MOVE_SEGM_INVAL in module ida_segment: Invalid argument (delta/target does not fit the address space) +Documentation on variable MSF_SILENT in module ida_segment: + + don't display a "please wait" box on the screen + +Documentation on variable MSF_NOFIX in module ida_segment: + + don't call the loader to fix relocations + +Documentation on variable MSF_LDKEEP in module ida_segment: + + keep the loader in the memory (optimization) + +Documentation on variable MSF_FIXONCE in module ida_segment: + + call loader only once with the special calling method. valid for + rebase_program(). see loader_t::move_segm. + +Documentation on variable MSF_PRIORITY in module ida_segment: + + loader segments will overwrite any existing debugger segments when moved. valid + for move_segm() + +Documentation on variable MSF_NETNODES in module ida_segment: + + move netnodes instead of changing inf.netdelta (this is slower); valid for + rebase_program() + Documentation on variable CSS_OK in module ida_segment: ok @@ -114351,9 +114746,9 @@ Documentation on variable CM_CC_THISCALL in module ida_typeinf: stack, purged (x86), first arg is in reg (compiler-dependent) -Documentation on variable CM_CC_MANUAL in module ida_typeinf: +Documentation on variable CM_CC_SWIFT in module ida_typeinf: - special case for compiler specific (not used) + (Swift) arguments and return values in registers (compiler-dependent) Documentation on variable CM_CC_SPOILED in module ida_typeinf: @@ -114361,6 +114756,10 @@ Documentation on variable CM_CC_SPOILED in module ida_typeinf: {spoilreg_t} present real cm_t byte. if n == BFA_FUNC_MARKER, the next byte is the function attribute byte. +Documentation on variable CM_CC_GOLANG in module ida_typeinf: + + (Go) arguments and return value in stack + Documentation on variable CM_CC_SPECIALE in module ida_typeinf: CM_CC_SPECIAL with ellipsis @@ -114679,6 +115078,10 @@ Documentation on variable PRTYPE_COLORED in module ida_typeinf: add color tag COLOR_SYMBOL for any parentheses, commas and colons +Documentation on variable PRTYPE_1LINCMT in module ida_typeinf: + + print comments in one line mode + Documentation on variable NTF_TYPE in module ida_typeinf: type name @@ -115381,7 +115784,7 @@ Documentation on variable stkarg_area_info_t.linkage_area in module ida_typeinf: Documentation on variable enum_type_data_t.group_sizes in module ida_typeinf: - if present, specifies bitfield group sizes each group starts with a mask member + if present, specifies bitmask group sizes each group starts with a mask member Documentation on variable enum_type_data_t.taenum_bits in module ida_typeinf: diff --git a/pydoc_injections_pro3.txt b/pydoc_injections_pro3.txt index 7d17e33..f8ce658 100644 --- a/pydoc_injections_pro3.txt +++ b/pydoc_injections_pro3.txt @@ -767,7 +767,7 @@ Help on function char_flag in module ida_bytes: char_flag(*args) -> 'flags64_t' char_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function chunk_size in module ida_bytes: @@ -807,7 +807,7 @@ clr_op_type(*args) -> 'bool' 'undefined') @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function code_flag in module ida_bytes: @@ -816,6 +816,13 @@ code_flag(*args) -> 'flags64_t' code_flag() -> flags64_t FF_CODE +Help on function combine_flags in module ida_bytes: + +combine_flags(*args) -> 'flags64_t' + combine_flags(F) -> flags64_t + + @param F: flags64_t + Help on class compiled_binpat_t in module ida_bytes: class compiled_binpat_t(builtins.object) @@ -1258,7 +1265,7 @@ Help on function custfmt_flag in module ida_bytes: custfmt_flag(*args) -> 'flags64_t' custfmt_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on class data_format_t in module ida_bytes: @@ -1498,7 +1505,7 @@ Help on function enum_flag in module ida_bytes: enum_flag(*args) -> 'flags64_t' enum_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function equal_bytes in module ida_bytes: @@ -1808,7 +1815,7 @@ Help on function flt_flag in module ida_bytes: flt_flag(*args) -> 'flags64_t' flt_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function free_chunk in module ida_bytes: @@ -2008,7 +2015,7 @@ get_enum_id(*args) -> 'uchar *' Get enum id of 'enum' operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands @return: id of enum or BADNODE Help on function get_first_hidden_range in module ida_bytes: @@ -2053,7 +2060,7 @@ get_forced_operand(*args) -> 'qstring *' Get forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: size of forced operand or -1 Help on function get_full_data_elsize in module ida_bytes: @@ -2117,7 +2124,8 @@ get_item_flag(*args) -> 'flags64_t' elements. @param from: (C++: ea_t) linear address of the instruction which refers to 'ea' - @param n: (C++: int) number of operand which refers to 'ea' + @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the + operands @param ea: (C++: ea_t) the referenced address @param appzero: (C++: bool) append a struct field name if the field offset is zero? meaningful only if the name refers to a structure. @@ -2132,12 +2140,26 @@ get_item_head(*args) -> 'ea_t' @param ea: (C++: ea_t) +Help on function get_item_refinfo in module ida_bytes: + +get_item_refinfo(*args) -> 'bool' + get_item_refinfo(ri, ea, n) -> bool + Get refinfo of the item at 'ea'. This function works for a regular offset + operand as well as for a tail byte of a structure variable (in this case refinfo + to corresponding structure member will be returned) + + @param ri: (C++: refinfo_t *) refinfo holder + @param ea: (C++: ea_t) the item address + @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the + operands + @return: success + Help on function get_item_size in module ida_bytes: get_item_size(*args) -> 'asize_t' get_item_size(ea) -> asize_t Get size of item (instruction/data) in bytes. Unexplored bytes have length of 1 - byte. This function never returns 0. + byte. This function returns 0 only for BADADDR. @param ea: (C++: ea_t) @@ -2214,6 +2236,27 @@ get_octet2(*args) -> 'uchar *' @param ogen: octet_generator_t * +Help on function get_operand_flag in module ida_bytes: + +get_operand_flag(*args) -> 'flags64_t' + get_operand_flag(typebits, n) -> flags64_t + Place operand `n`'s type flag in the right nibble of a 64-bit flags set. + + @param typebits: (C++: uint8) the type bits (one of `FF_N_`) + @param n: (C++: int) the operand number + @return: the shift to the nibble + +Help on function get_operand_type_shift in module ida_bytes: + +get_operand_type_shift(*args) -> 'int' + get_operand_type_shift(n) -> int + Get the shift in `flags64_t` for the nibble representing operand `n`'s type + + Note: n must be < UA_MAXOP, and is not checked + + @param n: (C++: uint32) the operand number + @return: the shift to the nibble + Help on function get_opinfo in module ida_bytes: get_opinfo(*args) -> 'opinfo_t *' @@ -2347,7 +2390,7 @@ get_stroff_path(*args) -> 'int' @param path: (C++: tid_t *) buffer for structure path (strpath). see nalt.hpp for more info. @param delta: (C++: adiff_t *) struct offset delta @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands @return: length of strpath Help on function get_wide_byte in module ida_bytes: @@ -2812,6 +2855,17 @@ is_enum1(*args) -> 'bool' @param F: (C++: flags64_t) +Help on function is_flag_for_operand in module ida_bytes: + +is_flag_for_operand(*args) -> 'bool' + is_flag_for_operand(F, typebits, n) -> bool + Check that the 64-bit flags set has the expected type for operand `n`. + + @param F: (C++: flags64_t) the flags + @param typebits: (C++: uint8) the type bits (one of `FF_N_`) + @param n: (C++: int) the operand number + @return: success + Help on function is_float in module ida_bytes: is_float(*args) -> 'bool' @@ -2860,7 +2914,7 @@ is_forced_operand(*args) -> 'bool' Is operand manually defined?. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number Help on function is_func in module ida_bytes: @@ -3351,7 +3405,7 @@ Help on function off_flag in module ida_bytes: off_flag(*args) -> 'flags64_t' off_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function op_adds_xrefs in module ida_bytes: @@ -3408,7 +3462,7 @@ op_enum(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param id: (C++: enum_t) id of enum @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several @@ -3459,7 +3513,7 @@ op_seg(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stkvar in module ida_bytes: @@ -3471,7 +3525,7 @@ op_stkvar(*args) -> 'bool' using insn_t::create_stkvar(). @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stroff in module ida_bytes: @@ -3482,7 +3536,7 @@ op_stroff(*args) -> 'bool' bytes, converts them to 16/32bit word data @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param path: (C++: const tid_t *) structure path (strpath). see nalt.hpp for more info. @param path_len: (C++: int) length of the structure path @param delta: (C++: adiff_t) struct offset delta. usually 0. denotes the difference between the @@ -3822,7 +3876,7 @@ Help on function seg_flag in module ida_bytes: seg_flag(*args) -> 'flags64_t' seg_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function set_cmt in module ida_bytes: @@ -3844,7 +3898,7 @@ set_forced_operand(*args) -> 'bool' Set forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @param op: (C++: const char *) text of operand * nullptr: do nothing (return 0) * "" : delete forced operand @@ -3889,7 +3943,7 @@ set_op_type(*args) -> 'bool' @param ea: (C++: ea_t) linear address @param type: (C++: flags64_t) new flag value (should be obtained from char_flag(), num_flag() and similar functions) - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @retval 1: ok @retval 0: failed (applied to a tail byte) @@ -3908,14 +3962,15 @@ set_opinfo(*args) -> 'bool' events @return: success @note: for custom formats (if is_custfmt(flag, n) is true) or for offsets (if - is_off(flag, n) is true) N can be in range -1..UA_MAXOP-1. In the case of - -1 the additional information about all operands will be set. + is_off(flag, n) is true) N can be in range 0..UA_MAXOP-1 or equal to + OPND_ALL. In the case of OPND_ALL the additional information about all + operands will be set. Help on function stkvar_flag in module ida_bytes: stkvar_flag(*args) -> 'flags64_t' stkvar_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function strlit_flag in module ida_bytes: @@ -3927,7 +3982,7 @@ Help on function stroff_flag in module ida_bytes: stroff_flag(*args) -> 'flags64_t' stroff_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function stru_flag in module ida_bytes: @@ -10928,7 +10983,7 @@ calc_stkvar_struc_offset(*args) -> 'ea_t' @param pfn: (C++: func_t *) pointer to function (can't be nullptr!) @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) number of operand: (0..UA_MAXOP-1) -1 if error, return BADADDR + @param n: (C++: int) 0..UA_MAXOP-1 operand number -1 if error, return BADADDR @return: BADADDR if some error (issue a warning if stack frame is bad) Help on function define_stkvar in module ida_frame: @@ -11066,14 +11121,10 @@ get_effective_spd(*args) -> 'sval_t' Help on function get_frame in module ida_frame: get_frame(*args) -> 'struc_t *' - get_frame(pfn) -> struc_t + get_frame(pfn) -> struc_t * Get pointer to function frame. @param pfn: func_t const * - - get_frame(ea) -> struc_t * - - @param ea: ea_t Help on function get_frame_part in module ida_frame: @@ -17568,7 +17619,8 @@ class Hexrays_Hooks(builtins.object) | | @param blk: (mblock_t *) | @param insn: (minsn_t *) Should return: 1 if combined the current instruction - | with a preceding one + | with a preceding one -1 if the instruction should not be combined 0 + | else | | create_hint(self, *args) -> 'PyObject *' | create_hint(self, vu) -> PyObject * @@ -17961,7 +18013,8 @@ class __cbhooks_t(Hexrays_Hooks) | | @param blk: (mblock_t *) | @param insn: (minsn_t *) Should return: 1 if combined the current instruction - | with a preceding one + | with a preceding one -1 if the instruction should not be combined 0 + | else | | dump_state(self, *args) -> 'PyObject *' | dump_state(self, assert_all_reimplemented=False) -> str @@ -23537,6 +23590,15 @@ class chain_visitor_t(builtins.object) | thisown | The membership flag +Help on function change_hexrays_config in module ida_hexrays: + +change_hexrays_config(*args) -> 'bool' + change_hexrays_config(directive) -> bool + Parse DIRECTIVE and update the current configuration variables. For the syntax + see hexrays.cfg + + @param directive: (C++: const char *) char const * + Help on function checkout_hexrays_license in module ida_hexrays: checkout_hexrays_license(*args) -> 'bool' @@ -26056,7 +26118,7 @@ decompile(ea, hf=None, flags=0) Help on function decompile_func in module ida_hexrays: decompile_func(*args) -> 'cfuncptr_t' - decompile_func(pfn, hf, decomp_flags=0) -> cfuncptr_t + decompile_func(pfn, hf=None, decomp_flags=0) -> cfuncptr_t Decompile a function. Multiple decompilations of the same function return the same object. @@ -26599,7 +26661,7 @@ class gco_info_t(builtins.object) Help on function gen_microcode in module ida_hexrays: gen_microcode(*args) -> 'mba_t *' - gen_microcode(mbr, hf, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t + gen_microcode(mbr, hf=None, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t Generate microcode of an arbitrary code snippet @param mbr: (C++: const mba_ranges_t &) snippet ranges @@ -30122,6 +30184,16 @@ class mba_t(builtins.object) | get_curfunc(self, *args) -> 'func_t *' | get_curfunc(self) -> func_t * | + | get_func_output_lists(self, *args) -> 'void' + | get_func_output_lists(self, return_regs, spoiled, type, call_ea=BADADDR, tail_call=False) + | Prepare the lists of registers & memory that are defined/killed by a function + | + | @param return_regs: (C++: mlist_t *) defined regs to return (eax,edx) + | @param spoiled: (C++: mlist_t *) spoiled regs (flags,ecx,mem) + | @param type: (C++: const tinfo_t &) the function type + | @param call_ea: (C++: ea_t) the call insn address (if known) + | @param tail_call: (C++: bool) is it the tail call? + | | get_graph(self, *args) -> 'mbl_graph_t *' | get_graph(self) -> mbl_graph_t | Get control graph. Call build_graph() if you need the graph before MMAT_LOCOPT. @@ -30309,6 +30381,13 @@ class mba_t(builtins.object) | serialize(self) | Serialize mbl array into a sequence of bytes. | + | set_lvar_name(self, *args) -> 'bool' + | set_lvar_name(self, v, name, flagbits) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | @param flagbits: int + | | set_maturity(self, *args) -> 'bool' | set_maturity(self, mat) -> bool | Set maturity level. @@ -30328,6 +30407,18 @@ class mba_t(builtins.object) | | @param f: int | + | set_nice_lvar_name(self, *args) -> 'bool' + | set_nice_lvar_name(self, v, name) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | + | set_user_lvar_name(self, *args) -> 'bool' + | set_user_lvar_name(self, v, name) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | | short_display(self, *args) -> 'bool' | short_display(self) -> bool | @@ -35466,6 +35557,9 @@ class number_format_t(builtins.object) | flags | flags | + | flags32 + | flags32 + | | opnum | opnum | @@ -42698,6 +42792,10 @@ inf_hide_libfuncs(*args) -> 'bool' Help on function inf_huge_arg_align in module ida_ida: inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align(cc) -> bool + + @param cc: cm_t + inf_huge_arg_align() -> bool Help on function inf_inc_database_change_count in module ida_ida: @@ -44052,6 +44150,15 @@ is_filetype_like_binary(*args) -> 'bool' @param ft: (C++: filetype_t) enum filetype_t +Help on function move_privrange in module ida_ida: + +move_privrange(*args) -> 'bool' + move_privrange(new_privrange_start) -> bool + Move privrange to the specified address + + @param new_privrange_start: (C++: ea_t) new start address of the privrange + @return: success + Help on function in module ida_ida: lambda *args @@ -44074,6 +44181,15 @@ to_ea(*args) -> 'ea_t' @param reg_cs: (C++: sel_t) @param reg_ip: (C++: uval_t) +Help on function validate_idb in module ida_ida: + +validate_idb(*args) -> 'size_t' + validate_idb(vld_flags=0) -> size_t + Validate the database + + @param vld_flags: (C++: uint32) combination of VLD_.. constants + @return: number of corrupted/fixed records + Module "ida_idaapi"s docstring: """None""" @@ -44599,10 +44715,6 @@ Help on function _replace_module_function in module ida_idaapi: _replace_module_function(replacement) -Help on function _utf8_native in module ida_idaapi: - -_utf8_native(utf8) - Help on function as_UTF16 in module ida_idaapi: as_UTF16(s) @@ -49477,6 +49589,30 @@ class IDP_Hooks(builtins.object) | @retval 1: ok | @retval <0: segment should not be created | + | ev_cvt64_hashval(self, *args) -> 'int' + | ev_cvt64_hashval(self, node, tag, name, data) -> int + | perform 32-64 conversion for a hash value + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param name: (const ::char *) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | + | ev_cvt64_supval(self, *args) -> 'int' + | ev_cvt64_supval(self, node, tag, idx, data) -> int + | perform 32-64 conversion for a netnode array element + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param idx: (::nodeidx_t) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | | ev_decorate_name(self, *args) -> 'PyObject *' | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * | Decorate/undecorate a C symbol name. @@ -50541,6 +50677,26 @@ class _processor_t(builtins.object) | cbsize(self, *args) -> 'int' | cbsize(self) -> int | + | cvt64_hashval(self, *args) -> 'ssize_t' + | cvt64_hashval(self, node, tag, name, data) -> ssize_t + | + | Parameters + | ---------- + | node: nodeidx_t + | tag: uchar + | name: char const * + | data: uchar const * + | + | cvt64_supval(self, *args) -> 'ssize_t' + | cvt64_supval(self, node, tag, idx, data) -> ssize_t + | + | Parameters + | ---------- + | node: nodeidx_t + | tag: uchar + | idx: nodeidx_t + | data: uchar const * + | | dbsize(self, *args) -> 'int' | dbsize(self) -> int | @@ -51674,6 +51830,10 @@ class _processor_t(builtins.object) | | ev_creating_segm = 26 | + | ev_cvt64_hashval = 98 + | + | ev_cvt64_supval = 97 + | | ev_decorate_name = 2020 | | ev_del_cref = 66 @@ -51780,7 +51940,7 @@ class _processor_t(builtins.object) | | ev_is_switch = 41 | - | ev_last_cb_before_debugger = 97 + | ev_last_cb_before_debugger = 99 | | ev_last_cb_before_loader = 2023 | @@ -54124,6 +54284,13 @@ Help on function get_ash in module ida_idp: get_ash(*args) -> 'asm_t *' get_ash() -> asm_t +Help on function get_config_value in module ida_idp: + +get_config_value(*args) -> 'jvalue_t *' + get_config_value(key) -> bool + + @param key: char const * + Help on function get_idb_notifier_addr in module ida_idp: get_idb_notifier_addr(*args) -> 'PyObject *' @@ -55397,6 +55564,30 @@ class processor_t(IDP_Hooks) | idbs. | @return: must be 0 | + | ev_cvt64_hashval(self, *args) -> 'int' + | ev_cvt64_hashval(self, node, tag, name, data) -> int + | perform 32-64 conversion for a hash value + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param name: (const ::char *) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | + | ev_cvt64_supval(self, *args) -> 'int' + | ev_cvt64_supval(self, node, tag, idx, data) -> int + | perform 32-64 conversion for a netnode array element + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param idx: (::nodeidx_t) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | | ev_decorate_name(self, *args) -> 'PyObject *' | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * | Decorate/undecorate a C symbol name. @@ -57918,27 +58109,27 @@ class PluginForm(builtins.object) | ---------------------------------------------------------------------- | Static methods defined here: | - | FormToPyQtWidget = TWidgetToPyQtWidget(tw, ctx=) + | FormToPyQtWidget = TWidgetToPyQtWidget(tw, ctx=) | Convert a TWidget* to a QWidget to be used by PyQt | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | FormToPySideWidget = TWidgetToPySideWidget(tw, ctx=) + | FormToPySideWidget = TWidgetToPySideWidget(tw, ctx=) | Use this method to convert a TWidget* to a QWidget to be used by PySide | | @param ctx: Context. Reference to a module that already imported QtWidgets module | - | QtWidgetToTWidget(w, ctx=) + | QtWidgetToTWidget(w, ctx=) | Convert a QWidget to a TWidget* to be used by IDA | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | TWidgetToPyQtWidget(tw, ctx=) + | TWidgetToPyQtWidget(tw, ctx=) | Convert a TWidget* to a QWidget to be used by PyQt | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | TWidgetToPySideWidget(tw, ctx=) + | TWidgetToPySideWidget(tw, ctx=) | Use this method to convert a TWidget* to a QWidget to be used by PySide | | @param ctx: Context. Reference to a module that already imported QtWidgets module @@ -59038,6 +59229,17 @@ ask_yn(*args) -> 'int' @param format: (C++: const char *) The question in printf() style format @return: the selected button (one of Button IDs). Esc key returns ASKBTN_CANCEL. +Help on function atoea in module ida_kernwin: + +atoea(*args) 'unsigned-ea-like-numeric-type *'↗ + atoea(str) -> bool + Convert a number in C notation to an address. decimal: 1234 + octal: 0123 + hexadecimal: 0xabcd + binary: 0b00101010 + + @param str: (C++: const char *) the string to parse + Help on function attach_action_to_menu in module ida_kernwin: attach_action_to_menu(*args) -> 'bool' @@ -59410,10 +59612,6 @@ class chooser_base_t(builtins.object) | is_multi(self) -> bool | is multi-selection allowed? | - | is_noidb(self, *args) -> 'bool' - | is_noidb(self) -> bool - | can use the chooser before opening the database? - | | is_quick_filter_visible_initially(self, *args) -> 'bool' | is_quick_filter_visible_initially(self) -> bool | @@ -60070,7 +60268,7 @@ display_widget(*args) -> 'void' Help on function ea2str in module ida_kernwin: -ea2str(*args) -> 'size_t' +ea2str(*args) -> 'qstring *' ea2str(ea) -> str Convert linear address to UTF-8 string. @@ -63973,13 +64171,32 @@ class simpleline_t(builtins.object) Help on function str2ea in module ida_kernwin: -str2ea(*args) -> 'ea_t' - str2ea(str, screenEA=BADADDR) -> ea_t - Converts a string express to EA. The expression evaluator may be called as well. +str2ea(*args) 'unsigned-ea-like-numeric-type *'↗ + str2ea(str, screen_ea=BADADDR) -> bool + Convert string to linear address. Tries to interpret the string as: + 1) "current IP" keyword if supported by assembler (e.g. "$" in x86) + 2) segment:offset expression, where "segment" may be a name or a fixed segment + register (e.g. cs, ds) + 3) just segment name/register (translated to segment's start address) + 4) a name in the database (or debug name during debugging) + 5) +delta or -delta, where numerical 'delta' is added to or subtracted from + 'screen_ea' + 6) if all else fails, try to evaluate 'str' as an IDC expression - @param str: char const * - @param screenEA: ea_t - @return: BADADDR or address value + @param str: (C++: const char *) string to parse + @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view + @return: success + +Help on function str2ea_ex in module ida_kernwin: + +str2ea_ex(*args) 'unsigned-ea-like-numeric-type *'↗ + str2ea_ex(str, screen_ea=BADADDR, flags=0) -> bool + Same as str2ea() but possibly with some steps skipped. + + @param str: (C++: const char *) string to parse + @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view + @param flags: (C++: int) see String to address conversion flags + @return: success Help on function str2user in module ida_pro: @@ -66527,18 +66744,6 @@ calc_func_metadata(*args) -> 'md5_t *' @param pfn: func_t const * @param append_metadata: metadata_appender_t * -Help on function create_simple_diff_handler in module ida_lumina: - -create_simple_diff_handler(*args) -> 'simple_diff_handler_t *' - create_simple_diff_handler() -> simple_diff_handler_t - -Help on function create_simple_idb_diff_handler in module ida_lumina: - -create_simple_idb_diff_handler(*args) -> 'simple_idb_diff_handler_t *' - create_simple_idb_diff_handler(pfn) -> simple_idb_diff_handler_t - - @param pfn: func_t const * - Help on function diff_metadata in module ida_lumina: diff_metadata(*args) -> 'bool' @@ -66778,6 +66983,14 @@ extract_insn_opreprs_from_metadata(*args) -> 'void' @param out: insn_ops_reprs_t * @param ptr: uchar const * +Help on function extract_insn_opreprs_from_metadata_ex in module ida_lumina: + +extract_insn_opreprs_from_metadata_ex(*args) -> 'void' + extract_insn_opreprs_from_metadata_ex(out, ptr) + + @param out: insn_ops_reprs_t * + @param ptr: uchar const * + Help on function extract_type_from_metadata in module ida_lumina: extract_type_from_metadata(*args) -> 'bool' @@ -66807,7 +67020,7 @@ class frame_desc_t(builtins.object) | @param __frsize: sval_t | @param __argsize: asize_t | @param __frregs: ushort - | @param __members: frame_mems_t + | @param __members: frame_mems_t const & | | __repr__ = _swig_repr(self) | @@ -66849,11 +67062,11 @@ class frame_mem_t(builtins.object) | __init__(self, __name=None, __type=serialized_tinfo(), __cmt=None, __rptcmt=None, __offset=ea64_t(-1), __info=oprepr_t(), __nbytes=asize_t(-1)) -> frame_mem_t | | @param __name: char const * - | @param __type: serialized_tinfo + | @param __type: serialized_tinfo const & | @param __cmt: char const * | @param __rptcmt: char const * | @param __offset: ea64_t - | @param __info: oprepr_t + | @param __info: oprepr_t const & | @param __nbytes: asize_t | | __repr__ = _swig_repr(self) @@ -67242,7 +67455,7 @@ class func_info_and_pattern_t(func_info_t) | __init__(self, *args) | __init__(self, __pattern_id=pattern_id_t()) -> func_info_and_pattern_t | - | @param __pattern_id: pattern_id_t + | @param __pattern_id: pattern_id_t const & | | __repr__ = _swig_repr(self) | @@ -67429,7 +67642,7 @@ class func_info_base_t(builtins.object) | __init__(self, __name=None, __metadata=metadata_t()) -> func_info_base_t | | @param __name: char const * - | @param __metadata: metadata_t + | @param __metadata: metadata_t const & | | __repr__ = _swig_repr(self) | @@ -67664,7 +67877,7 @@ class func_info_t(builtins.object) | | @param __name: char const * | @param __size: uint32 - | @param __metadata: metadata_t + | @param __metadata: metadata_t const & | | __repr__ = _swig_repr(self) | @@ -67968,7 +68181,7 @@ class input_file_t(builtins.object) | __init__(self, __path=None, __md5=md5_t()) -> input_file_t | | @param __path: char const * - | @param __md5: md5_t + | @param __md5: md5_t const & | | __repr__ = _swig_repr(self) | @@ -68213,11 +68426,8 @@ class insn_ops_repr_t(insn_site_t) | flags | flags | - | op0 - | op0 - | - | op1 - | op1 + | ops + | ops | | thisown | The membership flag @@ -68503,8 +68713,8 @@ class lumina_info_t(builtins.object) | __init__(self, *args) | __init__(self, __client=peer_conn_t(), __server=lumina_server_info_t()) -> lumina_info_t | - | @param __client: peer_conn_t - | @param __server: lumina_server_info_t + | @param __client: peer_conn_t const & + | @param __server: lumina_server_info_t const & | | __repr__ = _swig_repr(self) | @@ -68768,7 +68978,7 @@ class lumina_user_t(builtins.object) | __init__(self, *args) | __init__(self, __license_info=user_license_info_t(), __name=None, __karma=0, __last_active=0, __features=0) -> lumina_user_t | - | @param __license_info: user_license_info_t + | @param __license_info: user_license_info_t const & | @param __name: char const * | @param __karma: int | @param __last_active: utc_timestamp_t @@ -68971,7 +69181,7 @@ class pattern_id_t(builtins.object) | __init__(self, __type=PAT_TYPE_UNKNOWN, __data=bytevec_t()) -> pattern_id_t | | @param __type: enum pattern_type_t - | @param __data: bytevec_t + | @param __data: bytevec_t const & | | __repr__ = _swig_repr(self) | @@ -69008,7 +69218,7 @@ class peer_conn_t(builtins.object) | | @param __session_id: uint32 | @param __peer_name: char const * - | @param __user: lumina_user_t + | @param __user: lumina_user_t const & | @param __established: utc_timestamp_t | | __repr__ = _swig_repr(self) @@ -69157,6 +69367,36 @@ class pkt_get_pop_t(builtins.object) | thisown | The membership flag +Help on class pkt_helo_result_t in module ida_lumina: + +class pkt_helo_result_t(builtins.object) + | Proxy of C++ pkt_helo_result_t class. + | + | Methods defined here: + | + | __init__(self, *args) + | __init__(self) -> pkt_helo_result_t + | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_pkt_helo_result_t(...) + | delete_pkt_helo_result_t(self) + | + | ---------------------------------------------------------------------- + | Data descriptors defined here: + | + | __dict__ + | dictionary for instance variables (if defined) + | + | __weakref__ + | list of weak references to the object (if defined) + | + | thisown + | The membership flag + | + | user + | user + Help on class pkt_helo_t in module ida_lumina: class pkt_helo_t(builtins.object) @@ -69457,7 +69697,7 @@ class pop_fun_t(func_info_pattern_and_frequency_t) | __init__(self, __hostname=None, __input=input_file_t(), __ea64=ea64_t(-1)) -> pop_fun_t | | @param __hostname: char const * - | @param __input: input_file_t + | @param __input: input_file_t const & | @param __ea64: ea64_t | | __repr__ = _swig_repr(self) @@ -69631,159 +69871,36 @@ class serialized_tinfo(builtins.object) | type | type -Help on class simple_diff_handler_t in module ida_lumina: - -class simple_diff_handler_t(func_md_diff_handler_t) - | Proxy of C++ simple_diff_handler_t class. - | - | Method resolution order: - | simple_diff_handler_t - | func_md_diff_handler_t - | builtins.object - | - | Methods defined here: - | - | __init__(self, *args, **kwargs) - | __init__(self) -> func_md_diff_handler_t - | - | @param self: PyObject * - | - | __repr__ = _swig_repr(self) - | - | __swig_destroy__ = delete_simple_diff_handler_t(...) - | delete_simple_diff_handler_t(self) - | - | on_comment_changed(self, *args) -> 'void' - | on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) - | - | @param fchunk_nr: uint32 - | @param fchunk_off: uint32 - | @param l: qstring const * - | @param r: qstring const * - | @param rep: bool - | - | on_extra_comment_changed(self, *args) -> 'void' - | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) - | - | @param fchunk_nr: uint32 - | @param fchunk_off: uint32 - | @param l: qstring const * - | @param r: qstring const * - | @param is_prev: bool - | - | on_frame_member_changed(self, *args) -> 'void' - | on_frame_member_changed(self, offset, l, r) - | - | @param offset: uint32 - | @param l: frame_mem_t const * - | @param r: frame_mem_t const * - | - | on_function_comment_changed(self, *args) -> 'void' - | on_function_comment_changed(self, l, r, rep) - | - | @param l: qstring const * - | @param r: qstring const * - | @param rep: bool - | - | on_insn_ops_repr_changed(self, *args) -> 'void' - | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) - | - | @param fchunk_nr: uint32 - | @param fchunk_off: uint32 - | @param l: insn_ops_repr_t const * - | @param r: insn_ops_repr_t const * - | - | on_name_changed(self, *args) -> 'void' - | on_name_changed(self, l, r) - | - | @param l: qstring const * - | @param r: qstring const * - | - | on_proto_changed(self, *args) -> 'void' - | on_proto_changed(self, l, r) - | - | @param l: md_type_parts_t const & - | @param r: md_type_parts_t const & - | - | on_score_changed(self, *args) -> 'void' - | on_score_changed(self, l, r) - | - | @param l: uint32 - | @param r: uint32 - | - | on_user_stkpnt_changed(self, *args) -> 'void' - | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) - | - | @param fchunk_nr: uint32 - | @param fchunk_off: uint32 - | @param l: int64 const * - | @param r: int64 const * - | - | ---------------------------------------------------------------------- - | Data descriptors defined here: - | - | indent - | indent - | - | lines - | lines - | - | thisown - | The membership flag - | - | ---------------------------------------------------------------------- - | Methods inherited from func_md_diff_handler_t: - | - | __disown__(self) - | - | ---------------------------------------------------------------------- - | Data descriptors inherited from func_md_diff_handler_t: - | - | __dict__ - | dictionary for instance variables (if defined) - | - | __weakref__ - | list of weak references to the object (if defined) - Help on class simple_idb_diff_handler_t in module ida_lumina: -class simple_idb_diff_handler_t(simple_diff_handler_t) - | Proxy of C++ simple_idb_diff_handler_t class. +class simple_idb_diff_handler_t(func_md_diff_handler_t) + | Proxy of C++ func_md_diff_handler_t class. | | Method resolution order: | simple_idb_diff_handler_t - | simple_diff_handler_t | func_md_diff_handler_t | builtins.object | | Methods defined here: | - | __init__(self, *args, **kwargs) + | __init__(self, pfn) | __init__(self) -> func_md_diff_handler_t | | @param self: PyObject * | - | __repr__ = _swig_repr(self) + | ensure_header_generated(self) | - | __swig_destroy__ = delete_simple_idb_diff_handler_t(...) - | delete_simple_idb_diff_handler_t(self) + | format_extra_cmt(self, cmt) | - | ---------------------------------------------------------------------- - | Data descriptors defined here: + | format_frame_member(self, m) | - | header_generated - | header_generated + | format_insn_ops(self, ro) | - | pfn - | pfn + | format_stkpnt(self, stkpnt) | - | thisown - | The membership flag + | format_type(self, type_parts) | - | ---------------------------------------------------------------------- - | Methods inherited from simple_diff_handler_t: - | - | on_comment_changed(self, *args) -> 'void' + | on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) | on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep) | | @param fchunk_nr: uint32 @@ -69792,7 +69909,7 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | @param r: qstring const * | @param rep: bool | - | on_extra_comment_changed(self, *args) -> 'void' + | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) | on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev) | | @param fchunk_nr: uint32 @@ -69801,21 +69918,21 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | @param r: qstring const * | @param is_prev: bool | - | on_frame_member_changed(self, *args) -> 'void' + | on_frame_member_changed(self, offset, l, r) | on_frame_member_changed(self, offset, l, r) | | @param offset: uint32 | @param l: frame_mem_t const * | @param r: frame_mem_t const * | - | on_function_comment_changed(self, *args) -> 'void' + | on_function_comment_changed(self, l, r, rep) | on_function_comment_changed(self, l, r, rep) | | @param l: qstring const * | @param r: qstring const * | @param rep: bool | - | on_insn_ops_repr_changed(self, *args) -> 'void' + | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) | on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r) | | @param fchunk_nr: uint32 @@ -69823,25 +69940,25 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | @param l: insn_ops_repr_t const * | @param r: insn_ops_repr_t const * | - | on_name_changed(self, *args) -> 'void' + | on_name_changed(self, l, r) | on_name_changed(self, l, r) | | @param l: qstring const * | @param r: qstring const * | - | on_proto_changed(self, *args) -> 'void' + | on_proto_changed(self, l, r) | on_proto_changed(self, l, r) | | @param l: md_type_parts_t const & | @param r: md_type_parts_t const & | - | on_score_changed(self, *args) -> 'void' + | on_score_changed(self, l, r) | on_score_changed(self, l, r) | | @param l: uint32 | @param r: uint32 | - | on_user_stkpnt_changed(self, *args) -> 'void' + | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) | on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r) | | @param fchunk_nr: uint32 @@ -69849,20 +69966,30 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | @param l: int64 const * | @param r: int64 const * | + | put(self, msg) + | + | put2(self, l, r, topic) + | + | where(self, fchunk_nr, fchunk_off) + | | ---------------------------------------------------------------------- - | Data descriptors inherited from simple_diff_handler_t: + | Data and other attributes defined here: | - | indent - | indent + | NO_DATA_MARKER = None + | + | indenter_t = | - | lines - | lines | | ---------------------------------------------------------------------- | Methods inherited from func_md_diff_handler_t: | | __disown__(self) | + | __repr__ = _swig_repr(self) + | + | __swig_destroy__ = delete_func_md_diff_handler_t(...) + | delete_func_md_diff_handler_t(self) + | | ---------------------------------------------------------------------- | Data descriptors inherited from func_md_diff_handler_t: | @@ -69871,6 +69998,9 @@ class simple_idb_diff_handler_t(simple_diff_handler_t) | | __weakref__ | list of weak references to the object (if defined) + | + | thisown + | The membership flag Help on class skipped_func_t in module ida_lumina: @@ -69882,7 +70012,7 @@ class skipped_func_t(builtins.object) | __init__(self, *args) | __init__(self, __pattern_id=pattern_id_t(), __count=0) -> skipped_func_t | - | @param __pattern_id: pattern_id_t + | @param __pattern_id: pattern_id_t const & | @param __count: uint32 | | __repr__ = _swig_repr(self) @@ -70303,6 +70433,7 @@ class bookmarks_t(builtins.object) | Methods defined here: | | __getitem__(self, idx) + | Get the n-th bookmark for the widget. | | __init__(self, w) | Build an object suitable for iterating bookmarks @@ -70313,8 +70444,10 @@ class bookmarks_t(builtins.object) | so bookmarks can be re-used interchangeably between them | | __iter__(self) + | Iterate on bookmarks present for the widget. | | __len__(self) + | Get the number of bookmarks for the widget. | | __repr__ = _swig_repr(self) | @@ -72651,6 +72784,9 @@ class printop_t(builtins.object) | is_aflags_initialized(self, *args) -> 'bool' | is_aflags_initialized(self) -> bool | + | is_f64(self, *args) -> 'bool' + | is_f64(self) -> bool + | | is_ti_initialized(self, *args) -> 'bool' | is_ti_initialized(self) -> bool | @@ -73634,7 +73770,7 @@ append_struct_fields(*args) -> 'qstring *, adiff_t *' Append names of struct fields to a name if the name is a struct name. @param disp: (C++: adiff_t *) displacement from the name - @param n: (C++: int) number of operand n which the name appears + @param n: (C++: int) operand number in which the name appears @param path: (C++: const tid_t *) path in the struct. path is an array of id's. maximal length of array is MAXSTRUCPATH. the first element of the array is the structure id. consecutive elements are id's of used union members @@ -74640,6 +74776,17 @@ class netnode(builtins.object) | @param alt: uchar | @param tag: uchar | + | blobshift(self, *args) -> 'size_t' + | blobshift(self, _from, to, size, tag) -> size_t + | Shift the blob array elements. Moves the array elements at (from..from+size) to + | (to..to+size) + | + | @param from: (C++: nodeidx_t) + | @param to: (C++: nodeidx_t) + | @param size: (C++: nodeidx_t) + | @param tag: (C++: uchar) + | @return: number of shifted elements + | | blobsize(self, *args) -> 'size_t' | blobsize(self, _start, tag) -> size_t | Get size of blob. @@ -75363,7 +75510,9 @@ calc_offset_base(*args) -> 'ea_t' @param ea: (C++: ea_t) the referencing instruction/data address @param n: (C++: int) operand number * 0: first operand - * 1: other operand + * 1: second operand + * ... + * 7: eighth operand @return: output base address or BADADDR Help on function calc_probable_base_by_value in module ida_offset: @@ -75429,7 +75578,7 @@ get_default_reftype(*args) -> 'reftype_t' Get default reference type depending on the segment. @param ea: (C++: ea_t) - @return: one of REF_OFF8,REF_OFF16,REF_OFF32 + @return: one of REF_OFF8, REF_OFF16, REF_OFF32, REF_OFF64 Help on function get_offbase in module ida_offset: @@ -75438,7 +75587,7 @@ get_offbase(*args) -> 'ea_t' Get offset base value @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: offset base or BADADDR Help on function get_offset_expr in module ida_offset: @@ -75478,9 +75627,11 @@ get_offset_expression(*args) -> 'qstring *' offset array @param ea: (C++: ea_t) start of instruction or data with the offset expression - @param n: (C++: int) number of operand (may be ORed with OPND_OUTER) + @param n: (C++: int) operand number (may be ORed with OPND_OUTER) * 0: first operand * 1: second operand + * ... + * 7: eighth operand @param from: (C++: ea_t) linear address of instruction operand or data referring to the name. This address will be used to get fixup information, so it should point to exact position of operand in the instruction. @@ -75518,10 +75669,11 @@ op_offset_ex(*args) -> 'bool' * no segment: fail * 16bit segment: to 16bit word data * 32bit segment: to dword - @param n: (C++: int) number of operand (may be ORed with OPND_OUTER) + @param n: (C++: int) operand number (may be ORed with OPND_OUTER) * 0: first * 1: second - * 2: third + * ... + * 7: eighth operand * OPND_MASK: all operands @param ri: (C++: const refinfo_t *) reference information @return: success @@ -76590,6 +76742,12 @@ is_control_tty(*args) -> 'enum tty_control_t' @param fd: (C++: int) +Help on function is_cvt64 in module ida_pro: + +is_cvt64(*args) -> 'bool' + is_cvt64() -> bool + is IDA converting IDB into I64? + Help on function is_main_thread in module ida_pro: is_main_thread(*args) -> 'bool' @@ -79723,13 +79881,13 @@ class lock_segment(builtins.object) Help on function move_segm in module ida_segment: -move_segm(*args) -> 'int' - move_segm(s, to, flags=0) -> int - Move a segment to a new address. This function moves all information to the new - address. It fixes up address sensitive information in the kernel. The total - effect is equal to reloading the segment to the target address. For the file - format dependent address sensitive information, loader_t::move_segm is called. - Also IDB notification event idb_event::segm_moved is called. +move_segm(*args) -> 'move_segm_code_t' + move_segm(s, to, flags=0) -> move_segm_code_t + This function moves all information to the new address. It fixes up address + sensitive information in the kernel. The total effect is equal to reloading the + segment to the target address. For the file format dependent address sensitive + information, loader_t::move_segm is called. Also IDB notification event + idb_event::segm_moved is called. @param s: (C++: segment_t *) segment to move @param to: (C++: ea_t) new segment start address @@ -79763,6 +79921,14 @@ move_segm_start(*args) -> 'bool' @retval 1: ok @retval 0: failed, a warning message is displayed +Help on function move_segm_strerror in module ida_segment: + +move_segm_strerror(*args) -> 'char const *' + move_segm_strerror(code) -> char const * + Return string describing error MOVE_SEGM_... code. + + @param code: (C++: move_segm_code_t) enum move_segm_code_t + Help on function rebase_program in module ida_segment: rebase_program(*args) -> 'int' @@ -84253,6 +84419,12 @@ class callregs_t(builtins.object) | @param gprs: (C++: const int *) int const * | @param fprs: (C++: const int *) int const * | + | swap(self, *args) -> 'void' + | swap(self, r) + | swap two instances + | + | @param r: (C++: callregs_t &) + | | ---------------------------------------------------------------------- | Static methods defined here: | @@ -84815,6 +84987,9 @@ class enum_type_data_t(enum_member_vec_t) | is_64bit(self, *args) -> 'bool' | is_64bit(self) -> bool | + | is_bf(self, *args) -> 'bool' + | is_bf(self) -> bool + | | is_char(self, *args) -> 'bool' | is_char(self) -> bool | @@ -84827,6 +85002,12 @@ class enum_type_data_t(enum_member_vec_t) | is_udec(self, *args) -> 'bool' | is_udec(self) -> bool | + | set_bf(self, *args) -> 'bool' + | set_bf(self, bf) -> bool + | Convert enum to a bitmask (flag_enum) + | + | @param bf: (C++: bool) + | | swap(self, *args) -> 'void' | swap(self, r) | swap two instances @@ -85004,6 +85185,14 @@ class enum_type_data_t(enum_member_vec_t) | | __hash__ = None +Help on function enum_type_data_t__set_bf in module ida_typeinf: + +enum_type_data_t__set_bf(*args) -> 'bool' + enum_type_data_t__set_bf(_this, bf) -> bool + + @param _this: enum_type_data_t * + @param bf: bool + Help on function extract_argloc in module ida_typeinf: extract_argloc(*args) -> 'bool' @@ -85141,6 +85330,9 @@ class func_type_data_t(funcargvec_t) | is_static(self, *args) -> 'bool' | is_static(self) -> bool | + | is_swift_cc(self, *args) -> 'bool' + | is_swift_cc(self) -> bool + | | is_vararg_cc(self, *args) -> 'bool' | is_vararg_cc(self) -> bool | @@ -86077,6 +86269,14 @@ inf_big_arg_align(*args) -> 'bool' @param cc: cm_t +Help on function inf_huge_arg_align in module ida_typeinf: + +inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align() -> bool + inf_huge_arg_align(cc) -> bool + + @param cc: cm_t + Help on function inf_pack_stkargs in module ida_typeinf: inf_pack_stkargs(*args) -> 'bool' @@ -86213,6 +86413,14 @@ is_sdacl_byte(*args) -> 'bool' @param t: (C++: type_t) +Help on function is_swift_cc in module ida_typeinf: + +is_swift_cc(*args) -> 'bool' + is_swift_cc(cc) -> bool + Swift calling convention (arguments and return values in registers)? + + @param cc: (C++: cm_t) + Help on function is_tah_byte in module ida_typeinf: is_tah_byte(*args) -> 'bool' @@ -87565,6 +87773,18 @@ save_tinfo(*args) -> 'tinfo_code_t' @param name: char const * @param ntf_flags: int +Help on function save_tinfo2 in module ida_typeinf: + +save_tinfo2(*args) -> 'tinfo_code_t' + save_tinfo2(tif, til, ord, name, cmt, ntf_flags) -> tinfo_code_t + + @param tif: tinfo_t * + @param til: til_t * + @param ord: size_t + @param name: char const * + @param cmt: char const * + @param ntf_flags: int + Help on class scattered_aloc_t in module ida_typeinf: class scattered_aloc_t(argpartvec_t) @@ -89110,14 +89330,22 @@ class tinfo_t(builtins.object) | @param til: til_t * | @param name: char const * | @param ntf_flags: int + | + | set_named_type(self, til, name, cmt, ntf_flags=0) -> tinfo_code_t + | + | @param til: til_t * + | @param name: char const * + | @param cmt: char const * + | @param ntf_flags: int | | set_numbered_type(self, *args) -> 'tinfo_code_t' - | set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t + | set_numbered_type(self, til, ord, ntf_flags=0, name=None, cmt=None) -> tinfo_code_t | | @param til: til_t * | @param ord: uint32 | @param ntf_flags: int | @param name: char const * + | @param cmt: char const * | | set_symbol_type(self, *args) -> 'tinfo_code_t' | set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t @@ -89125,6 +89353,13 @@ class tinfo_t(builtins.object) | @param til: til_t * | @param name: char const * | @param ntf_flags: int + | + | set_symbol_type(self, til, name, cmt, ntf_flags=0) -> tinfo_code_t + | + | @param til: til_t * + | @param name: char const * + | @param cmt: char const * + | @param ntf_flags: int | | set_volatile(self, *args) -> 'void' | set_volatile(self) @@ -90881,7 +91116,7 @@ get_immvals(*args) -> 'PyObject *' case the transformed values (as needed for printing) will be stored instead. @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) number of operand (0..UA_MAXOP-1), -1 means all operands + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands @param F: (C++: flags64_t) flags for the specified address @return: number of immediate values (0..2*UA_MAXOP) @@ -90900,7 +91135,7 @@ get_printable_immvals(*args) -> 'PyObject *' Get immediate ready-to-print values at the specified address @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) number of operand (0..UA_MAXOP-1), -1 means all operands + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands @param F: (C++: flags64_t) flags for the specified address @return: number of immediate values (0..2*UA_MAXOP) @@ -91584,6 +91819,9 @@ class outctx_base_t(builtins.object) | gen_xref_lines(self, *args) -> 'bool' | gen_xref_lines(self) -> bool | + | getF(self, *args) -> 'flags64_t' + | getF(self) -> flags64_t + | | get_stkvar(self, *args) -> 'member_t *' | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * | @@ -91787,6 +92025,9 @@ class outctx_base_t(builtins.object) | ---------------------------------------------------------------------- | Data descriptors defined here: | + | F32 + | F32 + | | __dict__ | dictionary for instance variables (if defined) | @@ -91906,7 +92147,7 @@ class outctx_t(outctx_base_t) | It should be called from processor_t::ev_out_insn() and it will call | processor_t::ev_out_operand(). This function outputs a colored text. | - | @param n: (C++: int) number of operand + | @param n: (C++: int) 0..UA_MAXOP-1 operand number | @retval 1: operand is displayed | @retval 0: operand is hidden | @@ -91936,6 +92177,13 @@ class outctx_t(outctx_base_t) | @param prefix: (C++: const char *) char const * | @param flags: int | + | term_outctx(self, *args) -> 'int' + | term_outctx(self, prefix=None) -> int + | Finalize the output context. + | + | @param prefix: (C++: const char *) char const * + | @return: the number of generated lines. + | | ---------------------------------------------------------------------- | Data descriptors defined here: | @@ -91960,6 +92208,9 @@ class outctx_t(outctx_base_t) | insn | insn | + | next_line_ea + | next_line_ea + | | ph | ph | @@ -92072,6 +92323,9 @@ class outctx_t(outctx_base_t) | @param format: (C++: const char *) printf style colored line to generate | @return: overflow, lnar_maxsize has been reached | + | getF(self, *args) -> 'flags64_t' + | getF(self) -> flags64_t + | | get_stkvar(self, *args) -> 'member_t *' | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * | @@ -92241,16 +92495,12 @@ class outctx_t(outctx_base_t) | stack_view(self, *args) -> 'bool' | stack_view(self) -> bool | - | term_outctx(self, *args) -> 'int' - | term_outctx(self, prefix=None) -> int - | Finalize the output context. - | - | @param prefix: (C++: const char *) char const * - | @return: the number of generated lines. - | | ---------------------------------------------------------------------- | Data descriptors inherited from outctx_base_t: | + | F32 + | F32 + | | __dict__ | dictionary for instance variables (if defined) | @@ -92290,7 +92540,7 @@ print_operand(*args) -> 'qstring *' text representation of the specified operand (includes color codes.) @param ea: (C++: ea_t) the item address (instruction or data) - @param n: (C++: int) operand number (0,1,2...). meaningful only for instructions + @param n: (C++: int) 0..UA_MAXOP-1 operand number, meaningful only for instructions @param getn_flags: (C++: int) Name expression flags Currently only GETN_NODUMMY is accepted. @param newtype: (C++: struct printop_t *) if specified, print the operand using the specified type @@ -95030,7 +95280,7 @@ get_forced_operand(*args) -> 'qstring *' Get forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: size of forced operand or -1 Help on function get_frame_args_size in module idc: @@ -96696,7 +96946,7 @@ op_enum(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param id: (C++: enum_t) id of enum @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several @@ -96728,7 +96978,7 @@ set_forced_operand(*args) -> 'bool' Set forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @param op: (C++: const char *) text of operand * nullptr: do nothing (return 0) * "" : delete forced operand @@ -96828,7 +97078,7 @@ op_seg(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stkvar in module ida_bytes: @@ -96840,7 +97090,7 @@ op_stkvar(*args) -> 'bool' using insn_t::create_stkvar(). @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stroff in module idc: @@ -98009,7 +98259,7 @@ split_sreg_range(ea, reg, value, tag=2) @note: IDA keeps tracks of all the points where segment register change their values. This function allows you to specify the correct value of a segment - register if IDA is not able to find the corrent value. + register if IDA is not able to find the correct value. Help on function start_process in module ida_dbg: @@ -98438,123 +98688,63 @@ Documentation on variable FF_UNUSED in module ida_bytes: unused bit (was used for variable bytes) -Documentation on variable MS_0TYPE in module ida_bytes: +Documentation on variable MS_N_TYPE in module ida_bytes: - Mask for 1st arg typing. + Mask for nth arg. -Documentation on variable FF_0VOID in module ida_bytes: +Documentation on variable FF_N_VOID in module ida_bytes: Void (unknown)? -Documentation on variable FF_0NUMH in module ida_bytes: +Documentation on variable FF_N_NUMH in module ida_bytes: Hexadecimal number? -Documentation on variable FF_0NUMD in module ida_bytes: +Documentation on variable FF_N_NUMD in module ida_bytes: Decimal number? -Documentation on variable FF_0CHAR in module ida_bytes: +Documentation on variable FF_N_CHAR in module ida_bytes: Char ('x')? -Documentation on variable FF_0SEG in module ida_bytes: +Documentation on variable FF_N_SEG in module ida_bytes: Segment? -Documentation on variable FF_0OFF in module ida_bytes: +Documentation on variable FF_N_OFF in module ida_bytes: Offset? -Documentation on variable FF_0NUMB in module ida_bytes: +Documentation on variable FF_N_NUMB in module ida_bytes: Binary number? -Documentation on variable FF_0NUMO in module ida_bytes: +Documentation on variable FF_N_NUMO in module ida_bytes: Octal number? -Documentation on variable FF_0ENUM in module ida_bytes: +Documentation on variable FF_N_ENUM in module ida_bytes: Enumeration? -Documentation on variable FF_0FOP in module ida_bytes: +Documentation on variable FF_N_FOP in module ida_bytes: Forced operand? -Documentation on variable FF_0STRO in module ida_bytes: +Documentation on variable FF_N_STRO in module ida_bytes: Struct offset? -Documentation on variable FF_0STK in module ida_bytes: +Documentation on variable FF_N_STK in module ida_bytes: Stack variable? -Documentation on variable FF_0FLT in module ida_bytes: +Documentation on variable FF_N_FLT in module ida_bytes: Floating point number? -Documentation on variable FF_0CUST in module ida_bytes: - - Custom representation? - -Documentation on variable MS_1TYPE in module ida_bytes: - - Mask for the type of other operands. - -Documentation on variable FF_1VOID in module ida_bytes: - - Void (unknown)? - -Documentation on variable FF_1NUMH in module ida_bytes: - - Hexadecimal number? - -Documentation on variable FF_1NUMD in module ida_bytes: - - Decimal number? - -Documentation on variable FF_1CHAR in module ida_bytes: - - Char ('x')? - -Documentation on variable FF_1SEG in module ida_bytes: - - Segment? - -Documentation on variable FF_1OFF in module ida_bytes: - - Offset? - -Documentation on variable FF_1NUMB in module ida_bytes: - - Binary number? - -Documentation on variable FF_1NUMO in module ida_bytes: - - Octal number? - -Documentation on variable FF_1ENUM in module ida_bytes: - - Enumeration? - -Documentation on variable FF_1FOP in module ida_bytes: - - Forced operand? - -Documentation on variable FF_1STRO in module ida_bytes: - - Struct offset? - -Documentation on variable FF_1STK in module ida_bytes: - - Stack variable? - -Documentation on variable FF_1FLT in module ida_bytes: - - Floating point number? - -Documentation on variable FF_1CUST in module ida_bytes: +Documentation on variable FF_N_CUST in module ida_bytes: Custom representation? @@ -100741,9 +100931,9 @@ Documentation on variable operand_locator_t.opnum in module ida_hexrays: operand number in the instruction -Documentation on variable number_format_t.flags in module ida_hexrays: +Documentation on variable number_format_t.flags32 in module ida_hexrays: - ida flags, which describe number radix, enum, etc + low 32bit of flags (for compatibility) Documentation on variable number_format_t.opnum in module ida_hexrays: @@ -100762,6 +100952,10 @@ Documentation on variable number_format_t.type_name in module ida_hexrays: for stroffs: structure for offsetof() for enums: enum name +Documentation on variable number_format_t.flags in module ida_hexrays: + + ida flags, which describe number radix, enum, etc + Documentation on variable NF_FIXED in module ida_hexrays: number format has been defined by the user @@ -101903,7 +102097,7 @@ Documentation on variable WARN_ILL_PURGED in module ida_hexrays: Documentation on variable WARN_ILL_FUNCTYPE in module ida_hexrays: - 2 invalid function type has been ignored + 2 invalid function type 's' has been ignored Documentation on variable WARN_VARARG_TCAL in module ida_hexrays: @@ -103570,7 +103764,7 @@ Documentation on variable DECOMP_NO_WAIT in module ida_hexrays: Documentation on variable DECOMP_NO_CACHE in module ida_hexrays: - do not use decompilation cache + do not use decompilation cache (snippets are never cached) Documentation on variable DECOMP_NO_FRAME in module ida_hexrays: @@ -103590,7 +103784,21 @@ Documentation on variable DECOMP_NO_HIDE in module ida_hexrays: Documentation on variable DECOMP_NO_XREFS in module ida_hexrays: - do not update global xrefs cache + Obsolete. Use DECOMP_GXREFS_NOUPD. + +Documentation on variable DECOMP_GXREFS_DEFLT in module ida_hexrays: + + the default behavior: do not update the global xrefs cache upon decompile() + call, but when the pseudocode text is generated (e.g., through + cfunc_t.get_pseudocode()) + +Documentation on variable DECOMP_GXREFS_NOUPD in module ida_hexrays: + + do not update the global xrefs cache + +Documentation on variable DECOMP_GXREFS_FORCE in module ida_hexrays: + + update the global xrefs cache immediately Documentation on variable DECOMP_VOID_MBA in module ida_hexrays: @@ -104825,6 +105033,18 @@ Documentation on variable UA_MAXOP in module ida_ida: max number of operands allowed for an instruction +Documentation on variable VLD_AUTO_REPAIR in module ida_ida: + + automatically repair the database + +Documentation on variable VLD_DIALOG in module ida_ida: + + ask user to repair (this bit is mutually exclusive with VLD_AUTO_REPAIR) + +Documentation on variable VLD_SILENT in module ida_ida: + + no messages to the output window + Documentation on variable PY_ICID_INT64 in module ida_idaapi: int64 object @@ -105455,14 +105675,15 @@ Documentation on variable debugger_t.ev_set_exception_info in module ida_idd: Documentation on variable debugger_t.ev_suspended in module ida_idd: This event will be generated by the kernel each time it has suspended the - debugger process and refreshed the database. The debugger module may add - information to the database if it wants. + debuggee process and refreshed the database. The debugger module may add + information to the database if necessary. - The reason for introducing this event is that when an event line LOAD_DLL + The reason for introducing this event is that when an event like LOAD_DLL happens, the database does not reflect the memory state yet and therefore we can't add information about the dll into the database in the get_debug_event() - event. Only when the kernel has adjusted the database we can do it. Example: for - imported PE DLLs we will add the exported event names to the database. + function. Only when the kernel has adjusted the database we can do it. Example: + for loaded PE DLLs we can add the exported function names to the list of debug + names (see set_debug_names()). This event is generated in the main thread. @@ -106148,15 +106369,15 @@ Documentation on variable CF_CHG3 in module ida_idp: Documentation on variable CF_CHG4 in module ida_idp: - The instruction modifies 4 operand. + The instruction modifies the fourth operand. Documentation on variable CF_CHG5 in module ida_idp: - The instruction modifies 5 operand. + The instruction modifies the fifth operand. Documentation on variable CF_CHG6 in module ida_idp: - The instruction modifies 6 operand. + The instruction modifies the sixth operand. Documentation on variable CF_USE1 in module ida_idp: @@ -106172,15 +106393,15 @@ Documentation on variable CF_USE3 in module ida_idp: Documentation on variable CF_USE4 in module ida_idp: - The instruction uses value of the 4 operand. + The instruction uses value of the fourth operand. Documentation on variable CF_USE5 in module ida_idp: - The instruction uses value of the 5 operand. + The instruction uses value of the fifth operand. Documentation on variable CF_USE6 in module ida_idp: - The instruction uses value of the 6 operand. + The instruction uses value of the sixth operand. Documentation on variable CF_JUMP in module ida_idp: @@ -106197,19 +106418,19 @@ Documentation on variable CF_HLL in module ida_idp: Documentation on variable CF_CHG7 in module ida_idp: - The instruction modifies the 7th operand. + The instruction modifies the seventh operand. Documentation on variable CF_CHG8 in module ida_idp: - The instruction modifies the 8th operand. + The instruction modifies the eighth operand. Documentation on variable CF_USE7 in module ida_idp: - The instruction uses value of the 7th operand. + The instruction uses value of the seventh operand. Documentation on variable CF_USE8 in module ida_idp: - The instruction uses value of the 8th operand. + The instruction uses value of the eighth operand. Documentation on variable asm_t.flag in module ida_idp: @@ -108265,6 +108486,122 @@ Documentation on variable IWID_STACK in module ida_kernwin: Alias. Some IWID_* were confusing, and thus have been renamed. This is to ensure bw-compat. +Documentation on variable IDA_DEBUG_DREFS in module ida_kernwin: + + drefs + +Documentation on variable IDA_DEBUG_OFFSET in module ida_kernwin: + + offsets + +Documentation on variable IDA_DEBUG_FLIRT in module ida_kernwin: + + flirt + +Documentation on variable IDA_DEBUG_IDP in module ida_kernwin: + + idp module + +Documentation on variable IDA_DEBUG_LDR in module ida_kernwin: + + ldr module + +Documentation on variable IDA_DEBUG_PLUGIN in module ida_kernwin: + + plugin module + +Documentation on variable IDA_DEBUG_IDS in module ida_kernwin: + + ids files + +Documentation on variable IDA_DEBUG_CONFIG in module ida_kernwin: + + config file + +Documentation on variable IDA_DEBUG_CHECKMEM in module ida_kernwin: + + check heap consistency + +Documentation on variable IDA_DEBUG_LICENSE in module ida_kernwin: + + licensing + +Documentation on variable IDA_DEBUG_DEMANGLE in module ida_kernwin: + + demangler + +Documentation on variable IDA_DEBUG_QUEUE in module ida_kernwin: + + queue + +Documentation on variable IDA_DEBUG_ROLLBACK in module ida_kernwin: + + rollback + +Documentation on variable IDA_DEBUG_ALREADY in module ida_kernwin: + + already data or code + +Documentation on variable IDA_DEBUG_TIL in module ida_kernwin: + + type system + +Documentation on variable IDA_DEBUG_NOTIFY in module ida_kernwin: + + show all notifications + +Documentation on variable IDA_DEBUG_DEBUGGER in module ida_kernwin: + + debugger + +Documentation on variable IDA_DEBUG_APPCALL in module ida_kernwin: + + appcall + +Documentation on variable IDA_DEBUG_SRCDBG in module ida_kernwin: + + source debugging + +Documentation on variable IDA_DEBUG_ACCESSIBILITY in module ida_kernwin: + + accessibility + +Documentation on variable IDA_DEBUG_NETWORK in module ida_kernwin: + + network + +Documentation on variable IDA_DEBUG_INTERNET in module ida_kernwin: + + internet connection (for API backward compatibility) + +Documentation on variable IDA_DEBUG_SIMPLEX in module ida_kernwin: + + full stack analysis + +Documentation on variable IDA_DEBUG_DBGINFO in module ida_kernwin: + + handling of debug info (e.g. pdb, dwarf) + +Documentation on variable IDA_DEBUG_LUMINA in module ida_kernwin: + + lumina related + +Documentation on variable IDA_DEBUG_THEMES in module ida_kernwin: + + themes + +Documentation on variable IDA_DEBUG_REGEX in module ida_kernwin: + + regular expression + +Documentation on variable IDA_DEBUG_SUBPROC in module ida_kernwin: + + sub process + +Documentation on variable IDA_DEBUG_ALWAYS in module ida_kernwin: + + everything + Documentation on variable AST_ENABLE_ALWAYS in module ida_kernwin: enable action and do not call action_handler_t::update() anymore @@ -108329,10 +108666,6 @@ Documentation on variable CH_ATTRS in module ida_kernwin: generate ui_get_chooser_item_attrs (gui only) -Documentation on variable CH_NOIDB in module ida_kernwin: - - use the chooser before opening the database - Documentation on variable CH_FORCE_DEFAULT in module ida_kernwin: if a non-modal chooser was already open, change selection to the default one @@ -108440,7 +108773,9 @@ Documentation on variable CHCOL_PLAIN in module ida_kernwin: Documentation on variable CHCOL_PATH in module ida_kernwin: - file path + file path. TUI IDA will truncate excessive cell lengths starting at their + beginning, and prepending the resulting text with "..." order to leave the + filename visible Documentation on variable CHCOL_HEX in module ida_kernwin: @@ -109162,6 +109497,10 @@ Documentation on variable CLNL_FINDCMT in module ida_kernwin: Search for the comment symbol everywhere in the line, not only at the beginning. +Documentation on variable S2EAOPT_NOCALC in module ida_kernwin: + + don't try to interpret string as IDC (or current extlang) expression + Documentation on variable Choose.CH_MODAL in module ida_kernwin: Modal chooser @@ -110386,6 +110725,10 @@ Documentation on variable NSUP_OREF7 in module ida_nalt: outer complex reference information for operand 8 +Documentation on variable NSUP_EX_FLAGS in module ida_nalt: + + Extended flags. + Documentation on variable NSUP_POINTS in module ida_nalt: SP change points blob (see funcs.cpp). values NSUP_POINTS..NSUP_POINTS+0x1000 @@ -111346,7 +111689,7 @@ Documentation on variable ltag in module ida_netnode: Documentation on variable IDA_SDK_VERSION in module ida_pro: - IDA SDK v8.2. + IDA SDK v8.3. Documentation on variable MAXSTR in module ida_pro: @@ -111902,33 +112245,6 @@ Documentation on variable SEGMOD_SPARSE in module ida_segment: use sparse storage if extending the segment (for set_segm_start(), set_segm_end()) -Documentation on variable MSF_SILENT in module ida_segment: - - don't display a "please wait" box on the screen - -Documentation on variable MSF_NOFIX in module ida_segment: - - don't call the loader to fix relocations - -Documentation on variable MSF_LDKEEP in module ida_segment: - - keep the loader in the memory (optimization) - -Documentation on variable MSF_FIXONCE in module ida_segment: - - call loader only once with the special calling method. valid for - rebase_program(). see loader_t::move_segm. - -Documentation on variable MSF_PRIORITY in module ida_segment: - - loader segments will overwrite any existing debugger segments when moved. valid - for move_segm() - -Documentation on variable MSF_NETNODES in module ida_segment: - - move netnodes instead of changing inf.netdelta (this is slower); valid for - rebase_program() - Documentation on variable MOVE_SEGM_OK in module ida_segment: all ok @@ -111977,6 +112293,33 @@ Documentation on variable MOVE_SEGM_INVAL in module ida_segment: Invalid argument (delta/target does not fit the address space) +Documentation on variable MSF_SILENT in module ida_segment: + + don't display a "please wait" box on the screen + +Documentation on variable MSF_NOFIX in module ida_segment: + + don't call the loader to fix relocations + +Documentation on variable MSF_LDKEEP in module ida_segment: + + keep the loader in the memory (optimization) + +Documentation on variable MSF_FIXONCE in module ida_segment: + + call loader only once with the special calling method. valid for + rebase_program(). see loader_t::move_segm. + +Documentation on variable MSF_PRIORITY in module ida_segment: + + loader segments will overwrite any existing debugger segments when moved. valid + for move_segm() + +Documentation on variable MSF_NETNODES in module ida_segment: + + move netnodes instead of changing inf.netdelta (this is slower); valid for + rebase_program() + Documentation on variable CSS_OK in module ida_segment: ok @@ -112960,9 +113303,9 @@ Documentation on variable CM_CC_THISCALL in module ida_typeinf: stack, purged (x86), first arg is in reg (compiler-dependent) -Documentation on variable CM_CC_MANUAL in module ida_typeinf: +Documentation on variable CM_CC_SWIFT in module ida_typeinf: - special case for compiler specific (not used) + (Swift) arguments and return values in registers (compiler-dependent) Documentation on variable CM_CC_SPOILED in module ida_typeinf: @@ -112970,6 +113313,10 @@ Documentation on variable CM_CC_SPOILED in module ida_typeinf: {spoilreg_t} present real cm_t byte. if n == BFA_FUNC_MARKER, the next byte is the function attribute byte. +Documentation on variable CM_CC_GOLANG in module ida_typeinf: + + (Go) arguments and return value in stack + Documentation on variable CM_CC_SPECIALE in module ida_typeinf: CM_CC_SPECIAL with ellipsis @@ -113288,6 +113635,10 @@ Documentation on variable PRTYPE_COLORED in module ida_typeinf: add color tag COLOR_SYMBOL for any parentheses, commas and colons +Documentation on variable PRTYPE_1LINCMT in module ida_typeinf: + + print comments in one line mode + Documentation on variable NTF_TYPE in module ida_typeinf: type name @@ -113990,7 +114341,7 @@ Documentation on variable stkarg_area_info_t.linkage_area in module ida_typeinf: Documentation on variable enum_type_data_t.group_sizes in module ida_typeinf: - if present, specifies bitfield group sizes each group starts with a mask member + if present, specifies bitmask group sizes each group starts with a mask member Documentation on variable enum_type_data_t.taenum_bits in module ida_typeinf: diff --git a/python/idautils.py b/python/idautils.py index fad8964..76c6693 100644 --- a/python/idautils.py +++ b/python/idautils.py @@ -249,7 +249,10 @@ def Modules(): mod = ida_idd.modinfo_t() result = ida_dbg.get_first_module(mod) while result: - yield mod + # Note: can't simply return `mod` here, since callers might + # collect all modules in a list, and they would all re-use + # the underlying C++ object. + yield ida_idaapi.object_t(name=mod.name, size=mod.size, base=mod.base, rebase_to=mod.rebase_to) result = ida_dbg.get_next_module(mod) @@ -432,13 +435,7 @@ def MapDataList(ea, length, func, wordsize=1): PutDataList(ea, map(func, GetDataList(ea, length, wordsize)), wordsize) -def GetInputFileMD5(): - """ - Return the MD5 hash of the input binary file - - @return: MD5 string or None on error - """ - return idc.retrieve_input_file_md5() +GetInputFileMD5 = ida_nalt.retrieve_input_file_md5 class Strings(object): diff --git a/python/idc.py b/python/idc.py index 085585d..3e7c19e 100644 --- a/python/idc.py +++ b/python/idc.py @@ -1027,13 +1027,13 @@ def split_sreg_range(ea, reg, value, tag=SR_user): @note: IDA keeps tracks of all the points where segment register change their values. This function allows you to specify the correct value of a segment - register if IDA is not able to find the corrent value. + register if IDA is not able to find the correct value. """ - reg = ida_idp.str2reg(reg); - if reg >= 0: - return ida_segregs.split_sreg_range(ea, reg, value, tag) - else: - return False + rnames = [r.casefold() for r in ida_idp.ph_get_regnames()] + for regno in range(ida_idp.ph_get_reg_first_sreg(), ida_idp.ph_get_reg_last_sreg()+1): + if rnames[regno]==reg.casefold(): + return ida_segregs.split_sreg_range(ea, regno, value, tag) + return False auto_mark_range = ida_auto.auto_mark_range @@ -2641,13 +2641,18 @@ MSF_NOFIX = 0x0002 # don't call the loader to fix relocations MSF_LDKEEP = 0x0004 # keep the loader in the memory (optimization) MSF_FIXONCE = 0x0008 # valid for rebase_program(): call loader only once -MOVE_SEGM_OK = 0 # all ok -MOVE_SEGM_PARAM = -1 # The specified segment does not exist -MOVE_SEGM_ROOM = -2 # Not enough free room at the target address -MOVE_SEGM_IDP = -3 # IDP module forbids moving the segment -MOVE_SEGM_CHUNK = -4 # Too many chunks are defined, can't move -MOVE_SEGM_LOADER = -5 # The segment has been moved but the loader complained -MOVE_SEGM_ODD = -6 # Can't move segments by an odd number of bytes +MOVE_SEGM_OK = 0 # all ok +MOVE_SEGM_PARAM = -1 # The specified segment does not exist +MOVE_SEGM_ROOM = -2 # Not enough free room at the target address +MOVE_SEGM_IDP = -3 # IDP module forbids moving the segment +MOVE_SEGM_CHUNK = -4 # Too many chunks are defined, can't move +MOVE_SEGM_LOADER = -5 # The segment has been moved but the loader complained +MOVE_SEGM_ODD = -6 # Can't move segments by an odd number of bytes +MOVE_SEGM_ORPHAN = -7, # Orphan bytes hinder segment movement +MOVE_SEGM_DEBUG = -8, # Debugger segments cannot be moved +MOVE_SEGM_SOURCEFILES = -9, # Source files ranges of addresses hinder segment movement +MOVE_SEGM_MAPPING = -10, # Memory mapping ranges of addresses hinder segment movement +MOVE_SEGM_INVAL = -11, # Invalid argument (delta/target does not fit the address space) rebase_program = ida_segment.rebase_program diff --git a/pywraps.cpp b/pywraps.cpp index b737daf..facd699 100644 --- a/pywraps.cpp +++ b/pywraps.cpp @@ -1,6 +1,7 @@ #include #include +#include #include @@ -267,6 +268,83 @@ Py_ssize_t ida_export PyW_PyListToStrVec(qstrvec_t *out, PyObject *py_list) return pyvar_walk_list(py_list, lambda_t::cvt, out); } +//------------------------------------------------------------------------- +PyObject *ida_export PyW_from_jvalue_t(const jvalue_t &v) +{ + do + { + if ( v.type() == JT_UNKNOWN ) + break; + newref_t json_module(PyImport_ImportModule("json")); + if ( !json_module ) + break; + borref_t json_globals(PyModule_GetDict(json_module.o)); + if ( !json_globals ) + break; + borref_t json_loads(PyDict_GetItemString(json_globals.o, "loads")); + if ( !json_loads ) + break; + qstring clob; + if ( !serialize_json(&clob, v) ) + break; + ref_t dict = newref_t(PyObject_CallFunction(json_loads.o, "s", clob.c_str())); + if ( !dict ) + break; + dict.incref(); + return dict.o; + } while ( false ); + + Py_RETURN_NONE; +} + +//------------------------------------------------------------------------- +bool ida_export PyW_to_jvalue_t(jvalue_t *out, PyObject *py) +{ + do + { + newref_t json_module(PyImport_ImportModule("json")); + if ( !json_module ) + break; + borref_t json_globals(PyModule_GetDict(json_module.o)); + if ( !json_globals ) + break; + borref_t json_dumps(PyDict_GetItemString(json_globals.o, "dumps")); + if ( !json_dumps ) + break; + newref_t str(PyObject_CallFunction(json_dumps.o, "O", py)); + qstring buf; + if ( !PyUnicode_as_qstring(&buf, str.o) ) + break; + if ( parse_json_string(out, buf.c_str()) != eOk ) + break; + return true; + } while ( false ); + + return false; +} + +//------------------------------------------------------------------------- +PyObject *ida_export PyW_from_jobj_t(const jobj_t &o) +{ + jvalue_t v; + v.set_obj((jobj_t *) &o); + PyObject *rc = PyW_from_jvalue_t(v); + v.extract_obj(); + return rc; +} + +//------------------------------------------------------------------------- +bool ida_export PyW_to_jobj_t(jobj_t *out, PyObject *py) +{ + if ( !PyDict_Check(py) ) + return false; + jvalue_t v; + bool rc = PyW_to_jvalue_t(&v, py) && v.type() == JT_OBJ; + if ( rc ) + out->swap(v.obj()); + return rc; +} + //------------------------------------------------------------------------- PyObject *ida_export meminfo_vec_t_to_py(meminfo_vec_t &ranges) { @@ -1643,19 +1721,32 @@ bool ida_export py_customidamemo_t_bind(py_customidamemo_t *_this, PyObject *sel _this->self = borref_t(self); _this->view = view; + newref_t result(PyObject_CallMethod(self, (char *)"_OnBind", "O", Py_True)); + + if ( !result && PyErr_Occurred() != nullptr ) + { + msg("WARNING: Couldn't bind form object at %p:\n", self); + PyErr_Print(); + } return true; } //------------------------------------------------------------------------- -void ida_export py_customidamemo_t_unbind(py_customidamemo_t *_this, bool clear_view) +void ida_export py_customidamemo_t_unbind(py_customidamemo_t *_this) { if ( _this->self == nullptr ) return; PYGLOG("%p: py_customidamemo_t::unbind(); self.o=%p, view=%p\n", _this, _this->self.o, _this->view); PYW_GIL_CHECK_LOCKED_SCOPE(); + newref_t result(PyObject_CallMethod(_this->self.o, (char *)"_OnBind", "O", Py_False)); + if ( !result && PyErr_Occurred() != nullptr ) + { + msg("WARNING: Couldn't unbind form object at %p:\n", _this->self.o); + PyErr_Print(); + } + PyObject_SetAttrString(_this->self.o, S_M_THIS, Py_None); _this->self = newref_t(nullptr); - if ( clear_view ) _this->view = nullptr; } diff --git a/pywraps.hpp b/pywraps.hpp index 9c5332f..1565256 100644 --- a/pywraps.hpp +++ b/pywraps.hpp @@ -28,6 +28,9 @@ typedef PY_LONG_LONG bvsval_t; class insn_t; class op_t; struct switch_info_t; +struct jobj_t; +struct jarr_t; +struct jvalue_t; // "A pointer can be explicitly converted to any integral type large // enough to hold it. The mapping function is implementation-defined." @@ -507,6 +510,11 @@ idaman Py_ssize_t ida_export PyW_PyListToSizeVec(sizevec_t *out, PyObject *py_li idaman Py_ssize_t ida_export PyW_PyListToEaVec(eavec_t *out, PyObject *py_list); idaman Py_ssize_t ida_export PyW_PyListToStrVec(qstrvec_t *out, PyObject *py_list); +idaman PyObject *ida_export PyW_from_jvalue_t(const jvalue_t &v); +idaman bool ida_export PyW_to_jvalue_t(jvalue_t *out, PyObject *py); +idaman PyObject *ida_export PyW_from_jobj_t(const jobj_t &o); +idaman bool ida_export PyW_to_jobj_t(jobj_t *out, PyObject *py); + #ifndef LUMINA_HPP // I'd rather put the def of ea64_t and ea64vec_t into pro.h... #ifdef __EA64__ typedef ea_t ea64_t; @@ -682,9 +690,9 @@ struct pycim_callbacks_ids_t : public qvector #define PY_CIM_PARAMS_bind (PyObject *in_self, TWidget *in_view) #define PY_CIM_TRANSM_bind (this, in_self, in_view) -#define PY_CIM_HLPPRM_unbind (py_customidamemo_t *_this, bool clear_view) -#define PY_CIM_PARAMS_unbind (bool clear_view) -#define PY_CIM_TRANSM_unbind (this, clear_view) +#define PY_CIM_HLPPRM_unbind (py_customidamemo_t *_this) +#define PY_CIM_PARAMS_unbind () +#define PY_CIM_TRANSM_unbind (this) #define DECL_CIM_HELPER(decl, RType, MName, MParams) \ decl RType ida_export py_customidamemo_t_##MName MParams @@ -1093,7 +1101,7 @@ py_customidamemo_t::py_customidamemo_t() py_customidamemo_t::~py_customidamemo_t() { PYGLOG("%p: ~py_customidamemo_t()\n", this); - unbind(true); + unbind(); get_plugin_instance()->pycim_lookup_info.del_by_py_view(this); } @@ -1272,13 +1280,13 @@ protected: } } +#ifdef TESTABLE_BUILD PyObject *dump_state( const event_code_to_method_name_t *mappings, size_t mappings_size, bool assert_all_reimplemented) const { qstring buf; -#ifdef TESTABLE_BUILD qstrvec_t missing_reimpls; buf.sprnt("%s(this=%p) \"%s\" {type=%d, cb=%p, flags=%x}", class_name, this, identifier.c_str(), int(type), listener.cb, flags); @@ -1327,13 +1335,9 @@ protected: } if ( buf.last() != '\n' ) buf.append('\n'); -#else - qnotused(mappings); - qnotused(mappings_size); - qnotused(assert_all_reimplemented); -#endif return PyUnicode_from_qstring(buf); } +#endif }; //------------------------------------------------------------------------- diff --git a/pywraps/py_bytes.hpp b/pywraps/py_bytes.hpp index 269b218..952593f 100644 --- a/pywraps/py_bytes.hpp +++ b/pywraps/py_bytes.hpp @@ -93,6 +93,38 @@ static bool py_do_get_bytes( // +#define MS_0TYPE 0x00F00000LU ///< Mask for 1st arg typing +#define FF_0VOID 0x00000000LU ///< Void (unknown)? +#define FF_0NUMH 0x00100000LU ///< Hexadecimal number? +#define FF_0NUMD 0x00200000LU ///< Decimal number? +#define FF_0CHAR 0x00300000LU ///< Char ('x')? +#define FF_0SEG 0x00400000LU ///< Segment? +#define FF_0OFF 0x00500000LU ///< Offset? +#define FF_0NUMB 0x00600000LU ///< Binary number? +#define FF_0NUMO 0x00700000LU ///< Octal number? +#define FF_0ENUM 0x00800000LU ///< Enumeration? +#define FF_0FOP 0x00900000LU ///< Forced operand? +#define FF_0STRO 0x00A00000LU ///< Struct offset? +#define FF_0STK 0x00B00000LU ///< Stack variable? +#define FF_0FLT 0x00C00000LU ///< Floating point number? +#define FF_0CUST 0x00D00000LU ///< Custom representation? + +#define MS_1TYPE 0x0F000000LU ///< Mask for the type of other operands +#define FF_1VOID 0x00000000LU ///< Void (unknown)? +#define FF_1NUMH 0x01000000LU ///< Hexadecimal number? +#define FF_1NUMD 0x02000000LU ///< Decimal number? +#define FF_1CHAR 0x03000000LU ///< Char ('x')? +#define FF_1SEG 0x04000000LU ///< Segment? +#define FF_1OFF 0x05000000LU ///< Offset? +#define FF_1NUMB 0x06000000LU ///< Binary number? +#define FF_1NUMO 0x07000000LU ///< Octal number? +#define FF_1ENUM 0x08000000LU ///< Enumeration? +#define FF_1FOP 0x09000000LU ///< Forced operand? +#define FF_1STRO 0x0A000000LU ///< Struct offset? +#define FF_1STK 0x0B000000LU ///< Stack variable? +#define FF_1FLT 0x0C000000LU ///< Floating point number? +#define FF_1CUST 0x0D000000LU ///< Custom representation? + //------------------------------------------------------------------------ /* # diff --git a/pywraps/py_graph.hpp b/pywraps/py_graph.hpp index 5b16642..4b5a445 100644 --- a/pywraps/py_graph.hpp +++ b/pywraps/py_graph.hpp @@ -324,9 +324,9 @@ public: // Form already created? try to get associated py_graph instance // so that we reuse it - TWidget *existing = find_widget(title.c_str()); - if ( existing != nullptr ) - get_plugin_instance()->pycim_lookup_info.find_by_view((py_customidamemo_t**) &py_graph, existing); + TWidget *view = find_widget(title.c_str()); + if ( view != nullptr ) + get_plugin_instance()->pycim_lookup_info.find_by_view((py_customidamemo_t**) &py_graph, view); if ( py_graph == nullptr ) { @@ -335,8 +335,10 @@ public: else { // unbind so we are rebound - py_graph->unbind(false); + py_graph->unbind(); + py_graph->bind(self, view); py_graph->refresh_needed = true; + refresh_viewer(view); // cfr graph.hpp how to refresh an existing mutable_graph_t } if ( py_graph->initialize(self, title.c_str()) < 0 ) { diff --git a/pywraps/py_graph.py b/pywraps/py_graph.py index 415037f..e440e70 100644 --- a/pywraps/py_graph.py +++ b/pywraps/py_graph.py @@ -117,6 +117,12 @@ class GraphViewer(ida_kernwin.CustomIDAMemo): def OnCommand(self, cmd_id): return 0 + def _OnBind(self, hook): + if hook: + self.ui_hooks_trampoline.hook() + else: + self.ui_hooks_trampoline.unhook() + super()._OnBind(hook) # # def OnGetText(self, node_id): diff --git a/pywraps/py_idaapi.hpp.in b/pywraps/py_idaapi.hpp similarity index 98% rename from pywraps/py_idaapi.hpp.in rename to pywraps/py_idaapi.hpp index 8a2dbf3..003f1e8 100644 --- a/pywraps/py_idaapi.hpp.in +++ b/pywraps/py_idaapi.hpp @@ -104,8 +104,9 @@ static void ida_idaapi_closebase(void) {} // - -${BASE_HOOKS_FLAGS} +// NOTE: See also `pywraps.hpp` +#define HBF_CALL_WITH_NEW_EXEC 0x00000001 +#define HBF_VOLATILE_METHOD_SET 0x00000002 //------------------------------------------------------------------------ /* diff --git a/pywraps/py_kernwin.hpp b/pywraps/py_kernwin.hpp index 329c934..aa71c63 100644 --- a/pywraps/py_kernwin.hpp +++ b/pywraps/py_kernwin.hpp @@ -346,25 +346,6 @@ PyObject *py_ask_str(qstring *defval, int hist, const char *prompt) return py_ret; } -//------------------------------------------------------------------------ -/* -# -def str2ea(addr): - """ - Converts a string express to EA. The expression evaluator may be called as well. - - @return: BADADDR or address value - """ - pass -# -*/ -ea_t py_str2ea(const char *str, ea_t screenEA = BADADDR) -{ - ea_t ea; - bool ok = str2ea(&ea, str, screenEA); - return ok ? ea : BADADDR; -} - //------------------------------------------------------------------------ /* # @@ -771,62 +752,12 @@ public: PyObject *get_dict() { - do - { - newref_t json_module(PyImport_ImportModule("json")); - if ( !json_module ) - break; - borref_t json_globals(PyModule_GetDict(json_module.o)); - if ( !json_globals ) - break; - borref_t json_loads(PyDict_GetItemString(json_globals.o, "loads")); - if ( !json_loads ) - break; - - qstring clob; - if ( !serialize_json(&clob, o) ) - break; - - if ( ref_t dict = newref_t(PyObject_CallFunction(json_loads.o, "s", clob.c_str())) ) - { - dict.incref(); - return dict.o; - } - - } while ( false ); - Py_RETURN_NONE; + return PyW_from_jobj_t(*o); } static bool fill_jobj_from_dict(jobj_t *out, PyObject *dict) { - do - { - if ( !PyDict_Check(dict) ) - break; - newref_t json_module(PyImport_ImportModule("json")); - if ( !json_module ) - break; - borref_t json_globals(PyModule_GetDict(json_module.o)); - if ( !json_globals ) - break; - - borref_t json_dumps(PyDict_GetItemString(json_globals.o, "dumps")); - if ( !json_dumps ) - break; - - newref_t str(PyObject_CallFunction(json_dumps.o, "O", dict)); - qstring buf; - if ( PyUnicode_as_qstring(&buf, str.o) ) - { - jvalue_t tmp; - if ( parse_json_string(&tmp, buf.c_str()) == eOk ) - { - out->swap(tmp.obj()); - return true; - } - } - } while ( false ); - return false; + return PyW_to_jobj_t(out, dict); } }; diff --git a/pywraps/py_kernwin_choose.hpp b/pywraps/py_kernwin_choose.hpp index 9972562..2c0f218 100644 --- a/pywraps/py_kernwin_choose.hpp +++ b/pywraps/py_kernwin_choose.hpp @@ -995,6 +995,8 @@ PyObject *py_get_chooser_data(const char *chooser_caption, int n) return py_list; } +#define CH_NOIDB 0x00000040 // bw-compat + // #endif // __PY_KERNWIN_CHOOSE__ diff --git a/pywraps/py_kernwin_idaview.hpp b/pywraps/py_kernwin_idaview.hpp index 4421fab..8fa1507 100644 --- a/pywraps/py_kernwin_idaview.hpp +++ b/pywraps/py_kernwin_idaview.hpp @@ -57,7 +57,7 @@ bool py_idaview_t::Unbind(PyObject *self) py_idaview_t *_this = (py_idaview_t *) view_extract_this(self); if ( _this == nullptr ) return false; - _this->unbind(true); + _this->unbind(); return true; } diff --git a/pywraps/py_kernwin_viewhooks.py b/pywraps/py_kernwin_viewhooks.py index f0fb8a9..3f35306 100644 --- a/pywraps/py_kernwin_viewhooks.py +++ b/pywraps/py_kernwin_viewhooks.py @@ -96,6 +96,12 @@ class CustomIDAMemo(View_Hooks): gitpl = self._graph_item_tuple(ve) return cb(ve.x, ve.y, ve.state, len(gitpl), gitpl, ve.renderer_pos) + def _OnBind(self, hook): + if hook: + self.hook() + else: + self.unhook() + # End of hooks->wrapper trampolines diff --git a/pywraps/py_lumina.py b/pywraps/py_lumina.py new file mode 100644 index 0000000..fd54a34 --- /dev/null +++ b/pywraps/py_lumina.py @@ -0,0 +1,140 @@ + +# +import ida_bytes +import ida_typeinf +import ida_ida +import ida_pro + +class simple_idb_diff_handler_t(func_md_diff_handler_t): + + NO_DATA_MARKER = None + + class indenter_t(object): + def __init__(self, handler): + self.handler = handler + self.handler.indent += 1 + def __del__(self): + self.handler.indent -= 1 + + def __init__(self, pfn): + super(self.__class__, self).__init__() + self.pfn = pfn + self.header_generated = False + self.lines = [] + self.indent = 0 + + def on_score_changed(self, l, r): + self.put2(str(l), str(r), "Score") + + def on_name_changed(self, l, r): + self.put2(l, r, "Name") + + def on_proto_changed(self, l, r): + self.put2(self.format_type(l), self.format_type(r), "Prototype") + + def on_function_comment_changed(self, l, r, rep): + self.put2(l, r, "Function comment (%s)" % ("repeatable" if rep else "regular")) + + def on_comment_changed(self, fchunk_nr, fchunk_off, l, r, rep): + loc = self.where(fchunk_nr, fchunk_off) + self.put2(l, r, "%s comment @ %s" % ("repeatable" if rep else "regular", loc)) + + def on_extra_comment_changed(self, fchunk_nr, fchunk_off, l, r, is_prev): + loc = self.where(fchunk_nr, fchunk_off) + self.put2(self.format_extra_cmt(l), + self.format_extra_cmt(r), + "%sterior extra comment @ %s" % ("An" if is_prev else "Pos", loc)) + + def on_user_stkpnt_changed(self, fchunk_nr, fchunk_off, l, r): + loc = self.where(fchunk_nr, fchunk_off) + self.put2(self.format_stkpnt(l), + self.format_stkpnt(r), + "User stack point @ %s" % loc) + + def on_frame_member_changed(self, offset, l, r): + self.ensure_header_generated() + self.put("Member @ 0x%X" % offset) + + indenter = self.indenter_t(self) + ltype, loprepr, lcmt, lrptcmt = self.format_frame_member(l) + rtype, roprepr, rcmt, rrptcmt = self.format_frame_member(r) + + cmp_put = lambda l, r, topic: self.put2(l, r, topic) if l != r else None + cmp_put(ltype, rtype, ".type") + cmp_put(loprepr, roprepr, ".opinfo") + cmp_put(lcmt, rcmt, ".cmt") + cmp_put(lrptcmt, rrptcmt, ".rptcmt") + + def on_insn_ops_repr_changed(self, fchunk_nr, fchunk_off, l, r): + loc = self.where(fchunk_nr, fchunk_off) + ls, rs = self.format_insn_ops(l), self.format_insn_ops(r) + self.put2(ls, rs, "Insn operands @ %s" % loc) + + # --- helpers --- + + def ensure_header_generated(self): + if not self.header_generated: + self.lines.append("") + self.lines.append("Function 0x%X" % self.pfn.start_ea) + self.header_generated = True + + def where(self, fchunk_nr, fchunk_off): + site = insn_site_t() + site.fchunk_nr = fchunk_nr + site.fchunk_off = fchunk_off + return "0x%X" % site.toea(self.pfn) + + def format_type(self, type_parts): + tif = ida_typeinf.tinfo_t() + if tif.deserialize(None, type_parts.type, type_parts.fields): + return tif._print() + + def format_extra_cmt(self, cmt): + if cmt: + cmt = ida_pro.str2user(cmt) + return cmt + + def format_stkpnt(self, stkpnt): + if stkpnt is not None: + return "%d" % stkpnt + + def format_frame_member(self, m): + _type = self.NO_DATA_MARKER + _oprepr = self.NO_DATA_MARKER + _cmt = self.NO_DATA_MARKER + _rptcmt = self.NO_DATA_MARKER + if m: + if len(m.type.type): + _type = self.format_type(m.type) + if ida_bytes.is_off0(m.info.flags): + _oprepr = '{"target" : 0x%X, "base" : 0x%X, "tdelta" : 0x%X, "flags" : 0x%08x}' % ( + m.info.opinfo.ri.target, + m.info.opinfo.ri.base, + m.info.opinfo.ri.tdelta, + m.info.opinfo.ri.flags) + _cmt = m.cmt + _rptcmt = m.rptcmt + return (_type, _oprepr, _cmt, _rptcmt) + + def format_insn_ops(self, ro): + if not ro: + return "[]" + parts = [] + for i in range(ida_ida.UA_MAXOP): + parts.append("op%d=0x%X" % (i, (ro.flags >> ida_bytes.get_operand_type_shift(i)) & 0xF)) + return "[%s]" % ", ".join(parts) + + def put(self, msg): + self.lines.append(" " * self.indent + msg) + + def put2(self, l, r, topic): + self.ensure_header_generated() + if l is None: l = self.NO_DATA_MARKER + if r is None: r = self.NO_DATA_MARKER + + self.put(topic) + indenter = self.indenter_t(self) + self.put("- %s" % l) + self.put("+ %s" % r) + +# diff --git a/release_pydoc_injections3.txt b/release_pydoc_injections3.txt index 80ed89b..7cfb158 100644 --- a/release_pydoc_injections3.txt +++ b/release_pydoc_injections3.txt @@ -767,7 +767,7 @@ Help on function char_flag in module ida_bytes: char_flag(*args) -> 'flags64_t' char_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function chunk_size in module ida_bytes: @@ -807,7 +807,7 @@ clr_op_type(*args) -> 'bool' 'undefined') @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function code_flag in module ida_bytes: @@ -816,6 +816,13 @@ code_flag(*args) -> 'flags64_t' code_flag() -> flags64_t FF_CODE +Help on function combine_flags in module ida_bytes: + +combine_flags(*args) -> 'flags64_t' + combine_flags(F) -> flags64_t + + @param F: flags64_t + Help on class compiled_binpat_t in module ida_bytes: class compiled_binpat_t(builtins.object) @@ -1258,7 +1265,7 @@ Help on function custfmt_flag in module ida_bytes: custfmt_flag(*args) -> 'flags64_t' custfmt_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on class data_format_t in module ida_bytes: @@ -1498,7 +1505,7 @@ Help on function enum_flag in module ida_bytes: enum_flag(*args) -> 'flags64_t' enum_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function equal_bytes in module ida_bytes: @@ -1808,7 +1815,7 @@ Help on function flt_flag in module ida_bytes: flt_flag(*args) -> 'flags64_t' flt_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function free_chunk in module ida_bytes: @@ -2008,7 +2015,7 @@ get_enum_id(*args) -> 'uchar *' Get enum id of 'enum' operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands @return: id of enum or BADNODE Help on function get_first_hidden_range in module ida_bytes: @@ -2053,7 +2060,7 @@ get_forced_operand(*args) -> 'qstring *' Get forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: size of forced operand or -1 Help on function get_full_data_elsize in module ida_bytes: @@ -2117,7 +2124,8 @@ get_item_flag(*args) -> 'flags64_t' elements. @param from: (C++: ea_t) linear address of the instruction which refers to 'ea' - @param n: (C++: int) number of operand which refers to 'ea' + @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the + operands @param ea: (C++: ea_t) the referenced address @param appzero: (C++: bool) append a struct field name if the field offset is zero? meaningful only if the name refers to a structure. @@ -2132,12 +2140,26 @@ get_item_head(*args) -> 'ea_t' @param ea: (C++: ea_t) +Help on function get_item_refinfo in module ida_bytes: + +get_item_refinfo(*args) -> 'bool' + get_item_refinfo(ri, ea, n) -> bool + Get refinfo of the item at 'ea'. This function works for a regular offset + operand as well as for a tail byte of a structure variable (in this case refinfo + to corresponding structure member will be returned) + + @param ri: (C++: refinfo_t *) refinfo holder + @param ea: (C++: ea_t) the item address + @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the + operands + @return: success + Help on function get_item_size in module ida_bytes: get_item_size(*args) -> 'asize_t' get_item_size(ea) -> asize_t Get size of item (instruction/data) in bytes. Unexplored bytes have length of 1 - byte. This function never returns 0. + byte. This function returns 0 only for BADADDR. @param ea: (C++: ea_t) @@ -2214,6 +2236,27 @@ get_octet2(*args) -> 'uchar *' @param ogen: octet_generator_t * +Help on function get_operand_flag in module ida_bytes: + +get_operand_flag(*args) -> 'flags64_t' + get_operand_flag(typebits, n) -> flags64_t + Place operand `n`'s type flag in the right nibble of a 64-bit flags set. + + @param typebits: (C++: uint8) the type bits (one of `FF_N_`) + @param n: (C++: int) the operand number + @return: the shift to the nibble + +Help on function get_operand_type_shift in module ida_bytes: + +get_operand_type_shift(*args) -> 'int' + get_operand_type_shift(n) -> int + Get the shift in `flags64_t` for the nibble representing operand `n`'s type + + Note: n must be < UA_MAXOP, and is not checked + + @param n: (C++: uint32) the operand number + @return: the shift to the nibble + Help on function get_opinfo in module ida_bytes: get_opinfo(*args) -> 'opinfo_t *' @@ -2347,7 +2390,7 @@ get_stroff_path(*args) -> 'int' @param path: (C++: tid_t *) buffer for structure path (strpath). see nalt.hpp for more info. @param delta: (C++: adiff_t *) struct offset delta @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands @return: length of strpath Help on function get_wide_byte in module ida_bytes: @@ -2812,6 +2855,17 @@ is_enum1(*args) -> 'bool' @param F: (C++: flags64_t) +Help on function is_flag_for_operand in module ida_bytes: + +is_flag_for_operand(*args) -> 'bool' + is_flag_for_operand(F, typebits, n) -> bool + Check that the 64-bit flags set has the expected type for operand `n`. + + @param F: (C++: flags64_t) the flags + @param typebits: (C++: uint8) the type bits (one of `FF_N_`) + @param n: (C++: int) the operand number + @return: success + Help on function is_float in module ida_bytes: is_float(*args) -> 'bool' @@ -2860,7 +2914,7 @@ is_forced_operand(*args) -> 'bool' Is operand manually defined?. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number Help on function is_func in module ida_bytes: @@ -3351,7 +3405,7 @@ Help on function off_flag in module ida_bytes: off_flag(*args) -> 'flags64_t' off_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function op_adds_xrefs in module ida_bytes: @@ -3408,7 +3462,7 @@ op_enum(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param id: (C++: enum_t) id of enum @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several @@ -3459,7 +3513,7 @@ op_seg(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stkvar in module ida_bytes: @@ -3471,7 +3525,7 @@ op_stkvar(*args) -> 'bool' using insn_t::create_stkvar(). @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stroff in module ida_bytes: @@ -3482,7 +3536,7 @@ op_stroff(*args) -> 'bool' bytes, converts them to 16/32bit word data @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param path: (C++: const tid_t *) structure path (strpath). see nalt.hpp for more info. @param path_len: (C++: int) length of the structure path @param delta: (C++: adiff_t) struct offset delta. usually 0. denotes the difference between the @@ -3822,7 +3876,7 @@ Help on function seg_flag in module ida_bytes: seg_flag(*args) -> 'flags64_t' seg_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function set_cmt in module ida_bytes: @@ -3844,7 +3898,7 @@ set_forced_operand(*args) -> 'bool' Set forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @param op: (C++: const char *) text of operand * nullptr: do nothing (return 0) * "" : delete forced operand @@ -3889,7 +3943,7 @@ set_op_type(*args) -> 'bool' @param ea: (C++: ea_t) linear address @param type: (C++: flags64_t) new flag value (should be obtained from char_flag(), num_flag() and similar functions) - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @retval 1: ok @retval 0: failed (applied to a tail byte) @@ -3908,14 +3962,15 @@ set_opinfo(*args) -> 'bool' events @return: success @note: for custom formats (if is_custfmt(flag, n) is true) or for offsets (if - is_off(flag, n) is true) N can be in range -1..UA_MAXOP-1. In the case of - -1 the additional information about all operands will be set. + is_off(flag, n) is true) N can be in range 0..UA_MAXOP-1 or equal to + OPND_ALL. In the case of OPND_ALL the additional information about all + operands will be set. Help on function stkvar_flag in module ida_bytes: stkvar_flag(*args) -> 'flags64_t' stkvar_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function strlit_flag in module ida_bytes: @@ -3927,7 +3982,7 @@ Help on function stroff_flag in module ida_bytes: stroff_flag(*args) -> 'flags64_t' stroff_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function stru_flag in module ida_bytes: @@ -10923,7 +10978,7 @@ calc_stkvar_struc_offset(*args) -> 'ea_t' @param pfn: (C++: func_t *) pointer to function (can't be nullptr!) @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) number of operand: (0..UA_MAXOP-1) -1 if error, return BADADDR + @param n: (C++: int) 0..UA_MAXOP-1 operand number -1 if error, return BADADDR @return: BADADDR if some error (issue a warning if stack frame is bad) Help on function define_stkvar in module ida_frame: @@ -11061,14 +11116,10 @@ get_effective_spd(*args) -> 'sval_t' Help on function get_frame in module ida_frame: get_frame(*args) -> 'struc_t *' - get_frame(pfn) -> struc_t + get_frame(pfn) -> struc_t * Get pointer to function frame. @param pfn: func_t const * - - get_frame(ea) -> struc_t * - - @param ea: ea_t Help on function get_frame_part in module ida_frame: @@ -14190,6 +14241,8 @@ class GraphViewer(ida_kernwin.CustomIDAMemo) | | @return: Boolean | + | _OnBind(self, hook) + | | __getitem__(self, idx) | Returns a reference to the object associated with this node id | @@ -17558,7 +17611,8 @@ class Hexrays_Hooks(builtins.object) | | @param blk: (mblock_t *) | @param insn: (minsn_t *) Should return: 1 if combined the current instruction - | with a preceding one + | with a preceding one -1 if the instruction should not be combined 0 + | else | | create_hint(self, *args) -> 'PyObject *' | create_hint(self, vu) -> PyObject * @@ -17946,7 +18000,8 @@ class __cbhooks_t(Hexrays_Hooks) | | @param blk: (mblock_t *) | @param insn: (minsn_t *) Should return: 1 if combined the current instruction - | with a preceding one + | with a preceding one -1 if the instruction should not be combined 0 + | else | | flowchart(self, *args) -> 'int' | flowchart(self, fc) -> int @@ -23517,6 +23572,15 @@ class chain_visitor_t(builtins.object) | thisown | The membership flag +Help on function change_hexrays_config in module ida_hexrays: + +change_hexrays_config(*args) -> 'bool' + change_hexrays_config(directive) -> bool + Parse DIRECTIVE and update the current configuration variables. For the syntax + see hexrays.cfg + + @param directive: (C++: const char *) char const * + Help on function checkout_hexrays_license in module ida_hexrays: checkout_hexrays_license(*args) -> 'bool' @@ -26036,7 +26100,7 @@ decompile(ea, hf=None, flags=0) Help on function decompile_func in module ida_hexrays: decompile_func(*args) -> 'cfuncptr_t' - decompile_func(pfn, hf, decomp_flags=0) -> cfuncptr_t + decompile_func(pfn, hf=None, decomp_flags=0) -> cfuncptr_t Decompile a function. Multiple decompilations of the same function return the same object. @@ -26579,7 +26643,7 @@ class gco_info_t(builtins.object) Help on function gen_microcode in module ida_hexrays: gen_microcode(*args) -> 'mba_t *' - gen_microcode(mbr, hf, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t + gen_microcode(mbr, hf=None, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t Generate microcode of an arbitrary code snippet @param mbr: (C++: const mba_ranges_t &) snippet ranges @@ -30102,6 +30166,16 @@ class mba_t(builtins.object) | get_curfunc(self, *args) -> 'func_t *' | get_curfunc(self) -> func_t * | + | get_func_output_lists(self, *args) -> 'void' + | get_func_output_lists(self, return_regs, spoiled, type, call_ea=BADADDR, tail_call=False) + | Prepare the lists of registers & memory that are defined/killed by a function + | + | @param return_regs: (C++: mlist_t *) defined regs to return (eax,edx) + | @param spoiled: (C++: mlist_t *) spoiled regs (flags,ecx,mem) + | @param type: (C++: const tinfo_t &) the function type + | @param call_ea: (C++: ea_t) the call insn address (if known) + | @param tail_call: (C++: bool) is it the tail call? + | | get_graph(self, *args) -> 'mbl_graph_t *' | get_graph(self) -> mbl_graph_t | Get control graph. Call build_graph() if you need the graph before MMAT_LOCOPT. @@ -30289,6 +30363,13 @@ class mba_t(builtins.object) | serialize(self) | Serialize mbl array into a sequence of bytes. | + | set_lvar_name(self, *args) -> 'bool' + | set_lvar_name(self, v, name, flagbits) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | @param flagbits: int + | | set_maturity(self, *args) -> 'bool' | set_maturity(self, mat) -> bool | Set maturity level. @@ -30308,6 +30389,18 @@ class mba_t(builtins.object) | | @param f: int | + | set_nice_lvar_name(self, *args) -> 'bool' + | set_nice_lvar_name(self, v, name) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | + | set_user_lvar_name(self, *args) -> 'bool' + | set_user_lvar_name(self, v, name) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | | short_display(self, *args) -> 'bool' | short_display(self) -> bool | @@ -31746,6 +31839,9 @@ class mcallarg_t(mop_t) | | @param ea: ea_t | + | is_glbaddr_from_fixup(self, *args) -> 'bool' + | is_glbaddr_from_fixup(self) -> bool + | | is_impptr_done(self, *args) -> 'bool' | is_impptr_done(self) -> bool | @@ -33893,6 +33989,9 @@ class mop_addr_t(mop_t) | | @param ea: ea_t | + | is_glbaddr_from_fixup(self, *args) -> 'bool' + | is_glbaddr_from_fixup(self) -> bool + | | is_impptr_done(self, *args) -> 'bool' | is_impptr_done(self) -> bool | @@ -34762,6 +34861,9 @@ class mop_t(builtins.object) | | @param ea: ea_t | + | is_glbaddr_from_fixup(self, *args) -> 'bool' + | is_glbaddr_from_fixup(self) -> bool + | | is_impptr_done(self, *args) -> 'bool' | is_impptr_done(self) -> bool | @@ -35446,6 +35548,9 @@ class number_format_t(builtins.object) | flags | flags | + | flags32 + | flags32 + | | opnum | opnum | @@ -42858,6 +42963,10 @@ inf_hide_libfuncs(*args) -> 'bool' Help on function inf_huge_arg_align in module ida_ida: inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align(cc) -> bool + + @param cc: cm_t + inf_huge_arg_align() -> bool Help on function inf_inc_database_change_count in module ida_ida: @@ -44212,6 +44321,15 @@ is_filetype_like_binary(*args) -> 'bool' @param ft: (C++: filetype_t) enum filetype_t +Help on function move_privrange in module ida_ida: + +move_privrange(*args) -> 'bool' + move_privrange(new_privrange_start) -> bool + Move privrange to the specified address + + @param new_privrange_start: (C++: ea_t) new start address of the privrange + @return: success + Help on function in module ida_ida: lambda *args @@ -44234,6 +44352,15 @@ to_ea(*args) -> 'ea_t' @param reg_cs: (C++: sel_t) @param reg_ip: (C++: uval_t) +Help on function validate_idb in module ida_ida: + +validate_idb(*args) -> 'size_t' + validate_idb(vld_flags=0) -> size_t + Validate the database + + @param vld_flags: (C++: uint32) combination of VLD_.. constants + @return: number of corrupted/fixed records + Module "ida_idaapi"s docstring: """None""" @@ -44335,6 +44462,8 @@ class CustomIDAMemo(View_Hooks) | | @param values: A dictionary of 'int -> node_info_t' objects. | + | _OnBind(self, hook) + | | __init__(self) | __init__(self, _flags=0, _hkcb_flags=0x0001) -> View_Hooks | @@ -49618,6 +49747,30 @@ class IDP_Hooks(builtins.object) | @retval 1: ok | @retval <0: segment should not be created | + | ev_cvt64_hashval(self, *args) -> 'int' + | ev_cvt64_hashval(self, node, tag, name, data) -> int + | perform 32-64 conversion for a hash value + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param name: (const ::char *) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | + | ev_cvt64_supval(self, *args) -> 'int' + | ev_cvt64_supval(self, node, tag, idx, data) -> int + | perform 32-64 conversion for a netnode array element + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param idx: (::nodeidx_t) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | | ev_decorate_name(self, *args) -> 'PyObject *' | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * | Decorate/undecorate a C symbol name. @@ -50682,6 +50835,26 @@ class _processor_t(builtins.object) | cbsize(self, *args) -> 'int' | cbsize(self) -> int | + | cvt64_hashval(self, *args) -> 'ssize_t' + | cvt64_hashval(self, node, tag, name, data) -> ssize_t + | + | Parameters + | ---------- + | node: nodeidx_t + | tag: uchar + | name: char const * + | data: uchar const * + | + | cvt64_supval(self, *args) -> 'ssize_t' + | cvt64_supval(self, node, tag, idx, data) -> ssize_t + | + | Parameters + | ---------- + | node: nodeidx_t + | tag: uchar + | idx: nodeidx_t + | data: uchar const * + | | dbsize(self, *args) -> 'int' | dbsize(self) -> int | @@ -51815,6 +51988,10 @@ class _processor_t(builtins.object) | | ev_creating_segm = 26 | + | ev_cvt64_hashval = 98 + | + | ev_cvt64_supval = 97 + | | ev_decorate_name = 2020 | | ev_del_cref = 66 @@ -51921,7 +52098,7 @@ class _processor_t(builtins.object) | | ev_is_switch = 41 | - | ev_last_cb_before_debugger = 97 + | ev_last_cb_before_debugger = 99 | | ev_last_cb_before_loader = 2023 | @@ -54260,6 +54437,13 @@ Help on function get_ash in module ida_idp: get_ash(*args) -> 'asm_t *' get_ash() -> asm_t +Help on function get_config_value in module ida_idp: + +get_config_value(*args) -> 'jvalue_t *' + get_config_value(key) -> bool + + @param key: char const * + Help on function get_idb_notifier_addr in module ida_idp: get_idb_notifier_addr(*args) -> 'PyObject *' @@ -55528,6 +55712,30 @@ class processor_t(IDP_Hooks) | idbs. | @return: must be 0 | + | ev_cvt64_hashval(self, *args) -> 'int' + | ev_cvt64_hashval(self, node, tag, name, data) -> int + | perform 32-64 conversion for a hash value + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param name: (const ::char *) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | + | ev_cvt64_supval(self, *args) -> 'int' + | ev_cvt64_supval(self, node, tag, idx, data) -> int + | perform 32-64 conversion for a netnode array element + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param idx: (::nodeidx_t) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | | ev_decorate_name(self, *args) -> 'PyObject *' | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * | Decorate/undecorate a C symbol name. @@ -57321,6 +57529,8 @@ class CustomIDAMemo(View_Hooks) | | @param values: A dictionary of 'int -> node_info_t' objects. | + | _OnBind(self, hook) + | | __init__(self) | __init__(self, _flags=0, _hkcb_flags=0x0001) -> View_Hooks | @@ -57873,6 +58083,8 @@ class IDAViewWrapper(CustomIDAMemo) | | @param values: A dictionary of 'int -> node_info_t' objects. | + | _OnBind(self, hook) + | | _get_cb(self, view, cb_name) | | _get_cb_arity(self, cb) @@ -58039,27 +58251,27 @@ class PluginForm(builtins.object) | ---------------------------------------------------------------------- | Static methods defined here: | - | FormToPyQtWidget = TWidgetToPyQtWidget(tw, ctx=) + | FormToPyQtWidget = TWidgetToPyQtWidget(tw, ctx=) | Convert a TWidget* to a QWidget to be used by PyQt | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | FormToPySideWidget = TWidgetToPySideWidget(tw, ctx=) + | FormToPySideWidget = TWidgetToPySideWidget(tw, ctx=) | Use this method to convert a TWidget* to a QWidget to be used by PySide | | @param ctx: Context. Reference to a module that already imported QtWidgets module | - | QtWidgetToTWidget(w, ctx=) + | QtWidgetToTWidget(w, ctx=) | Convert a QWidget to a TWidget* to be used by IDA | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | TWidgetToPyQtWidget(tw, ctx=) + | TWidgetToPyQtWidget(tw, ctx=) | Convert a TWidget* to a QWidget to be used by PyQt | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | TWidgetToPySideWidget(tw, ctx=) + | TWidgetToPySideWidget(tw, ctx=) | Use this method to convert a TWidget* to a QWidget to be used by PySide | | @param ctx: Context. Reference to a module that already imported QtWidgets module @@ -59149,6 +59361,17 @@ ask_yn(*args) -> 'int' @param format: (C++: const char *) The question in printf() style format @return: the selected button (one of Button IDs). Esc key returns ASKBTN_CANCEL. +Help on function atoea in module ida_kernwin: + +atoea(*args) 'unsigned-ea-like-numeric-type *'↗ + atoea(str) -> bool + Convert a number in C notation to an address. decimal: 1234 + octal: 0123 + hexadecimal: 0xabcd + binary: 0b00101010 + + @param str: (C++: const char *) the string to parse + Help on function attach_action_to_menu in module ida_kernwin: attach_action_to_menu(*args) -> 'bool' @@ -59521,10 +59744,6 @@ class chooser_base_t(builtins.object) | is_multi(self) -> bool | is multi-selection allowed? | - | is_noidb(self, *args) -> 'bool' - | is_noidb(self) -> bool - | can use the chooser before opening the database? - | | is_quick_filter_visible_initially(self, *args) -> 'bool' | is_quick_filter_visible_initially(self) -> bool | @@ -60181,7 +60400,7 @@ display_widget(*args) -> 'void' Help on function ea2str in module ida_kernwin: -ea2str(*args) -> 'size_t' +ea2str(*args) -> 'qstring *' ea2str(ea) -> str Convert linear address to UTF-8 string. @@ -64084,13 +64303,32 @@ class simpleline_t(builtins.object) Help on function str2ea in module ida_kernwin: -str2ea(*args) -> 'ea_t' - str2ea(str, screenEA=BADADDR) -> ea_t - Converts a string express to EA. The expression evaluator may be called as well. +str2ea(*args) 'unsigned-ea-like-numeric-type *'↗ + str2ea(str, screen_ea=BADADDR) -> bool + Convert string to linear address. Tries to interpret the string as: + 1) "current IP" keyword if supported by assembler (e.g. "$" in x86) + 2) segment:offset expression, where "segment" may be a name or a fixed segment + register (e.g. cs, ds) + 3) just segment name/register (translated to segment's start address) + 4) a name in the database (or debug name during debugging) + 5) +delta or -delta, where numerical 'delta' is added to or subtracted from + 'screen_ea' + 6) if all else fails, try to evaluate 'str' as an IDC expression - @param str: char const * - @param screenEA: ea_t - @return: BADADDR or address value + @param str: (C++: const char *) string to parse + @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view + @return: success + +Help on function str2ea_ex in module ida_kernwin: + +str2ea_ex(*args) 'unsigned-ea-like-numeric-type *'↗ + str2ea_ex(str, screen_ea=BADADDR, flags=0) -> bool + Same as str2ea() but possibly with some steps skipped. + + @param str: (C++: const char *) string to parse + @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view + @param flags: (C++: int) see String to address conversion flags + @return: success Help on function str2user in module ida_pro: @@ -66743,7 +66981,8 @@ Help on function is_diff_merge_mode in module ida_merge: is_diff_merge_mode(*args) -> 'bool' is_diff_merge_mode() -> bool - Return TRUE if IDA is running in diff mode (MERGE_POLICY_DIFF) + Return TRUE if IDA is running in diff mode + (MERGE_POLICY_MDIFF/MERGE_POLICY_VDIFF) Help on class item_block_locator_t in module ida_merge: @@ -67237,6 +67476,20 @@ class moddata_diff_helper_t(builtins.object) | @param arg0: qstrvec_t * | @param arg1: idbattr_info_t const & | + | str2val(self, *args) -> 'bool' + | str2val(self, arg0, arg1, arg2) -> bool + | + | @param arg0: uint64 * + | @param arg1: idbattr_info_t const & + | @param arg2: char const * + | + | val2str(self, *args) -> 'bool' + | val2str(self, arg0, arg1, arg2) -> bool + | + | @param arg0: qstring * + | @param arg1: idbattr_info_t const & + | @param arg2: uint64 + | | ---------------------------------------------------------------------- | Data descriptors defined here: | @@ -67363,6 +67616,7 @@ class bookmarks_t(builtins.object) | Methods defined here: | | __getitem__(self, idx) + | Get the n-th bookmark for the widget. | | __init__(self, w) | Build an object suitable for iterating bookmarks @@ -67373,8 +67627,10 @@ class bookmarks_t(builtins.object) | so bookmarks can be re-used interchangeably between them | | __iter__(self) + | Iterate on bookmarks present for the widget. | | __len__(self) + | Get the number of bookmarks for the widget. | | __repr__ = _swig_repr(self) | @@ -69711,6 +69967,9 @@ class printop_t(builtins.object) | is_aflags_initialized(self, *args) -> 'bool' | is_aflags_initialized(self) -> bool | + | is_f64(self, *args) -> 'bool' + | is_f64(self) -> bool + | | is_ti_initialized(self, *args) -> 'bool' | is_ti_initialized(self) -> bool | @@ -70694,7 +70953,7 @@ append_struct_fields(*args) -> 'qstring *, adiff_t *' Append names of struct fields to a name if the name is a struct name. @param disp: (C++: adiff_t *) displacement from the name - @param n: (C++: int) number of operand n which the name appears + @param n: (C++: int) operand number in which the name appears @param path: (C++: const tid_t *) path in the struct. path is an array of id's. maximal length of array is MAXSTRUCPATH. the first element of the array is the structure id. consecutive elements are id's of used union members @@ -71700,6 +71959,17 @@ class netnode(builtins.object) | @param alt: uchar | @param tag: uchar | + | blobshift(self, *args) -> 'size_t' + | blobshift(self, _from, to, size, tag) -> size_t + | Shift the blob array elements. Moves the array elements at (from..from+size) to + | (to..to+size) + | + | @param from: (C++: nodeidx_t) + | @param to: (C++: nodeidx_t) + | @param size: (C++: nodeidx_t) + | @param tag: (C++: uchar) + | @return: number of shifted elements + | | blobsize(self, *args) -> 'size_t' | blobsize(self, _start, tag) -> size_t | Get size of blob. @@ -72423,7 +72693,9 @@ calc_offset_base(*args) -> 'ea_t' @param ea: (C++: ea_t) the referencing instruction/data address @param n: (C++: int) operand number * 0: first operand - * 1: other operand + * 1: second operand + * ... + * 7: eighth operand @return: output base address or BADADDR Help on function calc_probable_base_by_value in module ida_offset: @@ -72489,7 +72761,7 @@ get_default_reftype(*args) -> 'reftype_t' Get default reference type depending on the segment. @param ea: (C++: ea_t) - @return: one of REF_OFF8,REF_OFF16,REF_OFF32 + @return: one of REF_OFF8, REF_OFF16, REF_OFF32, REF_OFF64 Help on function get_offbase in module ida_offset: @@ -72498,7 +72770,7 @@ get_offbase(*args) -> 'ea_t' Get offset base value @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: offset base or BADADDR Help on function get_offset_expr in module ida_offset: @@ -72538,9 +72810,11 @@ get_offset_expression(*args) -> 'qstring *' offset array @param ea: (C++: ea_t) start of instruction or data with the offset expression - @param n: (C++: int) number of operand (may be ORed with OPND_OUTER) + @param n: (C++: int) operand number (may be ORed with OPND_OUTER) * 0: first operand * 1: second operand + * ... + * 7: eighth operand @param from: (C++: ea_t) linear address of instruction operand or data referring to the name. This address will be used to get fixup information, so it should point to exact position of operand in the instruction. @@ -72578,10 +72852,11 @@ op_offset_ex(*args) -> 'bool' * no segment: fail * 16bit segment: to 16bit word data * 32bit segment: to dword - @param n: (C++: int) number of operand (may be ORed with OPND_OUTER) + @param n: (C++: int) operand number (may be ORed with OPND_OUTER) * 0: first * 1: second - * 2: third + * ... + * 7: eighth operand * OPND_MASK: all operands @param ri: (C++: const refinfo_t *) reference information @return: success @@ -73650,6 +73925,12 @@ is_control_tty(*args) -> 'enum tty_control_t' @param fd: (C++: int) +Help on function is_cvt64 in module ida_pro: + +is_cvt64(*args) -> 'bool' + is_cvt64() -> bool + is IDA converting IDB into I64? + Help on function is_main_thread in module ida_pro: is_main_thread(*args) -> 'bool' @@ -76783,13 +77064,13 @@ class lock_segment(builtins.object) Help on function move_segm in module ida_segment: -move_segm(*args) -> 'int' - move_segm(s, to, flags=0) -> int - Move a segment to a new address. This function moves all information to the new - address. It fixes up address sensitive information in the kernel. The total - effect is equal to reloading the segment to the target address. For the file - format dependent address sensitive information, loader_t::move_segm is called. - Also IDB notification event idb_event::segm_moved is called. +move_segm(*args) -> 'move_segm_code_t' + move_segm(s, to, flags=0) -> move_segm_code_t + This function moves all information to the new address. It fixes up address + sensitive information in the kernel. The total effect is equal to reloading the + segment to the target address. For the file format dependent address sensitive + information, loader_t::move_segm is called. Also IDB notification event + idb_event::segm_moved is called. @param s: (C++: segment_t *) segment to move @param to: (C++: ea_t) new segment start address @@ -76823,6 +77104,14 @@ move_segm_start(*args) -> 'bool' @retval 1: ok @retval 0: failed, a warning message is displayed +Help on function move_segm_strerror in module ida_segment: + +move_segm_strerror(*args) -> 'char const *' + move_segm_strerror(code) -> char const * + Return string describing error MOVE_SEGM_... code. + + @param code: (C++: move_segm_code_t) enum move_segm_code_t + Help on function rebase_program in module ida_segment: rebase_program(*args) -> 'int' @@ -81313,6 +81602,12 @@ class callregs_t(builtins.object) | @param gprs: (C++: const int *) int const * | @param fprs: (C++: const int *) int const * | + | swap(self, *args) -> 'void' + | swap(self, r) + | swap two instances + | + | @param r: (C++: callregs_t &) + | | ---------------------------------------------------------------------- | Static methods defined here: | @@ -81875,6 +82170,9 @@ class enum_type_data_t(enum_member_vec_t) | is_64bit(self, *args) -> 'bool' | is_64bit(self) -> bool | + | is_bf(self, *args) -> 'bool' + | is_bf(self) -> bool + | | is_char(self, *args) -> 'bool' | is_char(self) -> bool | @@ -81887,6 +82185,12 @@ class enum_type_data_t(enum_member_vec_t) | is_udec(self, *args) -> 'bool' | is_udec(self) -> bool | + | set_bf(self, *args) -> 'bool' + | set_bf(self, bf) -> bool + | Convert enum to a bitmask (flag_enum) + | + | @param bf: (C++: bool) + | | swap(self, *args) -> 'void' | swap(self, r) | swap two instances @@ -82064,6 +82368,14 @@ class enum_type_data_t(enum_member_vec_t) | | __hash__ = None +Help on function enum_type_data_t__set_bf in module ida_typeinf: + +enum_type_data_t__set_bf(*args) -> 'bool' + enum_type_data_t__set_bf(_this, bf) -> bool + + @param _this: enum_type_data_t * + @param bf: bool + Help on function extract_argloc in module ida_typeinf: extract_argloc(*args) -> 'bool' @@ -82201,6 +82513,9 @@ class func_type_data_t(funcargvec_t) | is_static(self, *args) -> 'bool' | is_static(self) -> bool | + | is_swift_cc(self, *args) -> 'bool' + | is_swift_cc(self) -> bool + | | is_vararg_cc(self, *args) -> 'bool' | is_vararg_cc(self) -> bool | @@ -83137,6 +83452,14 @@ inf_big_arg_align(*args) -> 'bool' @param cc: cm_t +Help on function inf_huge_arg_align in module ida_typeinf: + +inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align() -> bool + inf_huge_arg_align(cc) -> bool + + @param cc: cm_t + Help on function inf_pack_stkargs in module ida_typeinf: inf_pack_stkargs(*args) -> 'bool' @@ -83273,6 +83596,14 @@ is_sdacl_byte(*args) -> 'bool' @param t: (C++: type_t) +Help on function is_swift_cc in module ida_typeinf: + +is_swift_cc(*args) -> 'bool' + is_swift_cc(cc) -> bool + Swift calling convention (arguments and return values in registers)? + + @param cc: (C++: cm_t) + Help on function is_tah_byte in module ida_typeinf: is_tah_byte(*args) -> 'bool' @@ -84625,6 +84956,18 @@ save_tinfo(*args) -> 'tinfo_code_t' @param name: char const * @param ntf_flags: int +Help on function save_tinfo2 in module ida_typeinf: + +save_tinfo2(*args) -> 'tinfo_code_t' + save_tinfo2(tif, til, ord, name, cmt, ntf_flags) -> tinfo_code_t + + @param tif: tinfo_t * + @param til: til_t * + @param ord: size_t + @param name: char const * + @param cmt: char const * + @param ntf_flags: int + Help on class scattered_aloc_t in module ida_typeinf: class scattered_aloc_t(argpartvec_t) @@ -86170,14 +86513,22 @@ class tinfo_t(builtins.object) | @param til: til_t * | @param name: char const * | @param ntf_flags: int + | + | set_named_type(self, til, name, cmt, ntf_flags=0) -> tinfo_code_t + | + | @param til: til_t * + | @param name: char const * + | @param cmt: char const * + | @param ntf_flags: int | | set_numbered_type(self, *args) -> 'tinfo_code_t' - | set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t + | set_numbered_type(self, til, ord, ntf_flags=0, name=None, cmt=None) -> tinfo_code_t | | @param til: til_t * | @param ord: uint32 | @param ntf_flags: int | @param name: char const * + | @param cmt: char const * | | set_symbol_type(self, *args) -> 'tinfo_code_t' | set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t @@ -86185,6 +86536,13 @@ class tinfo_t(builtins.object) | @param til: til_t * | @param name: char const * | @param ntf_flags: int + | + | set_symbol_type(self, til, name, cmt, ntf_flags=0) -> tinfo_code_t + | + | @param til: til_t * + | @param name: char const * + | @param cmt: char const * + | @param ntf_flags: int | | set_volatile(self, *args) -> 'void' | set_volatile(self) @@ -87941,7 +88299,7 @@ get_immvals(*args) -> 'PyObject *' case the transformed values (as needed for printing) will be stored instead. @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) number of operand (0..UA_MAXOP-1), -1 means all operands + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands @param F: (C++: flags64_t) flags for the specified address @return: number of immediate values (0..2*UA_MAXOP) @@ -87960,7 +88318,7 @@ get_printable_immvals(*args) -> 'PyObject *' Get immediate ready-to-print values at the specified address @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) number of operand (0..UA_MAXOP-1), -1 means all operands + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands @param F: (C++: flags64_t) flags for the specified address @return: number of immediate values (0..2*UA_MAXOP) @@ -88644,6 +89002,9 @@ class outctx_base_t(builtins.object) | gen_xref_lines(self, *args) -> 'bool' | gen_xref_lines(self) -> bool | + | getF(self, *args) -> 'flags64_t' + | getF(self) -> flags64_t + | | get_stkvar(self, *args) -> 'member_t *' | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * | @@ -88847,6 +89208,9 @@ class outctx_base_t(builtins.object) | ---------------------------------------------------------------------- | Data descriptors defined here: | + | F32 + | F32 + | | __dict__ | dictionary for instance variables (if defined) | @@ -88966,7 +89330,7 @@ class outctx_t(outctx_base_t) | It should be called from processor_t::ev_out_insn() and it will call | processor_t::ev_out_operand(). This function outputs a colored text. | - | @param n: (C++: int) number of operand + | @param n: (C++: int) 0..UA_MAXOP-1 operand number | @retval 1: operand is displayed | @retval 0: operand is hidden | @@ -88996,6 +89360,13 @@ class outctx_t(outctx_base_t) | @param prefix: (C++: const char *) char const * | @param flags: int | + | term_outctx(self, *args) -> 'int' + | term_outctx(self, prefix=None) -> int + | Finalize the output context. + | + | @param prefix: (C++: const char *) char const * + | @return: the number of generated lines. + | | ---------------------------------------------------------------------- | Data descriptors defined here: | @@ -89020,6 +89391,9 @@ class outctx_t(outctx_base_t) | insn | insn | + | next_line_ea + | next_line_ea + | | ph | ph | @@ -89132,6 +89506,9 @@ class outctx_t(outctx_base_t) | @param format: (C++: const char *) printf style colored line to generate | @return: overflow, lnar_maxsize has been reached | + | getF(self, *args) -> 'flags64_t' + | getF(self) -> flags64_t + | | get_stkvar(self, *args) -> 'member_t *' | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * | @@ -89301,16 +89678,12 @@ class outctx_t(outctx_base_t) | stack_view(self, *args) -> 'bool' | stack_view(self) -> bool | - | term_outctx(self, *args) -> 'int' - | term_outctx(self, prefix=None) -> int - | Finalize the output context. - | - | @param prefix: (C++: const char *) char const * - | @return: the number of generated lines. - | | ---------------------------------------------------------------------- | Data descriptors inherited from outctx_base_t: | + | F32 + | F32 + | | __dict__ | dictionary for instance variables (if defined) | @@ -89350,7 +89723,7 @@ print_operand(*args) -> 'qstring *' text representation of the specified operand (includes color codes.) @param ea: (C++: ea_t) the item address (instruction or data) - @param n: (C++: int) operand number (0,1,2...). meaningful only for instructions + @param n: (C++: int) 0..UA_MAXOP-1 operand number, meaningful only for instructions @param getn_flags: (C++: int) Name expression flags Currently only GETN_NODUMMY is accepted. @param newtype: (C++: struct printop_t *) if specified, print the operand using the specified type @@ -92090,7 +92463,7 @@ get_forced_operand(*args) -> 'qstring *' Get forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: size of forced operand or -1 Help on function get_frame_args_size in module idc: @@ -93756,7 +94129,7 @@ op_enum(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param id: (C++: enum_t) id of enum @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several @@ -93788,7 +94161,7 @@ set_forced_operand(*args) -> 'bool' Set forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @param op: (C++: const char *) text of operand * nullptr: do nothing (return 0) * "" : delete forced operand @@ -93888,7 +94261,7 @@ op_seg(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stkvar in module ida_bytes: @@ -93900,7 +94273,7 @@ op_stkvar(*args) -> 'bool' using insn_t::create_stkvar(). @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stroff in module idc: @@ -95069,7 +95442,7 @@ split_sreg_range(ea, reg, value, tag=2) @note: IDA keeps tracks of all the points where segment register change their values. This function allows you to specify the correct value of a segment - register if IDA is not able to find the corrent value. + register if IDA is not able to find the correct value. Help on function start_process in module ida_dbg: @@ -95498,123 +95871,63 @@ Documentation on variable FF_UNUSED in module ida_bytes: unused bit (was used for variable bytes) -Documentation on variable MS_0TYPE in module ida_bytes: +Documentation on variable MS_N_TYPE in module ida_bytes: - Mask for 1st arg typing. + Mask for nth arg. -Documentation on variable FF_0VOID in module ida_bytes: +Documentation on variable FF_N_VOID in module ida_bytes: Void (unknown)? -Documentation on variable FF_0NUMH in module ida_bytes: +Documentation on variable FF_N_NUMH in module ida_bytes: Hexadecimal number? -Documentation on variable FF_0NUMD in module ida_bytes: +Documentation on variable FF_N_NUMD in module ida_bytes: Decimal number? -Documentation on variable FF_0CHAR in module ida_bytes: +Documentation on variable FF_N_CHAR in module ida_bytes: Char ('x')? -Documentation on variable FF_0SEG in module ida_bytes: +Documentation on variable FF_N_SEG in module ida_bytes: Segment? -Documentation on variable FF_0OFF in module ida_bytes: +Documentation on variable FF_N_OFF in module ida_bytes: Offset? -Documentation on variable FF_0NUMB in module ida_bytes: +Documentation on variable FF_N_NUMB in module ida_bytes: Binary number? -Documentation on variable FF_0NUMO in module ida_bytes: +Documentation on variable FF_N_NUMO in module ida_bytes: Octal number? -Documentation on variable FF_0ENUM in module ida_bytes: +Documentation on variable FF_N_ENUM in module ida_bytes: Enumeration? -Documentation on variable FF_0FOP in module ida_bytes: +Documentation on variable FF_N_FOP in module ida_bytes: Forced operand? -Documentation on variable FF_0STRO in module ida_bytes: +Documentation on variable FF_N_STRO in module ida_bytes: Struct offset? -Documentation on variable FF_0STK in module ida_bytes: +Documentation on variable FF_N_STK in module ida_bytes: Stack variable? -Documentation on variable FF_0FLT in module ida_bytes: +Documentation on variable FF_N_FLT in module ida_bytes: Floating point number? -Documentation on variable FF_0CUST in module ida_bytes: - - Custom representation? - -Documentation on variable MS_1TYPE in module ida_bytes: - - Mask for the type of other operands. - -Documentation on variable FF_1VOID in module ida_bytes: - - Void (unknown)? - -Documentation on variable FF_1NUMH in module ida_bytes: - - Hexadecimal number? - -Documentation on variable FF_1NUMD in module ida_bytes: - - Decimal number? - -Documentation on variable FF_1CHAR in module ida_bytes: - - Char ('x')? - -Documentation on variable FF_1SEG in module ida_bytes: - - Segment? - -Documentation on variable FF_1OFF in module ida_bytes: - - Offset? - -Documentation on variable FF_1NUMB in module ida_bytes: - - Binary number? - -Documentation on variable FF_1NUMO in module ida_bytes: - - Octal number? - -Documentation on variable FF_1ENUM in module ida_bytes: - - Enumeration? - -Documentation on variable FF_1FOP in module ida_bytes: - - Forced operand? - -Documentation on variable FF_1STRO in module ida_bytes: - - Struct offset? - -Documentation on variable FF_1STK in module ida_bytes: - - Stack variable? - -Documentation on variable FF_1FLT in module ida_bytes: - - Floating point number? - -Documentation on variable FF_1CUST in module ida_bytes: +Documentation on variable FF_N_CUST in module ida_bytes: Custom representation? @@ -97801,9 +98114,9 @@ Documentation on variable operand_locator_t.opnum in module ida_hexrays: operand number in the instruction -Documentation on variable number_format_t.flags in module ida_hexrays: +Documentation on variable number_format_t.flags32 in module ida_hexrays: - ida flags, which describe number radix, enum, etc + low 32bit of flags (for compatibility) Documentation on variable number_format_t.opnum in module ida_hexrays: @@ -97822,6 +98135,10 @@ Documentation on variable number_format_t.type_name in module ida_hexrays: for stroffs: structure for offsetof() for enums: enum name +Documentation on variable number_format_t.flags in module ida_hexrays: + + ida flags, which describe number radix, enum, etc + Documentation on variable NF_FIXED in module ida_hexrays: number format has been defined by the user @@ -98963,7 +99280,7 @@ Documentation on variable WARN_ILL_PURGED in module ida_hexrays: Documentation on variable WARN_ILL_FUNCTYPE in module ida_hexrays: - 2 invalid function type has been ignored + 2 invalid function type 's' has been ignored Documentation on variable WARN_VARARG_TCAL in module ida_hexrays: @@ -100630,7 +100947,7 @@ Documentation on variable DECOMP_NO_WAIT in module ida_hexrays: Documentation on variable DECOMP_NO_CACHE in module ida_hexrays: - do not use decompilation cache + do not use decompilation cache (snippets are never cached) Documentation on variable DECOMP_NO_FRAME in module ida_hexrays: @@ -100650,7 +100967,21 @@ Documentation on variable DECOMP_NO_HIDE in module ida_hexrays: Documentation on variable DECOMP_NO_XREFS in module ida_hexrays: - do not update global xrefs cache + Obsolete. Use DECOMP_GXREFS_NOUPD. + +Documentation on variable DECOMP_GXREFS_DEFLT in module ida_hexrays: + + the default behavior: do not update the global xrefs cache upon decompile() + call, but when the pseudocode text is generated (e.g., through + cfunc_t.get_pseudocode()) + +Documentation on variable DECOMP_GXREFS_NOUPD in module ida_hexrays: + + do not update the global xrefs cache + +Documentation on variable DECOMP_GXREFS_FORCE in module ida_hexrays: + + update the global xrefs cache immediately Documentation on variable DECOMP_VOID_MBA in module ida_hexrays: @@ -101885,6 +102216,18 @@ Documentation on variable UA_MAXOP in module ida_ida: max number of operands allowed for an instruction +Documentation on variable VLD_AUTO_REPAIR in module ida_ida: + + automatically repair the database + +Documentation on variable VLD_DIALOG in module ida_ida: + + ask user to repair (this bit is mutually exclusive with VLD_AUTO_REPAIR) + +Documentation on variable VLD_SILENT in module ida_ida: + + no messages to the output window + Documentation on variable idbattr_info_t.name in module ida_ida: human-readable name @@ -101892,7 +102235,7 @@ Documentation on variable idbattr_info_t.name in module ida_ida: Documentation on variable idbattr_info_t.offset in module ida_ida: field position: offset within a structure (IDI_STRUCFLD) altval or supval index - (IDI_NODEVAL) hashval name (IDI_NODEVAL+IDI_HASH) + (IDI_NODEVAL) hashval name (IDI_ALTVAL/IDI_SUPVAL+IDI_HASH) Documentation on variable idbattr_info_t.width in module ida_ida: @@ -102612,14 +102955,15 @@ Documentation on variable debugger_t.ev_set_exception_info in module ida_idd: Documentation on variable debugger_t.ev_suspended in module ida_idd: This event will be generated by the kernel each time it has suspended the - debugger process and refreshed the database. The debugger module may add - information to the database if it wants. + debuggee process and refreshed the database. The debugger module may add + information to the database if necessary. - The reason for introducing this event is that when an event line LOAD_DLL + The reason for introducing this event is that when an event like LOAD_DLL happens, the database does not reflect the memory state yet and therefore we can't add information about the dll into the database in the get_debug_event() - event. Only when the kernel has adjusted the database we can do it. Example: for - imported PE DLLs we will add the exported event names to the database. + function. Only when the kernel has adjusted the database we can do it. Example: + for loaded PE DLLs we can add the exported function names to the list of debug + names (see set_debug_names()). This event is generated in the main thread. @@ -103305,15 +103649,15 @@ Documentation on variable CF_CHG3 in module ida_idp: Documentation on variable CF_CHG4 in module ida_idp: - The instruction modifies 4 operand. + The instruction modifies the fourth operand. Documentation on variable CF_CHG5 in module ida_idp: - The instruction modifies 5 operand. + The instruction modifies the fifth operand. Documentation on variable CF_CHG6 in module ida_idp: - The instruction modifies 6 operand. + The instruction modifies the sixth operand. Documentation on variable CF_USE1 in module ida_idp: @@ -103329,15 +103673,15 @@ Documentation on variable CF_USE3 in module ida_idp: Documentation on variable CF_USE4 in module ida_idp: - The instruction uses value of the 4 operand. + The instruction uses value of the fourth operand. Documentation on variable CF_USE5 in module ida_idp: - The instruction uses value of the 5 operand. + The instruction uses value of the fifth operand. Documentation on variable CF_USE6 in module ida_idp: - The instruction uses value of the 6 operand. + The instruction uses value of the sixth operand. Documentation on variable CF_JUMP in module ida_idp: @@ -103354,19 +103698,19 @@ Documentation on variable CF_HLL in module ida_idp: Documentation on variable CF_CHG7 in module ida_idp: - The instruction modifies the 7th operand. + The instruction modifies the seventh operand. Documentation on variable CF_CHG8 in module ida_idp: - The instruction modifies the 8th operand. + The instruction modifies the eighth operand. Documentation on variable CF_USE7 in module ida_idp: - The instruction uses value of the 7th operand. + The instruction uses value of the seventh operand. Documentation on variable CF_USE8 in module ida_idp: - The instruction uses value of the 8th operand. + The instruction uses value of the eighth operand. Documentation on variable asm_t.flag in module ida_idp: @@ -105422,6 +105766,122 @@ Documentation on variable IWID_STACK in module ida_kernwin: Alias. Some IWID_* were confusing, and thus have been renamed. This is to ensure bw-compat. +Documentation on variable IDA_DEBUG_DREFS in module ida_kernwin: + + drefs + +Documentation on variable IDA_DEBUG_OFFSET in module ida_kernwin: + + offsets + +Documentation on variable IDA_DEBUG_FLIRT in module ida_kernwin: + + flirt + +Documentation on variable IDA_DEBUG_IDP in module ida_kernwin: + + idp module + +Documentation on variable IDA_DEBUG_LDR in module ida_kernwin: + + ldr module + +Documentation on variable IDA_DEBUG_PLUGIN in module ida_kernwin: + + plugin module + +Documentation on variable IDA_DEBUG_IDS in module ida_kernwin: + + ids files + +Documentation on variable IDA_DEBUG_CONFIG in module ida_kernwin: + + config file + +Documentation on variable IDA_DEBUG_CHECKMEM in module ida_kernwin: + + check heap consistency + +Documentation on variable IDA_DEBUG_LICENSE in module ida_kernwin: + + licensing + +Documentation on variable IDA_DEBUG_DEMANGLE in module ida_kernwin: + + demangler + +Documentation on variable IDA_DEBUG_QUEUE in module ida_kernwin: + + queue + +Documentation on variable IDA_DEBUG_ROLLBACK in module ida_kernwin: + + rollback + +Documentation on variable IDA_DEBUG_ALREADY in module ida_kernwin: + + already data or code + +Documentation on variable IDA_DEBUG_TIL in module ida_kernwin: + + type system + +Documentation on variable IDA_DEBUG_NOTIFY in module ida_kernwin: + + show all notifications + +Documentation on variable IDA_DEBUG_DEBUGGER in module ida_kernwin: + + debugger + +Documentation on variable IDA_DEBUG_APPCALL in module ida_kernwin: + + appcall + +Documentation on variable IDA_DEBUG_SRCDBG in module ida_kernwin: + + source debugging + +Documentation on variable IDA_DEBUG_ACCESSIBILITY in module ida_kernwin: + + accessibility + +Documentation on variable IDA_DEBUG_NETWORK in module ida_kernwin: + + network + +Documentation on variable IDA_DEBUG_INTERNET in module ida_kernwin: + + internet connection (for API backward compatibility) + +Documentation on variable IDA_DEBUG_SIMPLEX in module ida_kernwin: + + full stack analysis + +Documentation on variable IDA_DEBUG_DBGINFO in module ida_kernwin: + + handling of debug info (e.g. pdb, dwarf) + +Documentation on variable IDA_DEBUG_LUMINA in module ida_kernwin: + + lumina related + +Documentation on variable IDA_DEBUG_THEMES in module ida_kernwin: + + themes + +Documentation on variable IDA_DEBUG_REGEX in module ida_kernwin: + + regular expression + +Documentation on variable IDA_DEBUG_SUBPROC in module ida_kernwin: + + sub process + +Documentation on variable IDA_DEBUG_ALWAYS in module ida_kernwin: + + everything + Documentation on variable AST_ENABLE_ALWAYS in module ida_kernwin: enable action and do not call action_handler_t::update() anymore @@ -105486,10 +105946,6 @@ Documentation on variable CH_ATTRS in module ida_kernwin: generate ui_get_chooser_item_attrs (gui only) -Documentation on variable CH_NOIDB in module ida_kernwin: - - use the chooser before opening the database - Documentation on variable CH_FORCE_DEFAULT in module ida_kernwin: if a non-modal chooser was already open, change selection to the default one @@ -105597,7 +106053,9 @@ Documentation on variable CHCOL_PLAIN in module ida_kernwin: Documentation on variable CHCOL_PATH in module ida_kernwin: - file path + file path. TUI IDA will truncate excessive cell lengths starting at their + beginning, and prepending the resulting text with "..." order to leave the + filename visible Documentation on variable CHCOL_HEX in module ida_kernwin: @@ -106319,6 +106777,10 @@ Documentation on variable CLNL_FINDCMT in module ida_kernwin: Search for the comment symbol everywhere in the line, not only at the beginning. +Documentation on variable S2EAOPT_NOCALC in module ida_kernwin: + + don't try to interpret string as IDC (or current extlang) expression + Documentation on variable Choose.CH_MODAL in module ida_kernwin: Modal chooser @@ -107482,6 +107944,10 @@ Documentation on variable MERGE_KIND_IGNOREMICRO in module ida_merge: IM ("$ ignore micro") flags. +Documentation on variable MERGE_KIND_FILEREGIONS in module ida_merge: + + merge fileregions + Documentation on variable MERGE_KIND_HIDDENRANGES in module ida_merge: merge hidden ranges @@ -107554,6 +108020,10 @@ Documentation on variable MERGE_KIND_UI in module ida_merge: UI. +Documentation on variable MERGE_KIND_DEKSTOPS in module ida_merge: + + dekstops + Documentation on variable MERGE_KIND_NOTEPAD in module ida_merge: notepad @@ -107570,6 +108040,10 @@ Documentation on variable MERGE_KIND_DBG_MEMREGS in module ida_merge: manual memory regions (debugger) +Documentation on variable MERGE_KIND_LUMINA in module ida_merge: + + lumina function metadata + Documentation on variable MERGE_KIND_LAST in module ida_merge: last predefined merge handler type. please note that there can be more merge @@ -107902,6 +108376,10 @@ Documentation on variable NSUP_OREF7 in module ida_nalt: outer complex reference information for operand 8 +Documentation on variable NSUP_EX_FLAGS in module ida_nalt: + + Extended flags. + Documentation on variable NSUP_POINTS in module ida_nalt: SP change points blob (see funcs.cpp). values NSUP_POINTS..NSUP_POINTS+0x1000 @@ -107979,6 +108457,14 @@ Documentation on variable PATCH_TAG in module ida_nalt: Patch netnode tag. +Documentation on variable IDB_DESKTOPS_NODE_NAME in module ida_nalt: + + hash indexed by desktop name with dekstop netnode + +Documentation on variable IDB_DESKTOPS_TAG in module ida_nalt: + + tag to store desktop blob & timestamp + Documentation on variable AFL_LINNUM in module ida_nalt: has line number info @@ -108862,7 +109348,7 @@ Documentation on variable ltag in module ida_netnode: Documentation on variable IDA_SDK_VERSION in module ida_pro: - IDA SDK v8.2. + IDA SDK v8.3. Documentation on variable MAXSTR in module ida_pro: @@ -109418,33 +109904,6 @@ Documentation on variable SEGMOD_SPARSE in module ida_segment: use sparse storage if extending the segment (for set_segm_start(), set_segm_end()) -Documentation on variable MSF_SILENT in module ida_segment: - - don't display a "please wait" box on the screen - -Documentation on variable MSF_NOFIX in module ida_segment: - - don't call the loader to fix relocations - -Documentation on variable MSF_LDKEEP in module ida_segment: - - keep the loader in the memory (optimization) - -Documentation on variable MSF_FIXONCE in module ida_segment: - - call loader only once with the special calling method. valid for - rebase_program(). see loader_t::move_segm. - -Documentation on variable MSF_PRIORITY in module ida_segment: - - loader segments will overwrite any existing debugger segments when moved. valid - for move_segm() - -Documentation on variable MSF_NETNODES in module ida_segment: - - move netnodes instead of changing inf.netdelta (this is slower); valid for - rebase_program() - Documentation on variable MOVE_SEGM_OK in module ida_segment: all ok @@ -109493,6 +109952,33 @@ Documentation on variable MOVE_SEGM_INVAL in module ida_segment: Invalid argument (delta/target does not fit the address space) +Documentation on variable MSF_SILENT in module ida_segment: + + don't display a "please wait" box on the screen + +Documentation on variable MSF_NOFIX in module ida_segment: + + don't call the loader to fix relocations + +Documentation on variable MSF_LDKEEP in module ida_segment: + + keep the loader in the memory (optimization) + +Documentation on variable MSF_FIXONCE in module ida_segment: + + call loader only once with the special calling method. valid for + rebase_program(). see loader_t::move_segm. + +Documentation on variable MSF_PRIORITY in module ida_segment: + + loader segments will overwrite any existing debugger segments when moved. valid + for move_segm() + +Documentation on variable MSF_NETNODES in module ida_segment: + + move netnodes instead of changing inf.netdelta (this is slower); valid for + rebase_program() + Documentation on variable CSS_OK in module ida_segment: ok @@ -110476,9 +110962,9 @@ Documentation on variable CM_CC_THISCALL in module ida_typeinf: stack, purged (x86), first arg is in reg (compiler-dependent) -Documentation on variable CM_CC_MANUAL in module ida_typeinf: +Documentation on variable CM_CC_SWIFT in module ida_typeinf: - special case for compiler specific (not used) + (Swift) arguments and return values in registers (compiler-dependent) Documentation on variable CM_CC_SPOILED in module ida_typeinf: @@ -110486,6 +110972,10 @@ Documentation on variable CM_CC_SPOILED in module ida_typeinf: {spoilreg_t} present real cm_t byte. if n == BFA_FUNC_MARKER, the next byte is the function attribute byte. +Documentation on variable CM_CC_GOLANG in module ida_typeinf: + + (Go) arguments and return value in stack + Documentation on variable CM_CC_SPECIALE in module ida_typeinf: CM_CC_SPECIAL with ellipsis @@ -110804,6 +111294,10 @@ Documentation on variable PRTYPE_COLORED in module ida_typeinf: add color tag COLOR_SYMBOL for any parentheses, commas and colons +Documentation on variable PRTYPE_1LINCMT in module ida_typeinf: + + print comments in one line mode + Documentation on variable NTF_TYPE in module ida_typeinf: type name @@ -111506,7 +112000,7 @@ Documentation on variable stkarg_area_info_t.linkage_area in module ida_typeinf: Documentation on variable enum_type_data_t.group_sizes in module ida_typeinf: - if present, specifies bitfield group sizes each group starts with a mask member + if present, specifies bitmask group sizes each group starts with a mask member Documentation on variable enum_type_data_t.taenum_bits in module ida_typeinf: diff --git a/release_pydoc_injections_pro3.txt b/release_pydoc_injections_pro3.txt index 7276af4..e7ce452 100644 --- a/release_pydoc_injections_pro3.txt +++ b/release_pydoc_injections_pro3.txt @@ -767,7 +767,7 @@ Help on function char_flag in module ida_bytes: char_flag(*args) -> 'flags64_t' char_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function chunk_size in module ida_bytes: @@ -807,7 +807,7 @@ clr_op_type(*args) -> 'bool' 'undefined') @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function code_flag in module ida_bytes: @@ -816,6 +816,13 @@ code_flag(*args) -> 'flags64_t' code_flag() -> flags64_t FF_CODE +Help on function combine_flags in module ida_bytes: + +combine_flags(*args) -> 'flags64_t' + combine_flags(F) -> flags64_t + + @param F: flags64_t + Help on class compiled_binpat_t in module ida_bytes: class compiled_binpat_t(builtins.object) @@ -1258,7 +1265,7 @@ Help on function custfmt_flag in module ida_bytes: custfmt_flag(*args) -> 'flags64_t' custfmt_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on class data_format_t in module ida_bytes: @@ -1498,7 +1505,7 @@ Help on function enum_flag in module ida_bytes: enum_flag(*args) -> 'flags64_t' enum_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function equal_bytes in module ida_bytes: @@ -1808,7 +1815,7 @@ Help on function flt_flag in module ida_bytes: flt_flag(*args) -> 'flags64_t' flt_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function free_chunk in module ida_bytes: @@ -2008,7 +2015,7 @@ get_enum_id(*args) -> 'uchar *' Get enum id of 'enum' operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands @return: id of enum or BADNODE Help on function get_first_hidden_range in module ida_bytes: @@ -2053,7 +2060,7 @@ get_forced_operand(*args) -> 'qstring *' Get forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: size of forced operand or -1 Help on function get_full_data_elsize in module ida_bytes: @@ -2117,7 +2124,8 @@ get_item_flag(*args) -> 'flags64_t' elements. @param from: (C++: ea_t) linear address of the instruction which refers to 'ea' - @param n: (C++: int) number of operand which refers to 'ea' + @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the + operands @param ea: (C++: ea_t) the referenced address @param appzero: (C++: bool) append a struct field name if the field offset is zero? meaningful only if the name refers to a structure. @@ -2132,12 +2140,26 @@ get_item_head(*args) -> 'ea_t' @param ea: (C++: ea_t) +Help on function get_item_refinfo in module ida_bytes: + +get_item_refinfo(*args) -> 'bool' + get_item_refinfo(ri, ea, n) -> bool + Get refinfo of the item at 'ea'. This function works for a regular offset + operand as well as for a tail byte of a structure variable (in this case refinfo + to corresponding structure member will be returned) + + @param ri: (C++: refinfo_t *) refinfo holder + @param ea: (C++: ea_t) the item address + @param n: (C++: int) operand number which refers to 'ea' or OPND_ALL for one of the + operands + @return: success + Help on function get_item_size in module ida_bytes: get_item_size(*args) -> 'asize_t' get_item_size(ea) -> asize_t Get size of item (instruction/data) in bytes. Unexplored bytes have length of 1 - byte. This function never returns 0. + byte. This function returns 0 only for BADADDR. @param ea: (C++: ea_t) @@ -2214,6 +2236,27 @@ get_octet2(*args) -> 'uchar *' @param ogen: octet_generator_t * +Help on function get_operand_flag in module ida_bytes: + +get_operand_flag(*args) -> 'flags64_t' + get_operand_flag(typebits, n) -> flags64_t + Place operand `n`'s type flag in the right nibble of a 64-bit flags set. + + @param typebits: (C++: uint8) the type bits (one of `FF_N_`) + @param n: (C++: int) the operand number + @return: the shift to the nibble + +Help on function get_operand_type_shift in module ida_bytes: + +get_operand_type_shift(*args) -> 'int' + get_operand_type_shift(n) -> int + Get the shift in `flags64_t` for the nibble representing operand `n`'s type + + Note: n must be < UA_MAXOP, and is not checked + + @param n: (C++: uint32) the operand number + @return: the shift to the nibble + Help on function get_opinfo in module ida_bytes: get_opinfo(*args) -> 'opinfo_t *' @@ -2347,7 +2390,7 @@ get_stroff_path(*args) -> 'int' @param path: (C++: tid_t *) buffer for structure path (strpath). see nalt.hpp for more info. @param delta: (C++: adiff_t *) struct offset delta @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL one of the operands @return: length of strpath Help on function get_wide_byte in module ida_bytes: @@ -2812,6 +2855,17 @@ is_enum1(*args) -> 'bool' @param F: (C++: flags64_t) +Help on function is_flag_for_operand in module ida_bytes: + +is_flag_for_operand(*args) -> 'bool' + is_flag_for_operand(F, typebits, n) -> bool + Check that the 64-bit flags set has the expected type for operand `n`. + + @param F: (C++: flags64_t) the flags + @param typebits: (C++: uint8) the type bits (one of `FF_N_`) + @param n: (C++: int) the operand number + @return: success + Help on function is_float in module ida_bytes: is_float(*args) -> 'bool' @@ -2860,7 +2914,7 @@ is_forced_operand(*args) -> 'bool' Is operand manually defined?. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number Help on function is_func in module ida_bytes: @@ -3351,7 +3405,7 @@ Help on function off_flag in module ida_bytes: off_flag(*args) -> 'flags64_t' off_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function op_adds_xrefs in module ida_bytes: @@ -3408,7 +3462,7 @@ op_enum(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param id: (C++: enum_t) id of enum @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several @@ -3459,7 +3513,7 @@ op_seg(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stkvar in module ida_bytes: @@ -3471,7 +3525,7 @@ op_stkvar(*args) -> 'bool' using insn_t::create_stkvar(). @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stroff in module ida_bytes: @@ -3482,7 +3536,7 @@ op_stroff(*args) -> 'bool' bytes, converts them to 16/32bit word data @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param path: (C++: const tid_t *) structure path (strpath). see nalt.hpp for more info. @param path_len: (C++: int) length of the structure path @param delta: (C++: adiff_t) struct offset delta. usually 0. denotes the difference between the @@ -3822,7 +3876,7 @@ Help on function seg_flag in module ida_bytes: seg_flag(*args) -> 'flags64_t' seg_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function set_cmt in module ida_bytes: @@ -3844,7 +3898,7 @@ set_forced_operand(*args) -> 'bool' Set forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @param op: (C++: const char *) text of operand * nullptr: do nothing (return 0) * "" : delete forced operand @@ -3889,7 +3943,7 @@ set_op_type(*args) -> 'bool' @param ea: (C++: ea_t) linear address @param type: (C++: flags64_t) new flag value (should be obtained from char_flag(), num_flag() and similar functions) - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @retval 1: ok @retval 0: failed (applied to a tail byte) @@ -3908,14 +3962,15 @@ set_opinfo(*args) -> 'bool' events @return: success @note: for custom formats (if is_custfmt(flag, n) is true) or for offsets (if - is_off(flag, n) is true) N can be in range -1..UA_MAXOP-1. In the case of - -1 the additional information about all operands will be set. + is_off(flag, n) is true) N can be in range 0..UA_MAXOP-1 or equal to + OPND_ALL. In the case of OPND_ALL the additional information about all + operands will be set. Help on function stkvar_flag in module ida_bytes: stkvar_flag(*args) -> 'flags64_t' stkvar_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function strlit_flag in module ida_bytes: @@ -3927,7 +3982,7 @@ Help on function stroff_flag in module ida_bytes: stroff_flag(*args) -> 'flags64_t' stroff_flag() -> flags64_t - see Bits: instruction operand types + see FF_opbits Help on function stru_flag in module ida_bytes: @@ -10923,7 +10978,7 @@ calc_stkvar_struc_offset(*args) -> 'ea_t' @param pfn: (C++: func_t *) pointer to function (can't be nullptr!) @param insn: (C++: const insn_t &) the instruction - @param n: (C++: int) number of operand: (0..UA_MAXOP-1) -1 if error, return BADADDR + @param n: (C++: int) 0..UA_MAXOP-1 operand number -1 if error, return BADADDR @return: BADADDR if some error (issue a warning if stack frame is bad) Help on function define_stkvar in module ida_frame: @@ -11061,14 +11116,10 @@ get_effective_spd(*args) -> 'sval_t' Help on function get_frame in module ida_frame: get_frame(*args) -> 'struc_t *' - get_frame(pfn) -> struc_t + get_frame(pfn) -> struc_t * Get pointer to function frame. @param pfn: func_t const * - - get_frame(ea) -> struc_t * - - @param ea: ea_t Help on function get_frame_part in module ida_frame: @@ -14190,6 +14241,8 @@ class GraphViewer(ida_kernwin.CustomIDAMemo) | | @return: Boolean | + | _OnBind(self, hook) + | | __getitem__(self, idx) | Returns a reference to the object associated with this node id | @@ -17558,7 +17611,8 @@ class Hexrays_Hooks(builtins.object) | | @param blk: (mblock_t *) | @param insn: (minsn_t *) Should return: 1 if combined the current instruction - | with a preceding one + | with a preceding one -1 if the instruction should not be combined 0 + | else | | create_hint(self, *args) -> 'PyObject *' | create_hint(self, vu) -> PyObject * @@ -17946,7 +18000,8 @@ class __cbhooks_t(Hexrays_Hooks) | | @param blk: (mblock_t *) | @param insn: (minsn_t *) Should return: 1 if combined the current instruction - | with a preceding one + | with a preceding one -1 if the instruction should not be combined 0 + | else | | flowchart(self, *args) -> 'int' | flowchart(self, fc) -> int @@ -23517,6 +23572,15 @@ class chain_visitor_t(builtins.object) | thisown | The membership flag +Help on function change_hexrays_config in module ida_hexrays: + +change_hexrays_config(*args) -> 'bool' + change_hexrays_config(directive) -> bool + Parse DIRECTIVE and update the current configuration variables. For the syntax + see hexrays.cfg + + @param directive: (C++: const char *) char const * + Help on function checkout_hexrays_license in module ida_hexrays: checkout_hexrays_license(*args) -> 'bool' @@ -26036,7 +26100,7 @@ decompile(ea, hf=None, flags=0) Help on function decompile_func in module ida_hexrays: decompile_func(*args) -> 'cfuncptr_t' - decompile_func(pfn, hf, decomp_flags=0) -> cfuncptr_t + decompile_func(pfn, hf=None, decomp_flags=0) -> cfuncptr_t Decompile a function. Multiple decompilations of the same function return the same object. @@ -26579,7 +26643,7 @@ class gco_info_t(builtins.object) Help on function gen_microcode in module ida_hexrays: gen_microcode(*args) -> 'mba_t *' - gen_microcode(mbr, hf, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t + gen_microcode(mbr, hf=None, retlist=None, decomp_flags=0, reqmat=MMAT_GLBOPT3) -> mba_t Generate microcode of an arbitrary code snippet @param mbr: (C++: const mba_ranges_t &) snippet ranges @@ -30102,6 +30166,16 @@ class mba_t(builtins.object) | get_curfunc(self, *args) -> 'func_t *' | get_curfunc(self) -> func_t * | + | get_func_output_lists(self, *args) -> 'void' + | get_func_output_lists(self, return_regs, spoiled, type, call_ea=BADADDR, tail_call=False) + | Prepare the lists of registers & memory that are defined/killed by a function + | + | @param return_regs: (C++: mlist_t *) defined regs to return (eax,edx) + | @param spoiled: (C++: mlist_t *) spoiled regs (flags,ecx,mem) + | @param type: (C++: const tinfo_t &) the function type + | @param call_ea: (C++: ea_t) the call insn address (if known) + | @param tail_call: (C++: bool) is it the tail call? + | | get_graph(self, *args) -> 'mbl_graph_t *' | get_graph(self) -> mbl_graph_t | Get control graph. Call build_graph() if you need the graph before MMAT_LOCOPT. @@ -30289,6 +30363,13 @@ class mba_t(builtins.object) | serialize(self) | Serialize mbl array into a sequence of bytes. | + | set_lvar_name(self, *args) -> 'bool' + | set_lvar_name(self, v, name, flagbits) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | @param flagbits: int + | | set_maturity(self, *args) -> 'bool' | set_maturity(self, mat) -> bool | Set maturity level. @@ -30308,6 +30389,18 @@ class mba_t(builtins.object) | | @param f: int | + | set_nice_lvar_name(self, *args) -> 'bool' + | set_nice_lvar_name(self, v, name) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | + | set_user_lvar_name(self, *args) -> 'bool' + | set_user_lvar_name(self, v, name) -> bool + | + | @param v: lvar_t & + | @param name: char const * + | | short_display(self, *args) -> 'bool' | short_display(self) -> bool | @@ -31746,6 +31839,9 @@ class mcallarg_t(mop_t) | | @param ea: ea_t | + | is_glbaddr_from_fixup(self, *args) -> 'bool' + | is_glbaddr_from_fixup(self) -> bool + | | is_impptr_done(self, *args) -> 'bool' | is_impptr_done(self) -> bool | @@ -33893,6 +33989,9 @@ class mop_addr_t(mop_t) | | @param ea: ea_t | + | is_glbaddr_from_fixup(self, *args) -> 'bool' + | is_glbaddr_from_fixup(self) -> bool + | | is_impptr_done(self, *args) -> 'bool' | is_impptr_done(self) -> bool | @@ -34762,6 +34861,9 @@ class mop_t(builtins.object) | | @param ea: ea_t | + | is_glbaddr_from_fixup(self, *args) -> 'bool' + | is_glbaddr_from_fixup(self) -> bool + | | is_impptr_done(self, *args) -> 'bool' | is_impptr_done(self) -> bool | @@ -35446,6 +35548,9 @@ class number_format_t(builtins.object) | flags | flags | + | flags32 + | flags32 + | | opnum | opnum | @@ -42678,6 +42783,10 @@ inf_hide_libfuncs(*args) -> 'bool' Help on function inf_huge_arg_align in module ida_ida: inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align(cc) -> bool + + @param cc: cm_t + inf_huge_arg_align() -> bool Help on function inf_inc_database_change_count in module ida_ida: @@ -44032,6 +44141,15 @@ is_filetype_like_binary(*args) -> 'bool' @param ft: (C++: filetype_t) enum filetype_t +Help on function move_privrange in module ida_ida: + +move_privrange(*args) -> 'bool' + move_privrange(new_privrange_start) -> bool + Move privrange to the specified address + + @param new_privrange_start: (C++: ea_t) new start address of the privrange + @return: success + Help on function in module ida_ida: lambda *args @@ -44054,6 +44172,15 @@ to_ea(*args) -> 'ea_t' @param reg_cs: (C++: sel_t) @param reg_ip: (C++: uval_t) +Help on function validate_idb in module ida_ida: + +validate_idb(*args) -> 'size_t' + validate_idb(vld_flags=0) -> size_t + Validate the database + + @param vld_flags: (C++: uint32) combination of VLD_.. constants + @return: number of corrupted/fixed records + Module "ida_idaapi"s docstring: """None""" @@ -44155,6 +44282,8 @@ class CustomIDAMemo(View_Hooks) | | @param values: A dictionary of 'int -> node_info_t' objects. | + | _OnBind(self, hook) + | | __init__(self) | __init__(self, _flags=0, _hkcb_flags=0x0001) -> View_Hooks | @@ -49438,6 +49567,30 @@ class IDP_Hooks(builtins.object) | @retval 1: ok | @retval <0: segment should not be created | + | ev_cvt64_hashval(self, *args) -> 'int' + | ev_cvt64_hashval(self, node, tag, name, data) -> int + | perform 32-64 conversion for a hash value + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param name: (const ::char *) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | + | ev_cvt64_supval(self, *args) -> 'int' + | ev_cvt64_supval(self, node, tag, idx, data) -> int + | perform 32-64 conversion for a netnode array element + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param idx: (::nodeidx_t) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | | ev_decorate_name(self, *args) -> 'PyObject *' | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * | Decorate/undecorate a C symbol name. @@ -50502,6 +50655,26 @@ class _processor_t(builtins.object) | cbsize(self, *args) -> 'int' | cbsize(self) -> int | + | cvt64_hashval(self, *args) -> 'ssize_t' + | cvt64_hashval(self, node, tag, name, data) -> ssize_t + | + | Parameters + | ---------- + | node: nodeidx_t + | tag: uchar + | name: char const * + | data: uchar const * + | + | cvt64_supval(self, *args) -> 'ssize_t' + | cvt64_supval(self, node, tag, idx, data) -> ssize_t + | + | Parameters + | ---------- + | node: nodeidx_t + | tag: uchar + | idx: nodeidx_t + | data: uchar const * + | | dbsize(self, *args) -> 'int' | dbsize(self) -> int | @@ -51635,6 +51808,10 @@ class _processor_t(builtins.object) | | ev_creating_segm = 26 | + | ev_cvt64_hashval = 98 + | + | ev_cvt64_supval = 97 + | | ev_decorate_name = 2020 | | ev_del_cref = 66 @@ -51741,7 +51918,7 @@ class _processor_t(builtins.object) | | ev_is_switch = 41 | - | ev_last_cb_before_debugger = 97 + | ev_last_cb_before_debugger = 99 | | ev_last_cb_before_loader = 2023 | @@ -54080,6 +54257,13 @@ Help on function get_ash in module ida_idp: get_ash(*args) -> 'asm_t *' get_ash() -> asm_t +Help on function get_config_value in module ida_idp: + +get_config_value(*args) -> 'jvalue_t *' + get_config_value(key) -> bool + + @param key: char const * + Help on function get_idb_notifier_addr in module ida_idp: get_idb_notifier_addr(*args) -> 'PyObject *' @@ -55348,6 +55532,30 @@ class processor_t(IDP_Hooks) | idbs. | @return: must be 0 | + | ev_cvt64_hashval(self, *args) -> 'int' + | ev_cvt64_hashval(self, node, tag, name, data) -> int + | perform 32-64 conversion for a hash value + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param name: (const ::char *) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | + | ev_cvt64_supval(self, *args) -> 'int' + | ev_cvt64_supval(self, node, tag, idx, data) -> int + | perform 32-64 conversion for a netnode array element + | + | @param node: (::nodeidx_t) + | @param tag: (uchar) + | @param idx: (::nodeidx_t) + | @param data: (const uchar *) + | @return: 0 nothing was done + | 1 converted successfully + | -1 error (and message in errbuf) + | | ev_decorate_name(self, *args) -> 'PyObject *' | ev_decorate_name(self, name, mangle, cc, optional_type) -> PyObject * | Decorate/undecorate a C symbol name. @@ -57141,6 +57349,8 @@ class CustomIDAMemo(View_Hooks) | | @param values: A dictionary of 'int -> node_info_t' objects. | + | _OnBind(self, hook) + | | __init__(self) | __init__(self, _flags=0, _hkcb_flags=0x0001) -> View_Hooks | @@ -57693,6 +57903,8 @@ class IDAViewWrapper(CustomIDAMemo) | | @param values: A dictionary of 'int -> node_info_t' objects. | + | _OnBind(self, hook) + | | _get_cb(self, view, cb_name) | | _get_cb_arity(self, cb) @@ -57859,27 +58071,27 @@ class PluginForm(builtins.object) | ---------------------------------------------------------------------- | Static methods defined here: | - | FormToPyQtWidget = TWidgetToPyQtWidget(tw, ctx=) + | FormToPyQtWidget = TWidgetToPyQtWidget(tw, ctx=) | Convert a TWidget* to a QWidget to be used by PyQt | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | FormToPySideWidget = TWidgetToPySideWidget(tw, ctx=) + | FormToPySideWidget = TWidgetToPySideWidget(tw, ctx=) | Use this method to convert a TWidget* to a QWidget to be used by PySide | | @param ctx: Context. Reference to a module that already imported QtWidgets module | - | QtWidgetToTWidget(w, ctx=) + | QtWidgetToTWidget(w, ctx=) | Convert a QWidget to a TWidget* to be used by IDA | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | TWidgetToPyQtWidget(tw, ctx=) + | TWidgetToPyQtWidget(tw, ctx=) | Convert a TWidget* to a QWidget to be used by PyQt | | @param ctx: Context. Reference to a module that already imported SIP and QtWidgets modules | - | TWidgetToPySideWidget(tw, ctx=) + | TWidgetToPySideWidget(tw, ctx=) | Use this method to convert a TWidget* to a QWidget to be used by PySide | | @param ctx: Context. Reference to a module that already imported QtWidgets module @@ -58969,6 +59181,17 @@ ask_yn(*args) -> 'int' @param format: (C++: const char *) The question in printf() style format @return: the selected button (one of Button IDs). Esc key returns ASKBTN_CANCEL. +Help on function atoea in module ida_kernwin: + +atoea(*args) 'unsigned-ea-like-numeric-type *'↗ + atoea(str) -> bool + Convert a number in C notation to an address. decimal: 1234 + octal: 0123 + hexadecimal: 0xabcd + binary: 0b00101010 + + @param str: (C++: const char *) the string to parse + Help on function attach_action_to_menu in module ida_kernwin: attach_action_to_menu(*args) -> 'bool' @@ -59341,10 +59564,6 @@ class chooser_base_t(builtins.object) | is_multi(self) -> bool | is multi-selection allowed? | - | is_noidb(self, *args) -> 'bool' - | is_noidb(self) -> bool - | can use the chooser before opening the database? - | | is_quick_filter_visible_initially(self, *args) -> 'bool' | is_quick_filter_visible_initially(self) -> bool | @@ -60001,7 +60220,7 @@ display_widget(*args) -> 'void' Help on function ea2str in module ida_kernwin: -ea2str(*args) -> 'size_t' +ea2str(*args) -> 'qstring *' ea2str(ea) -> str Convert linear address to UTF-8 string. @@ -63904,13 +64123,32 @@ class simpleline_t(builtins.object) Help on function str2ea in module ida_kernwin: -str2ea(*args) -> 'ea_t' - str2ea(str, screenEA=BADADDR) -> ea_t - Converts a string express to EA. The expression evaluator may be called as well. +str2ea(*args) 'unsigned-ea-like-numeric-type *'↗ + str2ea(str, screen_ea=BADADDR) -> bool + Convert string to linear address. Tries to interpret the string as: + 1) "current IP" keyword if supported by assembler (e.g. "$" in x86) + 2) segment:offset expression, where "segment" may be a name or a fixed segment + register (e.g. cs, ds) + 3) just segment name/register (translated to segment's start address) + 4) a name in the database (or debug name during debugging) + 5) +delta or -delta, where numerical 'delta' is added to or subtracted from + 'screen_ea' + 6) if all else fails, try to evaluate 'str' as an IDC expression - @param str: char const * - @param screenEA: ea_t - @return: BADADDR or address value + @param str: (C++: const char *) string to parse + @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view + @return: success + +Help on function str2ea_ex in module ida_kernwin: + +str2ea_ex(*args) 'unsigned-ea-like-numeric-type *'↗ + str2ea_ex(str, screen_ea=BADADDR, flags=0) -> bool + Same as str2ea() but possibly with some steps skipped. + + @param str: (C++: const char *) string to parse + @param screen_ea: (C++: ea_t) the current address in the disassembly/pseudocode view + @param flags: (C++: int) see String to address conversion flags + @return: success Help on function str2user in module ida_pro: @@ -66441,6 +66679,7 @@ class bookmarks_t(builtins.object) | Methods defined here: | | __getitem__(self, idx) + | Get the n-th bookmark for the widget. | | __init__(self, w) | Build an object suitable for iterating bookmarks @@ -66451,8 +66690,10 @@ class bookmarks_t(builtins.object) | so bookmarks can be re-used interchangeably between them | | __iter__(self) + | Iterate on bookmarks present for the widget. | | __len__(self) + | Get the number of bookmarks for the widget. | | __repr__ = _swig_repr(self) | @@ -68789,6 +69030,9 @@ class printop_t(builtins.object) | is_aflags_initialized(self, *args) -> 'bool' | is_aflags_initialized(self) -> bool | + | is_f64(self, *args) -> 'bool' + | is_f64(self) -> bool + | | is_ti_initialized(self, *args) -> 'bool' | is_ti_initialized(self) -> bool | @@ -69772,7 +70016,7 @@ append_struct_fields(*args) -> 'qstring *, adiff_t *' Append names of struct fields to a name if the name is a struct name. @param disp: (C++: adiff_t *) displacement from the name - @param n: (C++: int) number of operand n which the name appears + @param n: (C++: int) operand number in which the name appears @param path: (C++: const tid_t *) path in the struct. path is an array of id's. maximal length of array is MAXSTRUCPATH. the first element of the array is the structure id. consecutive elements are id's of used union members @@ -70778,6 +71022,17 @@ class netnode(builtins.object) | @param alt: uchar | @param tag: uchar | + | blobshift(self, *args) -> 'size_t' + | blobshift(self, _from, to, size, tag) -> size_t + | Shift the blob array elements. Moves the array elements at (from..from+size) to + | (to..to+size) + | + | @param from: (C++: nodeidx_t) + | @param to: (C++: nodeidx_t) + | @param size: (C++: nodeidx_t) + | @param tag: (C++: uchar) + | @return: number of shifted elements + | | blobsize(self, *args) -> 'size_t' | blobsize(self, _start, tag) -> size_t | Get size of blob. @@ -71501,7 +71756,9 @@ calc_offset_base(*args) -> 'ea_t' @param ea: (C++: ea_t) the referencing instruction/data address @param n: (C++: int) operand number * 0: first operand - * 1: other operand + * 1: second operand + * ... + * 7: eighth operand @return: output base address or BADADDR Help on function calc_probable_base_by_value in module ida_offset: @@ -71567,7 +71824,7 @@ get_default_reftype(*args) -> 'reftype_t' Get default reference type depending on the segment. @param ea: (C++: ea_t) - @return: one of REF_OFF8,REF_OFF16,REF_OFF32 + @return: one of REF_OFF8, REF_OFF16, REF_OFF32, REF_OFF64 Help on function get_offbase in module ida_offset: @@ -71576,7 +71833,7 @@ get_offbase(*args) -> 'ea_t' Get offset base value @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: offset base or BADADDR Help on function get_offset_expr in module ida_offset: @@ -71616,9 +71873,11 @@ get_offset_expression(*args) -> 'qstring *' offset array @param ea: (C++: ea_t) start of instruction or data with the offset expression - @param n: (C++: int) number of operand (may be ORed with OPND_OUTER) + @param n: (C++: int) operand number (may be ORed with OPND_OUTER) * 0: first operand * 1: second operand + * ... + * 7: eighth operand @param from: (C++: ea_t) linear address of instruction operand or data referring to the name. This address will be used to get fixup information, so it should point to exact position of operand in the instruction. @@ -71656,10 +71915,11 @@ op_offset_ex(*args) -> 'bool' * no segment: fail * 16bit segment: to 16bit word data * 32bit segment: to dword - @param n: (C++: int) number of operand (may be ORed with OPND_OUTER) + @param n: (C++: int) operand number (may be ORed with OPND_OUTER) * 0: first * 1: second - * 2: third + * ... + * 7: eighth operand * OPND_MASK: all operands @param ri: (C++: const refinfo_t *) reference information @return: success @@ -72728,6 +72988,12 @@ is_control_tty(*args) -> 'enum tty_control_t' @param fd: (C++: int) +Help on function is_cvt64 in module ida_pro: + +is_cvt64(*args) -> 'bool' + is_cvt64() -> bool + is IDA converting IDB into I64? + Help on function is_main_thread in module ida_pro: is_main_thread(*args) -> 'bool' @@ -75861,13 +76127,13 @@ class lock_segment(builtins.object) Help on function move_segm in module ida_segment: -move_segm(*args) -> 'int' - move_segm(s, to, flags=0) -> int - Move a segment to a new address. This function moves all information to the new - address. It fixes up address sensitive information in the kernel. The total - effect is equal to reloading the segment to the target address. For the file - format dependent address sensitive information, loader_t::move_segm is called. - Also IDB notification event idb_event::segm_moved is called. +move_segm(*args) -> 'move_segm_code_t' + move_segm(s, to, flags=0) -> move_segm_code_t + This function moves all information to the new address. It fixes up address + sensitive information in the kernel. The total effect is equal to reloading the + segment to the target address. For the file format dependent address sensitive + information, loader_t::move_segm is called. Also IDB notification event + idb_event::segm_moved is called. @param s: (C++: segment_t *) segment to move @param to: (C++: ea_t) new segment start address @@ -75901,6 +76167,14 @@ move_segm_start(*args) -> 'bool' @retval 1: ok @retval 0: failed, a warning message is displayed +Help on function move_segm_strerror in module ida_segment: + +move_segm_strerror(*args) -> 'char const *' + move_segm_strerror(code) -> char const * + Return string describing error MOVE_SEGM_... code. + + @param code: (C++: move_segm_code_t) enum move_segm_code_t + Help on function rebase_program in module ida_segment: rebase_program(*args) -> 'int' @@ -80391,6 +80665,12 @@ class callregs_t(builtins.object) | @param gprs: (C++: const int *) int const * | @param fprs: (C++: const int *) int const * | + | swap(self, *args) -> 'void' + | swap(self, r) + | swap two instances + | + | @param r: (C++: callregs_t &) + | | ---------------------------------------------------------------------- | Static methods defined here: | @@ -80953,6 +81233,9 @@ class enum_type_data_t(enum_member_vec_t) | is_64bit(self, *args) -> 'bool' | is_64bit(self) -> bool | + | is_bf(self, *args) -> 'bool' + | is_bf(self) -> bool + | | is_char(self, *args) -> 'bool' | is_char(self) -> bool | @@ -80965,6 +81248,12 @@ class enum_type_data_t(enum_member_vec_t) | is_udec(self, *args) -> 'bool' | is_udec(self) -> bool | + | set_bf(self, *args) -> 'bool' + | set_bf(self, bf) -> bool + | Convert enum to a bitmask (flag_enum) + | + | @param bf: (C++: bool) + | | swap(self, *args) -> 'void' | swap(self, r) | swap two instances @@ -81142,6 +81431,14 @@ class enum_type_data_t(enum_member_vec_t) | | __hash__ = None +Help on function enum_type_data_t__set_bf in module ida_typeinf: + +enum_type_data_t__set_bf(*args) -> 'bool' + enum_type_data_t__set_bf(_this, bf) -> bool + + @param _this: enum_type_data_t * + @param bf: bool + Help on function extract_argloc in module ida_typeinf: extract_argloc(*args) -> 'bool' @@ -81279,6 +81576,9 @@ class func_type_data_t(funcargvec_t) | is_static(self, *args) -> 'bool' | is_static(self) -> bool | + | is_swift_cc(self, *args) -> 'bool' + | is_swift_cc(self) -> bool + | | is_vararg_cc(self, *args) -> 'bool' | is_vararg_cc(self) -> bool | @@ -82215,6 +82515,14 @@ inf_big_arg_align(*args) -> 'bool' @param cc: cm_t +Help on function inf_huge_arg_align in module ida_typeinf: + +inf_huge_arg_align(*args) -> 'bool' + inf_huge_arg_align() -> bool + inf_huge_arg_align(cc) -> bool + + @param cc: cm_t + Help on function inf_pack_stkargs in module ida_typeinf: inf_pack_stkargs(*args) -> 'bool' @@ -82351,6 +82659,14 @@ is_sdacl_byte(*args) -> 'bool' @param t: (C++: type_t) +Help on function is_swift_cc in module ida_typeinf: + +is_swift_cc(*args) -> 'bool' + is_swift_cc(cc) -> bool + Swift calling convention (arguments and return values in registers)? + + @param cc: (C++: cm_t) + Help on function is_tah_byte in module ida_typeinf: is_tah_byte(*args) -> 'bool' @@ -83703,6 +84019,18 @@ save_tinfo(*args) -> 'tinfo_code_t' @param name: char const * @param ntf_flags: int +Help on function save_tinfo2 in module ida_typeinf: + +save_tinfo2(*args) -> 'tinfo_code_t' + save_tinfo2(tif, til, ord, name, cmt, ntf_flags) -> tinfo_code_t + + @param tif: tinfo_t * + @param til: til_t * + @param ord: size_t + @param name: char const * + @param cmt: char const * + @param ntf_flags: int + Help on class scattered_aloc_t in module ida_typeinf: class scattered_aloc_t(argpartvec_t) @@ -85248,14 +85576,22 @@ class tinfo_t(builtins.object) | @param til: til_t * | @param name: char const * | @param ntf_flags: int + | + | set_named_type(self, til, name, cmt, ntf_flags=0) -> tinfo_code_t + | + | @param til: til_t * + | @param name: char const * + | @param cmt: char const * + | @param ntf_flags: int | | set_numbered_type(self, *args) -> 'tinfo_code_t' - | set_numbered_type(self, til, ord, ntf_flags=0, name=None) -> tinfo_code_t + | set_numbered_type(self, til, ord, ntf_flags=0, name=None, cmt=None) -> tinfo_code_t | | @param til: til_t * | @param ord: uint32 | @param ntf_flags: int | @param name: char const * + | @param cmt: char const * | | set_symbol_type(self, *args) -> 'tinfo_code_t' | set_symbol_type(self, til, name, ntf_flags=0) -> tinfo_code_t @@ -85263,6 +85599,13 @@ class tinfo_t(builtins.object) | @param til: til_t * | @param name: char const * | @param ntf_flags: int + | + | set_symbol_type(self, til, name, cmt, ntf_flags=0) -> tinfo_code_t + | + | @param til: til_t * + | @param name: char const * + | @param cmt: char const * + | @param ntf_flags: int | | set_volatile(self, *args) -> 'void' | set_volatile(self) @@ -87019,7 +87362,7 @@ get_immvals(*args) -> 'PyObject *' case the transformed values (as needed for printing) will be stored instead. @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) number of operand (0..UA_MAXOP-1), -1 means all operands + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands @param F: (C++: flags64_t) flags for the specified address @return: number of immediate values (0..2*UA_MAXOP) @@ -87038,7 +87381,7 @@ get_printable_immvals(*args) -> 'PyObject *' Get immediate ready-to-print values at the specified address @param ea: (C++: ea_t) address to analyze - @param n: (C++: int) number of operand (0..UA_MAXOP-1), -1 means all operands + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all the operands @param F: (C++: flags64_t) flags for the specified address @return: number of immediate values (0..2*UA_MAXOP) @@ -87722,6 +88065,9 @@ class outctx_base_t(builtins.object) | gen_xref_lines(self, *args) -> 'bool' | gen_xref_lines(self) -> bool | + | getF(self, *args) -> 'flags64_t' + | getF(self) -> flags64_t + | | get_stkvar(self, *args) -> 'member_t *' | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * | @@ -87925,6 +88271,9 @@ class outctx_base_t(builtins.object) | ---------------------------------------------------------------------- | Data descriptors defined here: | + | F32 + | F32 + | | __dict__ | dictionary for instance variables (if defined) | @@ -88044,7 +88393,7 @@ class outctx_t(outctx_base_t) | It should be called from processor_t::ev_out_insn() and it will call | processor_t::ev_out_operand(). This function outputs a colored text. | - | @param n: (C++: int) number of operand + | @param n: (C++: int) 0..UA_MAXOP-1 operand number | @retval 1: operand is displayed | @retval 0: operand is hidden | @@ -88074,6 +88423,13 @@ class outctx_t(outctx_base_t) | @param prefix: (C++: const char *) char const * | @param flags: int | + | term_outctx(self, *args) -> 'int' + | term_outctx(self, prefix=None) -> int + | Finalize the output context. + | + | @param prefix: (C++: const char *) char const * + | @return: the number of generated lines. + | | ---------------------------------------------------------------------- | Data descriptors defined here: | @@ -88098,6 +88454,9 @@ class outctx_t(outctx_base_t) | insn | insn | + | next_line_ea + | next_line_ea + | | ph | ph | @@ -88210,6 +88569,9 @@ class outctx_t(outctx_base_t) | @param format: (C++: const char *) printf style colored line to generate | @return: overflow, lnar_maxsize has been reached | + | getF(self, *args) -> 'flags64_t' + | getF(self) -> flags64_t + | | get_stkvar(self, *args) -> 'member_t *' | get_stkvar(self, arg2, arg3, arg4, arg5) -> member_t * | @@ -88379,16 +88741,12 @@ class outctx_t(outctx_base_t) | stack_view(self, *args) -> 'bool' | stack_view(self) -> bool | - | term_outctx(self, *args) -> 'int' - | term_outctx(self, prefix=None) -> int - | Finalize the output context. - | - | @param prefix: (C++: const char *) char const * - | @return: the number of generated lines. - | | ---------------------------------------------------------------------- | Data descriptors inherited from outctx_base_t: | + | F32 + | F32 + | | __dict__ | dictionary for instance variables (if defined) | @@ -88428,7 +88786,7 @@ print_operand(*args) -> 'qstring *' text representation of the specified operand (includes color codes.) @param ea: (C++: ea_t) the item address (instruction or data) - @param n: (C++: int) operand number (0,1,2...). meaningful only for instructions + @param n: (C++: int) 0..UA_MAXOP-1 operand number, meaningful only for instructions @param getn_flags: (C++: int) Name expression flags Currently only GETN_NODUMMY is accepted. @param newtype: (C++: struct printop_t *) if specified, print the operand using the specified type @@ -91168,7 +91526,7 @@ get_forced_operand(*args) -> 'qstring *' Get forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @return: size of forced operand or -1 Help on function get_frame_args_size in module idc: @@ -92834,7 +93192,7 @@ op_enum(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @param id: (C++: enum_t) id of enum @param serial: (C++: uchar) the serial number of the constant in the enumeration, usually 0. the serial numbers are used if the enumeration contains several @@ -92866,7 +93224,7 @@ set_forced_operand(*args) -> 'bool' Set forced operand. @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, 2) + @param n: (C++: int) 0..UA_MAXOP-1 operand number @param op: (C++: const char *) text of operand * nullptr: do nothing (return 0) * "" : delete forced operand @@ -92966,7 +93324,7 @@ op_seg(*args) -> 'bool' converts them to 16/32bit word data @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stkvar in module ida_bytes: @@ -92978,7 +93336,7 @@ op_stkvar(*args) -> 'bool' using insn_t::create_stkvar(). @param ea: (C++: ea_t) linear address - @param n: (C++: int) number of operand (0, 1, -1) + @param n: (C++: int) 0..UA_MAXOP-1 operand number, OPND_ALL all operands @return: success Help on function op_stroff in module idc: @@ -94147,7 +94505,7 @@ split_sreg_range(ea, reg, value, tag=2) @note: IDA keeps tracks of all the points where segment register change their values. This function allows you to specify the correct value of a segment - register if IDA is not able to find the corrent value. + register if IDA is not able to find the correct value. Help on function start_process in module ida_dbg: @@ -94576,123 +94934,63 @@ Documentation on variable FF_UNUSED in module ida_bytes: unused bit (was used for variable bytes) -Documentation on variable MS_0TYPE in module ida_bytes: +Documentation on variable MS_N_TYPE in module ida_bytes: - Mask for 1st arg typing. + Mask for nth arg. -Documentation on variable FF_0VOID in module ida_bytes: +Documentation on variable FF_N_VOID in module ida_bytes: Void (unknown)? -Documentation on variable FF_0NUMH in module ida_bytes: +Documentation on variable FF_N_NUMH in module ida_bytes: Hexadecimal number? -Documentation on variable FF_0NUMD in module ida_bytes: +Documentation on variable FF_N_NUMD in module ida_bytes: Decimal number? -Documentation on variable FF_0CHAR in module ida_bytes: +Documentation on variable FF_N_CHAR in module ida_bytes: Char ('x')? -Documentation on variable FF_0SEG in module ida_bytes: +Documentation on variable FF_N_SEG in module ida_bytes: Segment? -Documentation on variable FF_0OFF in module ida_bytes: +Documentation on variable FF_N_OFF in module ida_bytes: Offset? -Documentation on variable FF_0NUMB in module ida_bytes: +Documentation on variable FF_N_NUMB in module ida_bytes: Binary number? -Documentation on variable FF_0NUMO in module ida_bytes: +Documentation on variable FF_N_NUMO in module ida_bytes: Octal number? -Documentation on variable FF_0ENUM in module ida_bytes: +Documentation on variable FF_N_ENUM in module ida_bytes: Enumeration? -Documentation on variable FF_0FOP in module ida_bytes: +Documentation on variable FF_N_FOP in module ida_bytes: Forced operand? -Documentation on variable FF_0STRO in module ida_bytes: +Documentation on variable FF_N_STRO in module ida_bytes: Struct offset? -Documentation on variable FF_0STK in module ida_bytes: +Documentation on variable FF_N_STK in module ida_bytes: Stack variable? -Documentation on variable FF_0FLT in module ida_bytes: +Documentation on variable FF_N_FLT in module ida_bytes: Floating point number? -Documentation on variable FF_0CUST in module ida_bytes: - - Custom representation? - -Documentation on variable MS_1TYPE in module ida_bytes: - - Mask for the type of other operands. - -Documentation on variable FF_1VOID in module ida_bytes: - - Void (unknown)? - -Documentation on variable FF_1NUMH in module ida_bytes: - - Hexadecimal number? - -Documentation on variable FF_1NUMD in module ida_bytes: - - Decimal number? - -Documentation on variable FF_1CHAR in module ida_bytes: - - Char ('x')? - -Documentation on variable FF_1SEG in module ida_bytes: - - Segment? - -Documentation on variable FF_1OFF in module ida_bytes: - - Offset? - -Documentation on variable FF_1NUMB in module ida_bytes: - - Binary number? - -Documentation on variable FF_1NUMO in module ida_bytes: - - Octal number? - -Documentation on variable FF_1ENUM in module ida_bytes: - - Enumeration? - -Documentation on variable FF_1FOP in module ida_bytes: - - Forced operand? - -Documentation on variable FF_1STRO in module ida_bytes: - - Struct offset? - -Documentation on variable FF_1STK in module ida_bytes: - - Stack variable? - -Documentation on variable FF_1FLT in module ida_bytes: - - Floating point number? - -Documentation on variable FF_1CUST in module ida_bytes: +Documentation on variable FF_N_CUST in module ida_bytes: Custom representation? @@ -96879,9 +97177,9 @@ Documentation on variable operand_locator_t.opnum in module ida_hexrays: operand number in the instruction -Documentation on variable number_format_t.flags in module ida_hexrays: +Documentation on variable number_format_t.flags32 in module ida_hexrays: - ida flags, which describe number radix, enum, etc + low 32bit of flags (for compatibility) Documentation on variable number_format_t.opnum in module ida_hexrays: @@ -96900,6 +97198,10 @@ Documentation on variable number_format_t.type_name in module ida_hexrays: for stroffs: structure for offsetof() for enums: enum name +Documentation on variable number_format_t.flags in module ida_hexrays: + + ida flags, which describe number radix, enum, etc + Documentation on variable NF_FIXED in module ida_hexrays: number format has been defined by the user @@ -98041,7 +98343,7 @@ Documentation on variable WARN_ILL_PURGED in module ida_hexrays: Documentation on variable WARN_ILL_FUNCTYPE in module ida_hexrays: - 2 invalid function type has been ignored + 2 invalid function type 's' has been ignored Documentation on variable WARN_VARARG_TCAL in module ida_hexrays: @@ -99708,7 +100010,7 @@ Documentation on variable DECOMP_NO_WAIT in module ida_hexrays: Documentation on variable DECOMP_NO_CACHE in module ida_hexrays: - do not use decompilation cache + do not use decompilation cache (snippets are never cached) Documentation on variable DECOMP_NO_FRAME in module ida_hexrays: @@ -99728,7 +100030,21 @@ Documentation on variable DECOMP_NO_HIDE in module ida_hexrays: Documentation on variable DECOMP_NO_XREFS in module ida_hexrays: - do not update global xrefs cache + Obsolete. Use DECOMP_GXREFS_NOUPD. + +Documentation on variable DECOMP_GXREFS_DEFLT in module ida_hexrays: + + the default behavior: do not update the global xrefs cache upon decompile() + call, but when the pseudocode text is generated (e.g., through + cfunc_t.get_pseudocode()) + +Documentation on variable DECOMP_GXREFS_NOUPD in module ida_hexrays: + + do not update the global xrefs cache + +Documentation on variable DECOMP_GXREFS_FORCE in module ida_hexrays: + + update the global xrefs cache immediately Documentation on variable DECOMP_VOID_MBA in module ida_hexrays: @@ -100963,6 +101279,18 @@ Documentation on variable UA_MAXOP in module ida_ida: max number of operands allowed for an instruction +Documentation on variable VLD_AUTO_REPAIR in module ida_ida: + + automatically repair the database + +Documentation on variable VLD_DIALOG in module ida_ida: + + ask user to repair (this bit is mutually exclusive with VLD_AUTO_REPAIR) + +Documentation on variable VLD_SILENT in module ida_ida: + + no messages to the output window + Documentation on variable PY_ICID_INT64 in module ida_idaapi: int64 object @@ -101593,14 +101921,15 @@ Documentation on variable debugger_t.ev_set_exception_info in module ida_idd: Documentation on variable debugger_t.ev_suspended in module ida_idd: This event will be generated by the kernel each time it has suspended the - debugger process and refreshed the database. The debugger module may add - information to the database if it wants. + debuggee process and refreshed the database. The debugger module may add + information to the database if necessary. - The reason for introducing this event is that when an event line LOAD_DLL + The reason for introducing this event is that when an event like LOAD_DLL happens, the database does not reflect the memory state yet and therefore we can't add information about the dll into the database in the get_debug_event() - event. Only when the kernel has adjusted the database we can do it. Example: for - imported PE DLLs we will add the exported event names to the database. + function. Only when the kernel has adjusted the database we can do it. Example: + for loaded PE DLLs we can add the exported function names to the list of debug + names (see set_debug_names()). This event is generated in the main thread. @@ -102286,15 +102615,15 @@ Documentation on variable CF_CHG3 in module ida_idp: Documentation on variable CF_CHG4 in module ida_idp: - The instruction modifies 4 operand. + The instruction modifies the fourth operand. Documentation on variable CF_CHG5 in module ida_idp: - The instruction modifies 5 operand. + The instruction modifies the fifth operand. Documentation on variable CF_CHG6 in module ida_idp: - The instruction modifies 6 operand. + The instruction modifies the sixth operand. Documentation on variable CF_USE1 in module ida_idp: @@ -102310,15 +102639,15 @@ Documentation on variable CF_USE3 in module ida_idp: Documentation on variable CF_USE4 in module ida_idp: - The instruction uses value of the 4 operand. + The instruction uses value of the fourth operand. Documentation on variable CF_USE5 in module ida_idp: - The instruction uses value of the 5 operand. + The instruction uses value of the fifth operand. Documentation on variable CF_USE6 in module ida_idp: - The instruction uses value of the 6 operand. + The instruction uses value of the sixth operand. Documentation on variable CF_JUMP in module ida_idp: @@ -102335,19 +102664,19 @@ Documentation on variable CF_HLL in module ida_idp: Documentation on variable CF_CHG7 in module ida_idp: - The instruction modifies the 7th operand. + The instruction modifies the seventh operand. Documentation on variable CF_CHG8 in module ida_idp: - The instruction modifies the 8th operand. + The instruction modifies the eighth operand. Documentation on variable CF_USE7 in module ida_idp: - The instruction uses value of the 7th operand. + The instruction uses value of the seventh operand. Documentation on variable CF_USE8 in module ida_idp: - The instruction uses value of the 8th operand. + The instruction uses value of the eighth operand. Documentation on variable asm_t.flag in module ida_idp: @@ -104403,6 +104732,122 @@ Documentation on variable IWID_STACK in module ida_kernwin: Alias. Some IWID_* were confusing, and thus have been renamed. This is to ensure bw-compat. +Documentation on variable IDA_DEBUG_DREFS in module ida_kernwin: + + drefs + +Documentation on variable IDA_DEBUG_OFFSET in module ida_kernwin: + + offsets + +Documentation on variable IDA_DEBUG_FLIRT in module ida_kernwin: + + flirt + +Documentation on variable IDA_DEBUG_IDP in module ida_kernwin: + + idp module + +Documentation on variable IDA_DEBUG_LDR in module ida_kernwin: + + ldr module + +Documentation on variable IDA_DEBUG_PLUGIN in module ida_kernwin: + + plugin module + +Documentation on variable IDA_DEBUG_IDS in module ida_kernwin: + + ids files + +Documentation on variable IDA_DEBUG_CONFIG in module ida_kernwin: + + config file + +Documentation on variable IDA_DEBUG_CHECKMEM in module ida_kernwin: + + check heap consistency + +Documentation on variable IDA_DEBUG_LICENSE in module ida_kernwin: + + licensing + +Documentation on variable IDA_DEBUG_DEMANGLE in module ida_kernwin: + + demangler + +Documentation on variable IDA_DEBUG_QUEUE in module ida_kernwin: + + queue + +Documentation on variable IDA_DEBUG_ROLLBACK in module ida_kernwin: + + rollback + +Documentation on variable IDA_DEBUG_ALREADY in module ida_kernwin: + + already data or code + +Documentation on variable IDA_DEBUG_TIL in module ida_kernwin: + + type system + +Documentation on variable IDA_DEBUG_NOTIFY in module ida_kernwin: + + show all notifications + +Documentation on variable IDA_DEBUG_DEBUGGER in module ida_kernwin: + + debugger + +Documentation on variable IDA_DEBUG_APPCALL in module ida_kernwin: + + appcall + +Documentation on variable IDA_DEBUG_SRCDBG in module ida_kernwin: + + source debugging + +Documentation on variable IDA_DEBUG_ACCESSIBILITY in module ida_kernwin: + + accessibility + +Documentation on variable IDA_DEBUG_NETWORK in module ida_kernwin: + + network + +Documentation on variable IDA_DEBUG_INTERNET in module ida_kernwin: + + internet connection (for API backward compatibility) + +Documentation on variable IDA_DEBUG_SIMPLEX in module ida_kernwin: + + full stack analysis + +Documentation on variable IDA_DEBUG_DBGINFO in module ida_kernwin: + + handling of debug info (e.g. pdb, dwarf) + +Documentation on variable IDA_DEBUG_LUMINA in module ida_kernwin: + + lumina related + +Documentation on variable IDA_DEBUG_THEMES in module ida_kernwin: + + themes + +Documentation on variable IDA_DEBUG_REGEX in module ida_kernwin: + + regular expression + +Documentation on variable IDA_DEBUG_SUBPROC in module ida_kernwin: + + sub process + +Documentation on variable IDA_DEBUG_ALWAYS in module ida_kernwin: + + everything + Documentation on variable AST_ENABLE_ALWAYS in module ida_kernwin: enable action and do not call action_handler_t::update() anymore @@ -104467,10 +104912,6 @@ Documentation on variable CH_ATTRS in module ida_kernwin: generate ui_get_chooser_item_attrs (gui only) -Documentation on variable CH_NOIDB in module ida_kernwin: - - use the chooser before opening the database - Documentation on variable CH_FORCE_DEFAULT in module ida_kernwin: if a non-modal chooser was already open, change selection to the default one @@ -104578,7 +105019,9 @@ Documentation on variable CHCOL_PLAIN in module ida_kernwin: Documentation on variable CHCOL_PATH in module ida_kernwin: - file path + file path. TUI IDA will truncate excessive cell lengths starting at their + beginning, and prepending the resulting text with "..." order to leave the + filename visible Documentation on variable CHCOL_HEX in module ida_kernwin: @@ -105300,6 +105743,10 @@ Documentation on variable CLNL_FINDCMT in module ida_kernwin: Search for the comment symbol everywhere in the line, not only at the beginning. +Documentation on variable S2EAOPT_NOCALC in module ida_kernwin: + + don't try to interpret string as IDC (or current extlang) expression + Documentation on variable Choose.CH_MODAL in module ida_kernwin: Modal chooser @@ -106511,6 +106958,10 @@ Documentation on variable NSUP_OREF7 in module ida_nalt: outer complex reference information for operand 8 +Documentation on variable NSUP_EX_FLAGS in module ida_nalt: + + Extended flags. + Documentation on variable NSUP_POINTS in module ida_nalt: SP change points blob (see funcs.cpp). values NSUP_POINTS..NSUP_POINTS+0x1000 @@ -106588,6 +107039,14 @@ Documentation on variable PATCH_TAG in module ida_nalt: Patch netnode tag. +Documentation on variable IDB_DESKTOPS_NODE_NAME in module ida_nalt: + + hash indexed by desktop name with dekstop netnode + +Documentation on variable IDB_DESKTOPS_TAG in module ida_nalt: + + tag to store desktop blob & timestamp + Documentation on variable AFL_LINNUM in module ida_nalt: has line number info @@ -107471,7 +107930,7 @@ Documentation on variable ltag in module ida_netnode: Documentation on variable IDA_SDK_VERSION in module ida_pro: - IDA SDK v8.2. + IDA SDK v8.3. Documentation on variable MAXSTR in module ida_pro: @@ -108027,33 +108486,6 @@ Documentation on variable SEGMOD_SPARSE in module ida_segment: use sparse storage if extending the segment (for set_segm_start(), set_segm_end()) -Documentation on variable MSF_SILENT in module ida_segment: - - don't display a "please wait" box on the screen - -Documentation on variable MSF_NOFIX in module ida_segment: - - don't call the loader to fix relocations - -Documentation on variable MSF_LDKEEP in module ida_segment: - - keep the loader in the memory (optimization) - -Documentation on variable MSF_FIXONCE in module ida_segment: - - call loader only once with the special calling method. valid for - rebase_program(). see loader_t::move_segm. - -Documentation on variable MSF_PRIORITY in module ida_segment: - - loader segments will overwrite any existing debugger segments when moved. valid - for move_segm() - -Documentation on variable MSF_NETNODES in module ida_segment: - - move netnodes instead of changing inf.netdelta (this is slower); valid for - rebase_program() - Documentation on variable MOVE_SEGM_OK in module ida_segment: all ok @@ -108102,6 +108534,33 @@ Documentation on variable MOVE_SEGM_INVAL in module ida_segment: Invalid argument (delta/target does not fit the address space) +Documentation on variable MSF_SILENT in module ida_segment: + + don't display a "please wait" box on the screen + +Documentation on variable MSF_NOFIX in module ida_segment: + + don't call the loader to fix relocations + +Documentation on variable MSF_LDKEEP in module ida_segment: + + keep the loader in the memory (optimization) + +Documentation on variable MSF_FIXONCE in module ida_segment: + + call loader only once with the special calling method. valid for + rebase_program(). see loader_t::move_segm. + +Documentation on variable MSF_PRIORITY in module ida_segment: + + loader segments will overwrite any existing debugger segments when moved. valid + for move_segm() + +Documentation on variable MSF_NETNODES in module ida_segment: + + move netnodes instead of changing inf.netdelta (this is slower); valid for + rebase_program() + Documentation on variable CSS_OK in module ida_segment: ok @@ -109085,9 +109544,9 @@ Documentation on variable CM_CC_THISCALL in module ida_typeinf: stack, purged (x86), first arg is in reg (compiler-dependent) -Documentation on variable CM_CC_MANUAL in module ida_typeinf: +Documentation on variable CM_CC_SWIFT in module ida_typeinf: - special case for compiler specific (not used) + (Swift) arguments and return values in registers (compiler-dependent) Documentation on variable CM_CC_SPOILED in module ida_typeinf: @@ -109095,6 +109554,10 @@ Documentation on variable CM_CC_SPOILED in module ida_typeinf: {spoilreg_t} present real cm_t byte. if n == BFA_FUNC_MARKER, the next byte is the function attribute byte. +Documentation on variable CM_CC_GOLANG in module ida_typeinf: + + (Go) arguments and return value in stack + Documentation on variable CM_CC_SPECIALE in module ida_typeinf: CM_CC_SPECIAL with ellipsis @@ -109413,6 +109876,10 @@ Documentation on variable PRTYPE_COLORED in module ida_typeinf: add color tag COLOR_SYMBOL for any parentheses, commas and colons +Documentation on variable PRTYPE_1LINCMT in module ida_typeinf: + + print comments in one line mode + Documentation on variable NTF_TYPE in module ida_typeinf: type name @@ -110115,7 +110582,7 @@ Documentation on variable stkarg_area_info_t.linkage_area in module ida_typeinf: Documentation on variable enum_type_data_t.group_sizes in module ida_typeinf: - if present, specifies bitfield group sizes each group starts with a mask member + if present, specifies bitmask group sizes each group starts with a mask member Documentation on variable enum_type_data_t.taenum_bits in module ida_typeinf: diff --git a/swig/frame.i b/swig/frame.i index 1d4bdcf..759cfc6 100644 --- a/swig/frame.i +++ b/swig/frame.i @@ -16,6 +16,7 @@ %ignore add_stkvar; %ignore delete_wrong_frame_info; +%ignore get_frame(ea_t); %template(xreflist_t) qvector; diff --git a/swig/hexrays.i b/swig/hexrays.i index 5e8fa4e..e9920a8 100644 --- a/swig/hexrays.i +++ b/swig/hexrays.i @@ -5,14 +5,6 @@ hexdsp_t *get_idapython_hexdsp(); #include %} - -// Functions accepting a `func_t *` can also derive it from an `ea_t` -%typemap(in, fragment="cvt_func_t") func_t *pfn -{ // %typemap(in) func_t *pfn - if ( !cvt_func_t(&$1, $input) ) - SWIG_exception_fail(SWIG_ValueError, "in method '" "$symname" "', argument " "$argnum"" of type '" "func_t const *""' (or an address from which it can be derived)"); -} - %{ SWIGINTERN void __raise_vdf(const vd_failure_t &e) { diff --git a/swig/ida.i b/swig/ida.i index 8ab762c..8668ae9 100644 --- a/swig/ida.i +++ b/swig/ida.i @@ -117,6 +117,25 @@ %ignore setflag(ushort &where,ushort bit,int value); %ignore setflag(uint32 &where,uint32 bit,int value); +/* // `config.hpp` - note: ideally, this should be in its own module, */ +/* // but it might be an overkill to have an `ida_config` module for */ +/* // just one function (as of this writing in any case.) */ +/* %ignore cfgopt_t; */ +/* %ignore cfgopt_t::params_t; */ +/* %ignore cfgopt_t::num_range_t; */ +/* %ignore read_config; */ +/* %ignore read_config2; */ +/* %ignore read_config_file; */ +/* %ignore read_config_file2; */ +/* %ignore read_config_string; */ +/* %ignore register_cfgopts; */ +/* %ignore parse_config_value; */ +/* %ignore cfgopt_t__apply; */ +/* %ignore cfgopt_t__apply2; */ +/* %ignore cfgopt_t__apply3; */ +/* %ignore cfgopt_set_t; */ +/* %ignore cfgopt_set_vec_t; */ + // Make idainfo::get_proc_name() work %include "cstring.i" %cstring_bounded_output(char *buf, 8); @@ -127,6 +146,7 @@ %predefine_uint32_macro(AF_FINAL, 0x80000000); %include "ida.hpp" +/* %include "config.hpp" */ %clear(char *buf); diff --git a/swig/idaapi.i b/swig/idaapi.i index 5ca4e8c..e832c2b 100644 --- a/swig/idaapi.i +++ b/swig/idaapi.i @@ -18,6 +18,8 @@ %rename (parse_command_line3) py_parse_command_line; %constant ea_t BADADDR = ea_t(-1); +%constant ea32_t BADADDR32 = ea32_t(-1ULL); +%constant ea64_t BADADDR64 = ea64_t(-1ULL); %constant sel_t BADSEL = sel_t(-1); %constant size_t SIZE_MAX = size_t(-1); /* %constant nodeidx_t BADNODE = nodeidx_t(-1); */ diff --git a/swig/idp.i b/swig/idp.i index 805b5a8..7b5bcf3 100644 --- a/swig/idp.i +++ b/swig/idp.i @@ -129,6 +129,49 @@ struct undo_records_t; %apply size_t *OUTPUT { size_t *out_consumed }; %apply bytevec_t *vout { bytevec_t *out_relbits }; +// ev_cvt64_supval, ev_cvt64_hashval, ev_privrange_changed +%const_pointer_and_size(uchar, data, datlen, bytevec_t, PyBytes_as_bytevec_t, size); +%typemap(argout) (qstring *errbuf) +{ + // %typemap(argout) (qstring *errbuf) + if ( result < 0 ) + { + Py_XDECREF($result); + if ( $1 != nullptr ) + $result = PyUnicode_from_qstring(*$1); + else + $result = PyUnicode_FromString("Unknown error"); + } +} + +%define %fill_director_method_errbuf(METHOD_NAME) +%typemap(directorout) int METHOD_NAME +{ + // %typemap(directorout) int METHOD_NAME + if ( PyString_Check(result) ) + { + if ( errbuf != nullptr ) + { + PyUnicode_as_qstring(errbuf, result); + } + $result = -1; + } + else if ( PyLong_Check(result) ) + { + $result = PyLong_AsLong(result); + } + else + { + Swig::DirectorTypeMismatchException::raise( + SWIG_ErrorType(SWIG_TypeError), + "in output value of type '" "int" "'" " in method '$symname'"); + } +} +%enddef +%fill_director_method_errbuf(ev_cvt64_supval); +%fill_director_method_errbuf(ev_cvt64_hashval); +%fill_director_method_errbuf(ev_privrange_changed); + // @arnaud ditch this once all modules are ported // temporary: %ignore out_old_data; diff --git a/swig/kernwin.i b/swig/kernwin.i index 98fecf6..64d018b 100644 --- a/swig/kernwin.i +++ b/swig/kernwin.i @@ -120,13 +120,14 @@ struct dirspec_t; %rename (ask_text) py_ask_text; %rename (ask_str) py_ask_str; -%rename (str2ea) py_str2ea; %ignore process_ui_action; %rename (process_ui_action) py_process_ui_action; %ignore execute_sync; %ignore exec_request_t; %rename (execute_sync) py_execute_sync; +%ignore ea2str(char *, size_t, ea_t); + %ignore ui_request_t; %ignore execute_ui_requests; %rename (execute_ui_requests) py_execute_ui_requests; diff --git a/swig/lumina.i b/swig/lumina.i index 1a796f4..2c1784e 100644 --- a/swig/lumina.i +++ b/swig/lumina.i @@ -36,13 +36,6 @@ %rename (extract_type_from_metadata) py_extract_type_from_metadata; %rename (split_metadata) py_split_metadata; - -%feature("nodirector") simple_diff_handler_t; -%ignore simple_diff_handler_t::simple_diff_handler_t; - -%feature("nodirector") simple_idb_diff_handler_t; -%ignore simple_idb_diff_handler_t::simple_idb_diff_handler_t; - %ignore serialized_tinfo::empty; %define %rpc_packet_data_t(TYPE, ENUMERATOR) @@ -57,6 +50,7 @@ %rpc_packet_data_t(pkt_rpc_fail_t, PKT_RPC_FAIL); %rpc_packet_data_t(pkt_rpc_notify_t, PKT_RPC_NOTIFY); %rpc_packet_data_t(pkt_helo_t, PKT_HELO); +%rpc_packet_data_t(pkt_helo_result_t, PKT_HELO_RESULT); %rpc_packet_data_t(pkt_pull_md_t, PKT_PULL_MD); %rpc_packet_data_t(pkt_pull_md_result_t, PKT_PULL_MD_RESULT); %rpc_packet_data_t(pkt_push_md_t, PKT_PUSH_MD); @@ -192,3 +186,8 @@ // // %} + +%pythoncode %{ +# +# +%} diff --git a/swig/moves.i b/swig/moves.i index 461698e..6714dc4 100644 --- a/swig/moves.i +++ b/swig/moves.i @@ -70,15 +70,24 @@ self.template.set_place(idap) def __iter__(self): + """ + Iterate on bookmarks present for the widget. + """ p = self.template.place() if p is not None: for idx in range(bookmarks_t.size(self.template, self.userdata)): yield self[idx] def __len__(self): + """ + Get the number of bookmarks for the widget. + """ return bookmarks_t.size(self.template, self.userdata) def __getitem__(self, idx): + """ + Get the n-th bookmark for the widget. + """ p = self.template.place() if p is not None: if isinstance(idx, int) and idx >= 0 and idx < len(self): diff --git a/swig/nalt.i b/swig/nalt.i index a6f6ed2..73cad9a 100644 --- a/swig/nalt.i +++ b/swig/nalt.i @@ -75,6 +75,8 @@ %ignore refinfo_desc_t; %ignore get_refinfo_descs; +%ignore printop_t::unused; + %ignore write_struc_path; %ignore read_struc_path; %ignore del_struc_path; diff --git a/swig/netnode.i b/swig/netnode.i index b23d8a4..e4151df 100644 --- a/swig/netnode.i +++ b/swig/netnode.i @@ -78,6 +78,7 @@ %ignore netnode_altshift; %ignore netnode_charshift; %ignore netnode_supshift; +%ignore netnode_blobshift; %ignore netnode_altadjust; %ignore netnode_altadjust2; %ignore altadjust_visitor_t; diff --git a/swig/typeinf.i b/swig/typeinf.i index 544d083..425421d 100644 --- a/swig/typeinf.i +++ b/swig/typeinf.i @@ -88,6 +88,7 @@ %ignore get_default_align; %ignore align_size; %ignore align_size; +%ignore fix_type_align; %ignore get_arg_align; %ignore align_stkarg_up; %ignore get_default_enum_size; diff --git a/swig/ua.i b/swig/ua.i index d2d805a..826e17f 100644 --- a/swig/ua.i +++ b/swig/ua.i @@ -39,6 +39,7 @@ %ignore outctx_base_t::regname_idx; %ignore outctx_base_t::suspop; %ignore outctx_base_t::F; +%ignore outctx_base_t::F_unused; %ignore outctx_base_t::outvalues; %ignore outctx_base_t::outvalue_getn_flags; %ignore outctx_base_t::user_data; diff --git a/tbd.md b/tbd.md index 3544b50..9459095 100644 --- a/tbd.md +++ b/tbd.md @@ -37,7 +37,7 @@ Generating TBD Files /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/tapi -For example, this is how you can recreate libpython3.tbd on an Apple Silicon machine: +For example, this is how you can recreate libpython3.tbd: $ alias tapi='/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/tapi' $ cp /Library/Frameworks/Python.framework/Versions/3.9/Python /tmp/ @@ -61,14 +61,14 @@ with newer versions of the macOS linker (no surprise, the format is really unsta So far it seems that only the following options are required: - --- !tapi-tbd - tbd-version: 4 - targets: [ arm64-macos ] - install-name: '@executable_path/libpython3.link.dylib' - current-version: 3.9 - compatibility-version: 3.9 - exports: - - ... + --- !tapi-tbd + tbd-version: 4 + targets: [ arm64-macos, x86_64-macos ] + install-name: '@executable_path/libpython3.link.dylib' + current-version: 3.9 + compatibility-version: 3.9 + exports: + - targets: [ arm64-macos, x86_64-macos ] + symbols: [ _PyAST_CompileEx, ... Everything else can be removed. diff --git a/tools/chkapi.py b/tools/chkapi.py index c54f4ac..5917392 100644 --- a/tools/chkapi.py +++ b/tools/chkapi.py @@ -5,7 +5,6 @@ import sys import os import argparse import re -import six import pprint mydir, _ = os.path.split(__file__) @@ -260,7 +259,7 @@ def check_cpp(args): if parser.text.find("""in output value of type '""int""'");""") > -1: raise Exception("Director output value type reporting doesn't appear to be patched") - for fname, fdef in six.iteritems(functions): + for fname, fdef in functions.items(): if fdef.api_function_name: api_functions_names.append(fdef.api_function_name) diff --git a/tools/deploy/header.i.in b/tools/deploy/header.i.in index ffed1f8..a7f4b48 100644 --- a/tools/deploy/header.i.in +++ b/tools/deploy/header.i.in @@ -10,6 +10,7 @@ #define USE_DANGEROUS_FUNCTIONS 1 #endif #include +#include #undef DEPRECATED #define DEPRECATED %} @@ -800,7 +801,7 @@ SWIGINTERN PyObject *_maybe_byte_array_or_none_result( } %fragment("cvt_" #CONTAINER_TYPE, "header") { - CONTAINER_TYPE *cvt_##CONTAINER_TYPE(PyObject *obj, bool can_be_none=false) + int cvt_##CONTAINER_TYPE(CONTAINER_TYPE **pout, PyObject *obj, bool can_be_none=false) { CONTAINER_TYPE *out = nullptr; if ( can_be_none && obj == Py_None ) @@ -813,38 +814,39 @@ SWIGINTERN PyObject *_maybe_byte_array_or_none_result( out = new CONTAINER_TYPE; IN_CONVERTER(out, obj); } - return out; + *pout = out; + return out != nullptr ? SWIG_NEWOBJ : SWIG_ERROR; } } -%typemap(in, fragment="cvt_" #CONTAINER_TYPE) REFTYPE +%typemap(in, fragment="cvt_" #CONTAINER_TYPE) REFTYPE (int res=0) { // bytes_container REFTYPE, CONTAINER_TYPE typemap(in) - $1 = cvt_ ## CONTAINER_TYPE($input); - if ( $1 == nullptr ) + res = cvt_ ## CONTAINER_TYPE(&$1, $input); + if ( !SWIG_IsOK(res) ) SWIG_exception_fail( SWIG_ValueError, "Expected " ELTYPE_TO_REPORT1 " " "in method '" "$symname" "', argument " "$argnum"" of type '" ELTYPE_TO_REPORT2 "'"); } -%typemap(in) const REFTYPE _type_or_none +%typemap(in) const REFTYPE _type_or_none (int res=0) { // bytes_container REFTYPE _type_or_none, CONTAINER_TYPE typemap(in) - $1 = cvt_ ## CONTAINER_TYPE($input, /*can_be_none=*/ true); - if ( $1 == nullptr ) + res = cvt_ ## CONTAINER_TYPE(&$1, $input, /*can_be_none=*/ true); + if ( !SWIG_IsOK(res) ) SWIG_exception_fail( SWIG_ValueError, "Expected " ELTYPE_TO_REPORT1 " " "in method '" "$symname" "', argument " "$argnum"" of type '" ELTYPE_TO_REPORT2 "'"); } -%typemap(in) const REFTYPE _fields +%typemap(in) const REFTYPE _fields (int res=0) { // bytes_container REFTYPE _fields, CONTAINER_TYPE typemap(in) - $1 = cvt_ ## CONTAINER_TYPE($input, /*can_be_none=*/ true); - if ( $1 == nullptr ) + res = cvt_ ## CONTAINER_TYPE(&$1, $input, /*can_be_none=*/ true); + if ( !SWIG_IsOK(res) ) SWIG_exception_fail( SWIG_ValueError, "Expected " ELTYPE_TO_REPORT1 " " "in method '" "$symname" "', argument " "$argnum"" of type '" ELTYPE_TO_REPORT2 "'"); } %typemap(freearg) REFTYPE { // bytes_container REFTYPE typemap(freearg) - delete $1; + if ( SWIG_IsNewObj(res$argnum) ) delete $1; } %typemap(out) REFTYPE // e.g., %typemap(out) qstring* { // bytes_container typemap(out) REFTYPE @@ -1319,6 +1321,19 @@ struct dynamic_wrapped_array_t { { // typemap(freearg) (const PTRTYPE *BUFNAME, size_t SIZENAME) } +%typemap(directorin) (const uchar *data, size_t datlen) +{ + // typemap(directorin) (const PTRTYPE *BUFNAME, size_t SIZENAME) + if ( $1 != nullptr ) + { + $input = PyBytes_FromStringAndSize((const char *) $1, $2); + } + else + { + Py_INCREF(Py_None); + $input = Py_None; + } +} %enddef %define %const_void_pointer_and_size(PTRTYPE, BUFNAME, SIZENAME) @@ -2059,5 +2074,26 @@ TRY_RAW_LONG: } } +// Functions accepting a `func_t *` can also derive it from an `ea_t` +%typemap(in, fragment="cvt_func_t") func_t * +{ // %typemap(in) func_t * + if ( !cvt_func_t(&$1, $input) ) + SWIG_exception_fail(SWIG_ValueError, "in method '" "$symname" "', argument " "$argnum"" of type '" "func_t const *""' (or an address from which it can be derived)"); +} + + +%typemap(in,numinputs=0) jvalue_t *out (jvalue_t temp) +{ + // %typemap(in,numinputs=0) jvalue_t *out (jvalue_t temp) + $1 = &temp; +} + +%typemap(argout) jvalue_t *out +{ + // %typemap(argout) jvalue_t *out + Py_XDECREF($result); + $result = PyW_from_jvalue_t(*$1); +} + #endif // __HEADER_I__ // END: auto-inserted header diff --git a/tools/dumpdoc.py b/tools/dumpdoc.py index 2808d0a..5da9dc3 100644 --- a/tools/dumpdoc.py +++ b/tools/dumpdoc.py @@ -326,6 +326,30 @@ all_specific_translations = { "'uint64 *'", ), "'unsigned-ea-like-numeric-type *'", True), ], + "ida_kernwin.atoea" : [ + (( + "-> 'uint32 *'", + "-> 'uint64 *'", + ), "'unsigned-ea-like-numeric-type *'", True), + ], + "ida_kernwin.str2ea" : [ + (( + "-> 'uint32 *'", + "-> 'uint64 *'", + ), "'unsigned-ea-like-numeric-type *'", True), + ], + "ida_kernwin.str2ea_ex" : [ + (( + "-> 'uint32 *'", + "-> 'uint64 *'", + ), "'unsigned-ea-like-numeric-type *'", True), + ], + "ida_kernwin.PluginForm" : [ + (( + "module '__main__' from 'tools/dumpdoc.py'", + "module '__main__' (built-in)", + ), "module 'main'", False), + ], } if is_64: diff --git a/tools/genhooks/genhooks.py b/tools/genhooks/genhooks.py index 1f52da2..ab51c82 100644 --- a/tools/genhooks/genhooks.py +++ b/tools/genhooks/genhooks.py @@ -9,7 +9,6 @@ from __future__ import print_function import os import sys -import six dirname, _ = os.path.split(__file__) parent_dirname, _ = os.path.split(dirname) @@ -69,7 +68,7 @@ def gen_methods(out): retbody = "return %s;" % rdata["default"] arg_strs = [] for p in (recipe_data["call_params"] if "call_params" in recipe_data else params[1:]): - if isinstance(p, six.string_types): + if isinstance(p, str): assert(p[0] == "@") synth_info = recipe["synthetic_params"][p] ptype = synth_info["type"] @@ -148,7 +147,7 @@ def gen_notifications(out): argstr = [] # arguments to pass to the call, minus those explicitly suppressed argstr_all = [] # all arguments for p in (recipe_data["call_params"] if "call_params" in recipe_data else params[1:]): - if isinstance(p, six.string_types): + if isinstance(p, str): assert(p[0] == "@") synth_info = recipe["synthetic_params"][p] ptype = synth_info["type"] diff --git a/tools/inject_base_hooks_flags.py b/tools/inject_base_hooks_flags.py deleted file mode 100644 index 33e73f5..0000000 --- a/tools/inject_base_hooks_flags.py +++ /dev/null @@ -1,30 +0,0 @@ -from __future__ import print_function - -import re -import string -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("-i", "--input", required=True) -parser.add_argument("-o", "--output", required=True) -parser.add_argument("-f", "--file-with-flags", required=True) -args = parser.parse_args() - -with open(args.input) as fin: - template = string.Template(fin.read()) - -with open(args.file_with_flags) as fin: - raw = fin.read() -pat = re.compile(r"^#\s*define\s+(HBF_[A-Za-z0-9_]*)\s+([0-9x]*)\s*(.*)$") -decls = [] -for line in raw.split("\n"): - m = pat.match(line) - if m: - decls.append(line) -kvps = { - "BASE_HOOKS_FLAGS" : "\n".join(decls) -} - -with open(args.output, "w") as fout: - fout.write(template.substitute(kvps)) - diff --git a/tools/patch_codegen.py b/tools/patch_codegen.py index 0cd584e..3629b70 100644 --- a/tools/patch_codegen.py +++ b/tools/patch_codegen.py @@ -3,7 +3,6 @@ from __future__ import print_function import os import re import sys -import six import xml.etree.ElementTree as ET from argparse import ArgumentParser @@ -349,7 +348,7 @@ with open(args.input) as f: current_function_proto = None if subst is not None: - if isinstance(subst, six.string_types): + if isinstance(subst, str): subst = [subst] all_lines.extend(map(lambda l: "%s\n" % l, subst)) else: diff --git a/tools/patch_python_codegen.py b/tools/patch_python_codegen.py index 8d708b6..7bc36f4 100644 --- a/tools/patch_python_codegen.py +++ b/tools/patch_python_codegen.py @@ -1,7 +1,6 @@ from __future__ import print_function import os -import six from argparse import ArgumentParser @@ -23,7 +22,7 @@ if os.path.isfile(args.patches): all_lines = [] for l in lines: - for patch_kind, patch_data in six.iteritems(patches): + for patch_kind, patch_data in patches.items(): if patch_kind == "repl_line": for from_, to in patch_data: if l == from_: